14 namespace Fossology\UI\Api\Controllers;
28 use Psr\Http\Message\ServerRequestInterface;
45 public function getGroups($request, $response, $args)
47 $userDao = $this->restHelper->getUserDao();
50 $groups = $userDao->getAdminGroupMap($this->restHelper->getUserId(),
Auth::PERM_ADMIN);
52 $groups = $userDao->getUserGroupMap($this->restHelper->getUserId());
55 foreach ($groups as $key => $value) {
56 $groupObject =
new Group($key,$value);
57 $groupList[] = $groupObject->getArray();
59 return $response->withJson($groupList, 200);
75 if ($apiVersion == ApiVersion::V2) {
76 $queryParams = $request->getQueryParams();
77 $groupName = $queryParams[
'name'] ??
'';
79 $groupName = $request->getHeaderLine(
'name') ?:
'';
81 if (empty($groupName)) {
84 $userDao = $this->restHelper->getUserDao();
85 $groupId = $userDao->addGroup($groupName);
86 $userDao->addGroupMembership($groupId, $this->restHelper->getUserId());
87 $statusCode = $apiVersion == ApiVersion::V2 ? 201 : 200;
88 $returnVal =
new Info($statusCode,
"Group $groupName added.", InfoType::INFO);
89 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
101 public function deleteGroup($request, $response, $args)
104 if (empty($args[
'pathParam'])) {
107 $userId = $this->restHelper->getUserId();
110 $userDao = $this->restHelper->getUserDao();
111 $groupMap = $userDao->getDeletableAdminGroupMap($userId,
114 if ($apiVersion == ApiVersion::V2) {
115 $groupName = $args[
'pathParam'];
116 $groupId = intval($userDao->getGroupIdByName($groupName));
118 $groupId = intval($args[
'pathParam']);
121 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $groupId)) {
122 throw new HttpNotFoundException(
"Group id not found!");
125 $userDao->deleteGroup($groupId);
126 $returnVal =
new Info(202,
"User Group will be deleted", InfoType::INFO);
127 unset($groupMap[$groupId]);
128 }
catch (\Exception $e) {
129 throw new HttpBadRequestException($e->getMessage(), $e);
131 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
143 public function deleteGroupMember($request, $response, $args)
146 $dbManager = $this->dbHelper->getDbManager();
150 if ($apiVersion == ApiVersion::V2) {
151 $user = $this->restHelper->getUserDao()->getUserByName($args[
'userPathParam']);
152 if ($user ===
null) {
153 throw new HttpNotFoundException(
"User not found");
155 $user_pk = intval($user[
'user_pk']);
156 $group_pk = intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam']));
158 $user_pk = intval($args[
'userPathParam']);
159 $group_pk = intval($args[
'pathParam']);
163 $userHasGroupAccess = $this->restHelper->getUserDao()->isAdvisorOrAdmin(
164 $this->restHelper->getUserId(), $group_pk);
166 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $group_pk)) {
167 throw new HttpNotFoundException(
"Group id not found!");
169 if (!$this->dbHelper->doesIdExist(
"users",
"user_pk", $user_pk)) {
170 throw new HttpNotFoundException(
"User id not found!");
172 if (! $userIsAdmin && ! $userHasGroupAccess) {
173 throw new HttpForbiddenException(
"Not advisor or admin of the group. " .
174 "Can not process request.");
176 $fetchResult = $dbManager->getSingleRow(
177 "SELECT group_user_member_pk FROM group_user_member " .
178 "WHERE group_fk=$1 AND user_fk=$2", [$group_pk, $user_pk],
179 __METHOD__ .
".getByGroupAndUser");
180 if (empty($fetchResult)) {
181 throw new HttpNotFoundException(
"Not a member!");
183 $group_user_member_pk = $fetchResult[
'group_user_member_pk'];
185 $adminGroupUsers = $this->restHelper->getPlugin(
'group_manage_users');
186 $adminGroupUsers->updateGUMPermission($group_user_member_pk, -1,$dbManager);
187 $returnVal =
new Info(202,
"User will be removed from group.", InfoType::INFO);
188 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
201 $userId = $this->restHelper->getUserId();
203 $userDao = $this->restHelper->getUserDao();
204 $groupMap = $userDao->getDeletableAdminGroupMap($userId,
207 $groupList = array();
208 foreach ($groupMap as $key => $value) {
209 $groupObject =
new Group($key, $value);
210 $groupList[] = $groupObject->getArray();
212 return $response->withJson($groupList, 200);
227 $userId = $this->restHelper->getUserId();
228 $userDao = $this->restHelper->getUserDao();
229 $groupMap = $userDao->getAdminGroupMap($userId, $_SESSION[
Auth::USER_LEVEL]);
231 if (empty($groupMap)) {
236 $groupId = $apiVersion == ApiVersion::V2 ? intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam'])) : intval($args[
'pathParam']);
239 $dbManager = $this->dbHelper->getDbManager();
241 $stmt = __METHOD__ .
"getUsersWithGroup";
242 $dbManager->prepare($stmt,
"SELECT user_pk, group_perm
243 FROM users INNER JOIN group_user_member gum ON gum.user_fk=users.user_pk AND gum.group_fk=$1;");
245 $result = $dbManager->execute($stmt, array($groupId));
246 $usersWithGroup = $dbManager->fetchAll($result);
249 $memberList = array();
250 foreach ($usersWithGroup as $record) {
251 $user = $this->dbHelper->getUsers($record[
'user_pk']);
252 $userGroupMember =
new UserGroupMember($user[0],$record[
"group_perm"]);
255 $dbManager->freeResult($result);
257 return $response->withJson($memberList, 200);
273 $dbManager = $this->dbHelper->getDbManager();
278 if ($apiVersion == ApiVersion::V2) {
279 $user = $this->restHelper->getUserDao()->getUserByName($args[
'userPathParam']);
280 if ($user ===
null) {
283 $newuser = intval($user[
'user_pk']);
284 $group_pk = intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam']));
286 $group_pk = intval($args[
'pathParam']);
287 $newuser = intval($args[
'userPathParam']);
289 $newperm = intval($body[
'perm']);
292 $userHasGroupAccess = $this->restHelper->getUserDao()->isAdvisorOrAdmin(
293 $this->restHelper->getUserId(), $group_pk);
295 if (!isset($newperm)) {
298 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $group_pk)) {
301 if (!$this->dbHelper->doesIdExist(
"users",
"user_pk", $newuser)) {
304 if ($newperm < 0 || $newperm > 2) {
307 if (! $userIsAdmin && ! $userHasGroupAccess) {
309 "Can not process request.");
311 $stmt = __METHOD__ .
".getByGroupAndUser";
312 $sql =
"SELECT group_user_member_pk FROM group_user_member WHERE group_fk=$1 AND user_fk=$2;";
313 $fetchResult = $dbManager->getSingleRow($sql, [$group_pk, $newuser], $stmt);
316 if (!empty($fetchResult)) {
319 $dbManager->prepare($stmt = __METHOD__ .
".insertGUP",
320 "INSERT INTO group_user_member (group_fk, user_fk, group_perm) VALUES ($1,$2,$3)");
321 $dbManager->freeResult(
322 $dbManager->execute($stmt, array($group_pk, $newuser, $newperm)));
324 $returnVal =
new Info(201,
"User added to group.", InfoType::INFO);
325 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
337 public function changeUserPermission($request, $response, $args)
341 $dbManager = $this->dbHelper->getDbManager();
345 if ($apiVersion == ApiVersion::V2) {
346 $user = $this->restHelper->getUserDao()->getUserByName($args[
'userPathParam']);
347 if ($user ===
null) {
350 $user_pk = intval($user[
'user_pk']);
351 $group_pk = intval($this->restHelper->getUserDao()->getGroupIdByName($args[
'pathParam']));
353 $user_pk = intval($args[
'userPathParam']);
354 $group_pk = intval($args[
'pathParam']);
359 $userHasGroupAccess = $this->restHelper->getUserDao()->isAdvisorOrAdmin(
360 $this->restHelper->getUserId(), $group_pk);
364 if (!isset($newperm)) {
365 throw new HttpBadRequestException(
"Permission should be provided");
367 if (!$this->dbHelper->doesIdExist(
"groups",
"group_pk", $group_pk)) {
368 throw new HttpNotFoundException(
"Group id not found!");
370 if (!$this->dbHelper->doesIdExist(
"users",
"user_pk", $user_pk)) {
371 throw new HttpNotFoundException(
"User id not found!");
374 throw new HttpBadRequestException(
"Permission can not be negative");
377 throw new HttpBadRequestException(
"Permission can not be greater than 2");
379 if (! $userIsAdmin && ! $userHasGroupAccess) {
380 throw new HttpForbiddenException(
"Not advisor or admin of the group. " .
381 "Can not process request.");
386 $memberRow = $dbManager->getSingleRow(
"SELECT group_user_member_pk FROM group_user_member WHERE group_fk=$1 AND user_fk=$2",
387 [$group_pk, $user_pk],
388 __METHOD__ .
".getByGroupAndUser");
390 if (empty($memberRow)) {
391 throw new HttpNotFoundException(
"User not part of the group");
393 $group_user_member_pk = $memberRow[
'group_user_member_pk'];
395 $adminGroupUsers = $this->restHelper->getPlugin(
'group_manage_users');
396 $adminGroupUsers->updateGUMPermission($group_user_member_pk, $newperm,$dbManager);
397 $info =
new Info(202,
"Permission updated successfully.", InfoType::INFO);
398 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.