14 namespace Fossology\UI\Api\Controllers;
29 use Psr\Http\Message\ServerRequestInterface;
46 public function getGroups($request, $response, $args)
48 $userDao = $this->restHelper->getUserDao();
51 $groups = $userDao->getAdminGroupMap($this->restHelper->getUserId(),
Auth::PERM_ADMIN);
53 $groups = $userDao->getUserGroupMap($this->restHelper->getUserId());
56 foreach ($groups as $key => $value) {
57 $groupObject =
new Group($key,$value);
58 $groupList[] = $groupObject->getArray();
60 return $response->withJson($groupList, 200);
76 if ($apiVersion == ApiVersion::V2) {
77 $queryParams = $request->getQueryParams();
78 $groupName = $queryParams[
'name'] ??
'';
80 $groupName = $request->getHeaderLine(
'name') ?:
'';
82 if (empty($groupName)) {
85 $userDao = $this->restHelper->getUserDao();
86 $groupId = $userDao->addGroup($groupName);
87 $userDao->addGroupMembership($groupId, $this->restHelper->getUserId());
88 $statusCode = $apiVersion == ApiVersion::V2 ? 201 : 200;
89 $returnVal =
new Info($statusCode,
"Group $groupName added.", InfoType::INFO);
90 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
102 public function deleteGroup($request, $response, $args)
105 if (empty($args[
'pathParam'])) {
108 $userId = $this->restHelper->getUserId();
111 $userDao = $this->restHelper->getUserDao();
112 $groupMap = $userDao->getDeletableAdminGroupMap($userId,
115 if ($apiVersion == ApiVersion::V2) {
116 $groupName = $args[
'pathParam'];
117 $groupId = intval($userDao->getGroupIdByName($groupName));
119 $groupId = intval($args[
'pathParam']);
122 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $groupId)) {
123 throw new HttpNotFoundException(
"Group id not found!");
126 $userDao->deleteGroup($groupId);
127 $returnVal =
new Info(202,
"User Group will be deleted", InfoType::INFO);
128 unset($groupMap[$groupId]);
129 }
catch (\Exception $e) {
130 throw new HttpBadRequestException($e->getMessage(), $e);
132 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
144 public function updateGroup($request, $response, $args)
147 if (empty($args[
'pathParam'])) {
148 throw new HttpBadRequestException(
"ERROR - No group name or id provided");
151 if (empty($newGroupName)) {
152 throw new HttpBadRequestException(
"ERROR - no group name provided");
155 $adminGroupEdit = $this->restHelper->getPlugin(
'group_edit');
156 $validationError = $adminGroupEdit->validateGroupName($newGroupName);
157 if (!empty($validationError)) {
158 throw new HttpBadRequestException($validationError);
162 $userDao = $this->restHelper->getUserDao();
164 if ($apiVersion == ApiVersion::V2) {
165 $groupId = intval($userDao->getGroupIdByName($args[
'pathParam']));
167 $groupId = intval($args[
'pathParam']);
170 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $groupId)) {
171 throw new HttpNotFoundException(
"Group id not found!");
173 $groupMap = $userDao->getDeletableAdminGroupMap($this->restHelper->getUserId(),
175 if (!array_key_exists($groupId, $groupMap)) {
176 throw new HttpForbiddenException(
"Not admin of the group. " .
177 "Can not process request.");
180 $userDao->editGroup($groupId, $newGroupName);
181 }
catch (\Exception $e) {
182 throw new HttpConflictException($e->getMessage(), $e);
184 $returnVal =
new Info(200,
"Group $newGroupName updated.", InfoType::INFO);
185 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
197 public function deleteGroupMember($request, $response, $args)
200 $dbManager = $this->dbHelper->getDbManager();
204 if ($apiVersion == ApiVersion::V2) {
205 $user = $this->restHelper->getUserDao()->getUserByName($args[
'userPathParam']);
206 if ($user ===
null) {
207 throw new HttpNotFoundException(
"User not found");
209 $user_pk = intval($user[
'user_pk']);
210 $group_pk = intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam']));
212 $user_pk = intval($args[
'userPathParam']);
213 $group_pk = intval($args[
'pathParam']);
217 $userHasGroupAccess = $this->restHelper->getUserDao()->isAdvisorOrAdmin(
218 $this->restHelper->getUserId(), $group_pk);
220 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $group_pk)) {
221 throw new HttpNotFoundException(
"Group id not found!");
223 if (!$this->dbHelper->doesIdExist(
"users",
"user_pk", $user_pk)) {
224 throw new HttpNotFoundException(
"User id not found!");
226 if (! $userIsAdmin && ! $userHasGroupAccess) {
227 throw new HttpForbiddenException(
"Not advisor or admin of the group. " .
228 "Can not process request.");
230 $fetchResult = $dbManager->getSingleRow(
231 "SELECT group_user_member_pk FROM group_user_member " .
232 "WHERE group_fk=$1 AND user_fk=$2", [$group_pk, $user_pk],
233 __METHOD__ .
".getByGroupAndUser");
234 if (empty($fetchResult)) {
235 throw new HttpNotFoundException(
"Not a member!");
237 $group_user_member_pk = $fetchResult[
'group_user_member_pk'];
239 $adminGroupUsers = $this->restHelper->getPlugin(
'group_manage_users');
240 $adminGroupUsers->updateGUMPermission($group_user_member_pk, -1,$dbManager);
241 $returnVal =
new Info(202,
"User will be removed from group.", InfoType::INFO);
242 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
255 $userId = $this->restHelper->getUserId();
257 $userDao = $this->restHelper->getUserDao();
258 $groupMap = $userDao->getDeletableAdminGroupMap($userId,
261 $groupList = array();
262 foreach ($groupMap as $key => $value) {
263 $groupObject =
new Group($key, $value);
264 $groupList[] = $groupObject->getArray();
266 return $response->withJson($groupList, 200);
281 $userId = $this->restHelper->getUserId();
282 $userDao = $this->restHelper->getUserDao();
285 $groupId = $apiVersion == ApiVersion::V2 ? intval($userDao->getGroupIdByName($args[
'pathParam'])) : intval($args[
'pathParam']);
288 $userHasGroupAccess = $userDao->isAdvisorOrAdmin($userId, $groupId);
290 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $groupId)) {
293 if (! $userIsAdmin && ! $userHasGroupAccess) {
295 "Can not process request.");
299 $dbManager = $this->dbHelper->getDbManager();
301 $stmt = __METHOD__ .
"getUsersWithGroup";
302 $dbManager->prepare($stmt,
"SELECT user_pk, group_perm
303 FROM users INNER JOIN group_user_member gum ON gum.user_fk=users.user_pk AND gum.group_fk=$1;");
305 $result = $dbManager->execute($stmt, array($groupId));
306 $usersWithGroup = $dbManager->fetchAll($result);
309 $memberList = array();
310 foreach ($usersWithGroup as $record) {
311 $user = $this->dbHelper->getUsers($record[
'user_pk']);
312 $userGroupMember =
new UserGroupMember($user[0],$record[
"group_perm"]);
315 $dbManager->freeResult($result);
317 return $response->withJson($memberList, 200);
333 $dbManager = $this->dbHelper->getDbManager();
338 if ($apiVersion == ApiVersion::V2) {
339 $user = $this->restHelper->getUserDao()->getUserByName($args[
'userPathParam']);
340 if ($user ===
null) {
343 $newuser = intval($user[
'user_pk']);
344 $group_pk = intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam']));
346 $group_pk = intval($args[
'pathParam']);
347 $newuser = intval($args[
'userPathParam']);
349 $newperm = intval($body[
'perm']);
352 $userHasGroupAccess = $this->restHelper->getUserDao()->isAdvisorOrAdmin(
353 $this->restHelper->getUserId(), $group_pk);
355 if (!isset($newperm)) {
358 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $group_pk)) {
361 if (!$this->dbHelper->doesIdExist(
"users",
"user_pk", $newuser)) {
364 if ($newperm < 0 || $newperm > 2) {
367 if (! $userIsAdmin && ! $userHasGroupAccess) {
369 "Can not process request.");
371 $stmt = __METHOD__ .
".getByGroupAndUser";
372 $sql =
"SELECT group_user_member_pk FROM group_user_member WHERE group_fk=$1 AND user_fk=$2;";
373 $fetchResult = $dbManager->getSingleRow($sql, [$group_pk, $newuser], $stmt);
376 if (!empty($fetchResult)) {
379 $dbManager->prepare($stmt = __METHOD__ .
".insertGUP",
380 "INSERT INTO group_user_member (group_fk, user_fk, group_perm) VALUES ($1,$2,$3)");
381 $dbManager->freeResult(
382 $dbManager->execute($stmt, array($group_pk, $newuser, $newperm)));
384 $returnVal =
new Info(201,
"User added to group.", InfoType::INFO);
385 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
397 public function changeUserPermission($request, $response, $args)
401 $dbManager = $this->dbHelper->getDbManager();
405 if ($apiVersion == ApiVersion::V2) {
406 $user = $this->restHelper->getUserDao()->getUserByName($args[
'userPathParam']);
407 if ($user ===
null) {
410 $user_pk = intval($user[
'user_pk']);
411 $group_pk = intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam']));
413 $user_pk = intval($args[
'userPathParam']);
414 $group_pk = intval($args[
'pathParam']);
419 $userHasGroupAccess = $this->restHelper->getUserDao()->isAdvisorOrAdmin(
420 $this->restHelper->getUserId(), $group_pk);
424 if (!isset($newperm)) {
425 throw new HttpBadRequestException(
"Permission should be provided");
427 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $group_pk)) {
428 throw new HttpNotFoundException(
"Group id not found!");
430 if (!$this->dbHelper->doesIdExist(
"users",
"user_pk", $user_pk)) {
431 throw new HttpNotFoundException(
"User id not found!");
434 throw new HttpBadRequestException(
"Permission can not be negative");
437 throw new HttpBadRequestException(
"Permission can not be greater than 2");
439 if (! $userIsAdmin && ! $userHasGroupAccess) {
440 throw new HttpForbiddenException(
"Not advisor or admin of the group. " .
441 "Can not process request.");
446 $memberRow = $dbManager->getSingleRow(
"SELECT group_user_member_pk FROM group_user_member WHERE group_fk=$1 AND user_fk=$2",
447 [$group_pk, $user_pk],
448 __METHOD__ .
".getByGroupAndUser");
450 if (empty($memberRow)) {
451 throw new HttpNotFoundException(
"User not part of the group");
453 $group_user_member_pk = $memberRow[
'group_user_member_pk'];
455 $adminGroupUsers = $this->restHelper->getPlugin(
'group_manage_users');
456 $adminGroupUsers->updateGUMPermission($group_user_member_pk, $newperm,$dbManager);
457 $info =
new Info(202,
"Permission updated successfully.", InfoType::INFO);
458 return $response->withJson($info->getArray(), $info->getCode());
Contains the constants and helpers for authentication of user.
static isAdmin()
Check if user is admin.
Controller for Group model.
createGroup($request, $response, $args)
getGroups($request, $response, $args)
getDeletableGroups($request, $response, $args)
getGroupMembers($request, $response, $args)
addMember($request, $response, $args)
Base controller for REST calls.
getParsedBody(ServerRequestInterface $request)
Parse request body as JSON and return associative PHP array.
Override Slim response for withJson function.
static getVersion(ServerRequestInterface $request)
Different type of infos provided by REST.
Info model to contain general error and return values.
char * trim(char *ptext)
Trimming whitespace.