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();
283 $groupMap = $userDao->getAdminGroupMap($userId, $_SESSION[
Auth::USER_LEVEL]);
285 if (empty($groupMap)) {
290 $groupId = $apiVersion == ApiVersion::V2 ? intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam'])) : intval($args[
'pathParam']);
293 $dbManager = $this->dbHelper->getDbManager();
295 $stmt = __METHOD__ .
"getUsersWithGroup";
296 $dbManager->prepare($stmt,
"SELECT user_pk, group_perm
297 FROM users INNER JOIN group_user_member gum ON gum.user_fk=users.user_pk AND gum.group_fk=$1;");
299 $result = $dbManager->execute($stmt, array($groupId));
300 $usersWithGroup = $dbManager->fetchAll($result);
303 $memberList = array();
304 foreach ($usersWithGroup as $record) {
305 $user = $this->dbHelper->getUsers($record[
'user_pk']);
306 $userGroupMember =
new UserGroupMember($user[0],$record[
"group_perm"]);
309 $dbManager->freeResult($result);
311 return $response->withJson($memberList, 200);
327 $dbManager = $this->dbHelper->getDbManager();
332 if ($apiVersion == ApiVersion::V2) {
333 $user = $this->restHelper->getUserDao()->getUserByName($args[
'userPathParam']);
334 if ($user ===
null) {
337 $newuser = intval($user[
'user_pk']);
338 $group_pk = intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam']));
340 $group_pk = intval($args[
'pathParam']);
341 $newuser = intval($args[
'userPathParam']);
343 $newperm = intval($body[
'perm']);
346 $userHasGroupAccess = $this->restHelper->getUserDao()->isAdvisorOrAdmin(
347 $this->restHelper->getUserId(), $group_pk);
349 if (!isset($newperm)) {
352 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $group_pk)) {
355 if (!$this->dbHelper->doesIdExist(
"users",
"user_pk", $newuser)) {
358 if ($newperm < 0 || $newperm > 2) {
361 if (! $userIsAdmin && ! $userHasGroupAccess) {
363 "Can not process request.");
365 $stmt = __METHOD__ .
".getByGroupAndUser";
366 $sql =
"SELECT group_user_member_pk FROM group_user_member WHERE group_fk=$1 AND user_fk=$2;";
367 $fetchResult = $dbManager->getSingleRow($sql, [$group_pk, $newuser], $stmt);
370 if (!empty($fetchResult)) {
373 $dbManager->prepare($stmt = __METHOD__ .
".insertGUP",
374 "INSERT INTO group_user_member (group_fk, user_fk, group_perm) VALUES ($1,$2,$3)");
375 $dbManager->freeResult(
376 $dbManager->execute($stmt, array($group_pk, $newuser, $newperm)));
378 $returnVal =
new Info(201,
"User added to group.", InfoType::INFO);
379 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
391 public function changeUserPermission($request, $response, $args)
395 $dbManager = $this->dbHelper->getDbManager();
399 if ($apiVersion == ApiVersion::V2) {
400 $user = $this->restHelper->getUserDao()->getUserByName($args[
'userPathParam']);
401 if ($user ===
null) {
404 $user_pk = intval($user[
'user_pk']);
405 $group_pk = intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam']));
407 $user_pk = intval($args[
'userPathParam']);
408 $group_pk = intval($args[
'pathParam']);
413 $userHasGroupAccess = $this->restHelper->getUserDao()->isAdvisorOrAdmin(
414 $this->restHelper->getUserId(), $group_pk);
418 if (!isset($newperm)) {
419 throw new HttpBadRequestException(
"Permission should be provided");
421 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $group_pk)) {
422 throw new HttpNotFoundException(
"Group id not found!");
424 if (!$this->dbHelper->doesIdExist(
"users",
"user_pk", $user_pk)) {
425 throw new HttpNotFoundException(
"User id not found!");
428 throw new HttpBadRequestException(
"Permission can not be negative");
431 throw new HttpBadRequestException(
"Permission can not be greater than 2");
433 if (! $userIsAdmin && ! $userHasGroupAccess) {
434 throw new HttpForbiddenException(
"Not advisor or admin of the group. " .
435 "Can not process request.");
440 $memberRow = $dbManager->getSingleRow(
"SELECT group_user_member_pk FROM group_user_member WHERE group_fk=$1 AND user_fk=$2",
441 [$group_pk, $user_pk],
442 __METHOD__ .
".getByGroupAndUser");
444 if (empty($memberRow)) {
445 throw new HttpNotFoundException(
"User not part of the group");
447 $group_user_member_pk = $memberRow[
'group_user_member_pk'];
449 $adminGroupUsers = $this->restHelper->getPlugin(
'group_manage_users');
450 $adminGroupUsers->updateGUMPermission($group_user_member_pk, $newperm,$dbManager);
451 $info =
new Info(202,
"Permission updated successfully.", InfoType::INFO);
452 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.