FOSSology  4.4.0
Open Source License Compliance by Open Source Software
UserController.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2018, 2021 Siemens AG
4  Author: Gaurav Mishra <mishra.gaurav@siemens.com>
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
13 namespace Fossology\UI\Api\Controllers;
14 
30 use Psr\Http\Message\ServerRequestInterface;
31 
37 {
47  public function getUsers($request, $response, $args)
48  {
49  $id = null;
50  if (isset($args['id'])) {
51  $id = intval($args['id']);
52  if (! $this->dbHelper->doesIdExist("users", "user_pk", $id)) {
53  throw new HttpNotFoundException("UserId doesn't exist");
54  }
55  }
56  $users = $this->dbHelper->getUsers($id);
57 
58  $allUsers = array();
59  foreach ($users as $user) {
60  $allUsers[] = $user->getArray();
61  }
62  if ($id !== null) {
63  $allUsers = $allUsers[0];
64  }
65  return $response->withJson($allUsers, 200);
66  }
67 
77  public function addUser($request, $response, $args)
78  {
79  $userDetails = $this->getParsedBody($request);
80  $userHelper = new UserHelper();
81  // creating symphony request
82  $symfonyRequest = new \Symfony\Component\HttpFoundation\Request();
83  $symfonyRequest->request->set('username', $userDetails['name']);
84  $symfonyRequest->request->set('pass1', $userDetails['user_pass']);
85  $symfonyRequest->request->set('pass2', $userDetails['user_pass']);
86  $symfonyRequest->request->set('description', $userDetails['description']);
87  $symfonyRequest->request->set('permission', $userHelper->getEquivalentValueForPermission($userDetails['accessLevel']));
88  $symfonyRequest->request->set('folder', $userDetails['rootFolderId']);
89  $symfonyRequest->request->set('enote', $userDetails['emailNotification'] ? 'y' : 'n');
90  $symfonyRequest->request->set('email', $userDetails['email']);
91  $symfonyRequest->request->set('public', $userDetails['defaultVisibility']);
92  $symfonyRequest->request->set('default_bucketpool_fk', $userDetails['defaultBucketpool'] ?? 2);
93 
94  $agents = array();
95  if (isset($userDetails['agents'])) {
96  if (is_string($userDetails['agents'])) { // If 'x-www-form-urlencoded', inner elements are not decoded
97  $userDetails['agents'] = json_decode($userDetails['agents'], true);
98  }
99  $agents['Check_agent_mimetype'] = isset($userDetails['agents']['mime']) && $userDetails['agents']['mime'] ? 1 : 0;
100  $agents['Check_agent_monk'] = isset($userDetails['agents']['monk']) && $userDetails['agents']['monk'] ? 1 : 0;
101  $agents['Check_agent_ojo'] = isset($userDetails['agents']['ojo']) && $userDetails['agents']['ojo'] ? 1 : 0;
102  $agents['Check_agent_bucket'] = isset($userDetails['agents']['bucket']) && $userDetails['agents']['bucket'] ? 1 : 0 ;
103  $agents['Check_agent_copyright'] = isset($userDetails['agents']['copyright_email_author']) && $userDetails['agents']['copyright_email_author'] ? 1 : 0;
104  $agents['Check_agent_ecc'] = isset($userDetails['agents']['ecc']) && $userDetails['agents']['ecc'] ? 1 : 0;
105  $agents['Check_agent_keyword'] = isset($userDetails['agents']['keyword']) && $userDetails['agents']['keyword'] ? 1 : 0;
106  $agents['Check_agent_nomos'] = isset($userDetails['agents']['nomos']) && $userDetails['agents']['nomos'] ? 1 : 0;
107  $agents['Check_agent_pkgagent'] = isset($userDetails['agents']['package']) && $userDetails['agents']['package'] ? 1 : 0;
108  $agents['Check_agent_reso'] = isset($userDetails['agents']['reso']) && $userDetails['agents']['reso'] ? 1 : 0;
109  $agents['Check_agent_shagent'] = isset($userDetails['agents']['heritage']) && $userDetails['agents']['heritage'] ? 1 : 0 ;
110  }
111 
112  $symfonyRequest->request->set('user_agent_list', userAgents($agents));
113 
114  // initialising the user_add object
115  global $container;
116  $restHelper = $container->get('helper.restHelper');
117  $userAddObj = $restHelper->getPlugin('user_add');
118 
119  // calling the add function
120  $ErrMsg = $userAddObj->add($symfonyRequest);
121 
122  if ($ErrMsg != '') {
123  throw new HttpInternalServerErrorException($ErrMsg);
124  }
125 
126  $returnVal = new Info(201, "User created successfully", InfoType::INFO);
127  return $response->withJson($returnVal->getArray(), $returnVal->getCode());
128  }
129 
139  public function deleteUser($request, $response, $args)
140  {
141  $id = intval($args['id']);
142  if (!$this->dbHelper->doesIdExist("users","user_pk", $id)) {
143  throw new HttpNotFoundException("UserId doesn't exist");
144  }
145 
146  $this->dbHelper->deleteUser($id);
147  $returnVal = new Info(202, "User will be deleted", InfoType::INFO);
148  return $response->withJson($returnVal->getArray(), $returnVal->getCode());
149  }
150 
159  public function getCurrentUser($request, $response, $args)
160  {
161  $user = $this->dbHelper->getUsers($this->restHelper->getUserId())[0]->getArray();
162  $userDao = $this->restHelper->getUserDao();
163  $defaultGroup = $userDao->getUserAndDefaultGroupByUserName($user["name"])["group_name"];
164  $user["default_group"] = $defaultGroup;
165  return $response->withJson($user, 200);
166  }
167 
177  public function updateUser($request, $response, $args)
178  {
179  $id = intval($args['id']);
180  if ($this->dbHelper->doesIdExist("users","user_pk", $id)) {
181  throw new HttpNotFoundException("UserId doesn't exist");
182  }
183  $reqBody = $this->getParsedBody($request);
184  $userHelper = new UserHelper($id);
185  $returnVal = $userHelper->modifyUserDetails($reqBody);
186  return $response->withJson($returnVal->getArray(), $returnVal->getCode());
187  }
188 
198  public function createRestApiToken($request, $response, $args)
199  {
200  $reqBody = $this->getParsedBody($request);
201  $tokenRequest = TokenRequest::fromArray($reqBody,
202  ApiVersion::getVersion($request));
203  $symfonyRequest = new \Symfony\Component\HttpFoundation\Request();
204 
205  // translating values for symfony request
206  $symfonyRequest->request->set('pat_name', $tokenRequest->getTokenName());
207  $symfonyRequest->request->set('pat_expiry', $tokenRequest->getTokenExpire());
208  $symfonyRequest->request->set('pat_scope', $tokenRequest->getTokenScope());
209 
210  // initialising the user_edit plugin
211  global $container;
213  $restHelper = $container->get('helper.restHelper');
215  $userEditObj = $restHelper->getPlugin('user_edit');
216 
217  // creating the REST token
218  try {
219  $token = $userEditObj->generateNewToken($symfonyRequest);
220  } catch (DuplicateTokenKeyException $e) {
221  throw new HttpTooManyRequestException("Please try again later.", $e);
222  } catch (DuplicateTokenNameException $e) {
223  throw new HttpConflictException($e->getMessage(), $e);
224  } catch (\UnexpectedValueException $e) {
225  throw new HttpBadRequestException($e->getMessage(), $e);
226  }
227 
228  $returnVal = new Info(201, "Token created successfully", InfoType::INFO);
229  $res = $returnVal->getArray();
230  $res['token'] = $token;
231  return $response->withJson($res, $returnVal->getCode());
232  }
233 
243  public function getTokens($request, $response, $args)
244  {
245  $tokenType = $args['type'];
246  if ($tokenType != "active" && $tokenType != "expired") {
247  throw new HttpBadRequestException("Invalid request!");
248  }
249  // initialising the user_edit plugin
250  global $container;
251  $restHelper = $container->get('helper.restHelper');
252  $userEditObj = $restHelper->getPlugin('user_edit');
253 
254  // getting the list of tokens based on the type of token requested
255  $tokens = $tokenType == "active" ? $userEditObj->getListOfActiveTokens() : $userEditObj->getListOfExpiredTokens();
256  $manageTokenObj = $restHelper->getPlugin('manage-token');
257 
258  $finalTokens = array();
259  foreach ($tokens as $token) {
260  list($tokenPk) = explode(".", $token['id']);
261  $tokenVal = $manageTokenObj->revealToken($tokenPk);
262  $finalTokens[] = array_merge($token, ['token' => $tokenVal['token']]);
263  }
264 
265  $returnVal = new Info(200, "Success", InfoType::INFO);
266  $res = $returnVal->getArray();
267  $res[$tokenType . '_tokens'] = $finalTokens;
268  return $response->withJson($res, $returnVal->getCode());
269  }
270 }
Exception when a token has duplicate key for same user.
Exception when a token has duplicate name for same user.
Base controller for REST calls.
getParsedBody(ServerRequestInterface $request)
Parse request body as JSON and return associative PHP array.
getCurrentUser($request, $response, $args)
Override Slim response for withJson function.
Provides various DAO helper functions for REST api.
Definition: RestHelper.php:32
Handle user related queries.
Definition: UserHelper.php:27
static getVersion(ServerRequestInterface $request)
Definition: ApiVersion.php:29
Different type of infos provided by REST.
Definition: InfoType.php:16
Info model to contain general error and return values.
Definition: Info.php:19
static fromArray(array $input, int $version)
userAgents($agents=null)
Read the UI form and format the user selected agents into a comma separated list.