FOSSology  4.4.0
Open Source License Compliance by Open Source Software
user-edit.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014 Hewlett-Packard Development Company, L.P.
4  SPDX-FileCopyrightText: © 2021-2022 Orange
5  Contributors: Piotr Pszczola, Bartlomiej Drozdz
6 
7  SPDX-License-Identifier: GPL-2.0-only
8 */
9 
21 use Symfony\Component\HttpFoundation\Request;
22 
24 {
25  const NAME = "user_edit";
26 
28  private $dbManager;
29 
33  private $authHelper;
34 
38  private $userDao;
39 
40  function __construct()
41  {
42  parent::__construct(self::NAME, array(
43  self::TITLE => _("Edit User Account"),
44  self::MENU_LIST => 'Admin::Users::Edit User Account',
45  self::REQUIRES_LOGIN => true,
46  self::PERMISSION => Auth::PERM_READ
47  ));
48 
49  $this->dbManager = $this->getObject('db.manager');
50  $this->authHelper = $this->getObject('helper.authHelper');
51  $this->userDao = $this->getObject('dao.user');
52  }
53 
63  function handle(Request $request)
64  {
65  /* Is the session owner an admin? */
66  $user_pk = Auth::getUserId();
67  $SessionUserRec = $this->GetUserRec($user_pk);
68  $SessionIsAdmin = $this->IsSessionAdmin($SessionUserRec);
69  $newToken = "";
70  $newClient = "";
71 
72  $vars = array('refreshUri' => Traceback_uri() . "?mod=" . self::NAME);
73 
74  if (GetParm('new_client', PARM_STRING)) {
75  try {
76  $newClient = $this->addNewClient($request);
77  } catch (\Exception $e) {
78  $newClient = $e->getMessage();
79  }
80  }
81  if (GetParm('new_pat', PARM_STRING)) {
82  try {
83  $newToken = $this->generateNewToken($request);
84  } catch (\Exception $e) {
85  $vars['message'] = $e->getMessage();
86  }
87  }
88 
89  $user_pk_to_modify = intval($request->get('user_pk'));
90  if (! ($SessionIsAdmin || empty($user_pk_to_modify) ||
91  $user_pk == $user_pk_to_modify)) {
92  $vars['content'] = _("Your request is not valid.");
93  return $this->render('include/base.html.twig', $this->mergeWithDefault($vars));
94  }
95 
96  /*
97  * If this is a POST (the submit button was clicked), then process the
98  * request.
99  */
100  $BtnText = $request->get('UpdateBtn');
101  if (! empty($BtnText)) {
102  /* Get the form data to in an associated array */
103  $UserRec = $this->CreateUserRec($request, "");
104 
105  $rv = $this->UpdateUser($UserRec, $SessionIsAdmin);
106  if (empty($rv)) {
107  // Successful db update
108  $vars['message'] = "User $UserRec[user_name] updated.";
109 
110  /* Reread the user record as update verification */
111  $UserRec = $this->CreateUserRec($request, $UserRec['user_pk']);
112  if ($user_pk == $user_pk_to_modify) {
113  $_SESSION['User'] = $UserRec['user_name'];
114  }
115  } else {
116  if (empty($UserRec['user_name']) || $_SESSION['User'] != $UserRec['user_name']) {
117  $UserRec = $this->CreateUserRec($request, $UserRec['user_pk']);
118  }
119  $vars['message'] = $rv;
120  }
121  } else {
122  $NewUserpk = intval($request->get('newuser'));
123  $UserRec = empty($NewUserpk) ? $this->CreateUserRec($request, $user_pk) : $this->CreateUserRec($request, $NewUserpk);
124  }
125 
126  /* display the edit form with the requested user data */
127  $vars = array_merge($vars, $this->DisplayForm($UserRec, $SessionIsAdmin));
128  $vars['userId'] = $UserRec['user_pk'];
129  $vars['newToken'] = $newToken;
130  $vars['newClient'] = $newClient;
131  $vars['tokenList'] = $this->getListOfActiveTokens();
132  $vars['expiredTokenList'] = $this->getListOfExpiredTokens();
133  $vars['clientList'] = $this->getListOfActiveClients();
134  $vars['revokedClientList'] = $this->getListOfExpiredClients();
135  $vars['maxTokenDate'] = $this->authHelper->getMaxTokenValidity();
136  $vars['writeAccess'] = ($_SESSION[Auth::USER_LEVEL] >= 3);
137  $vars['policyRegex'] = generate_password_policy();
138  $vars['policyDisabled'] = "true"; // Form allows empty password for unchanged
139  $vars['formName'] = "user_edit";
140  $vars['passwordPolicy'] = "";
142  if ($policy != "No policy defined.") {
143  $vars['passwordPolicy'] = $policy;
144  }
145  $restToken = Auth::getRestTokenType();
146  if ($restToken == Auth::TOKEN_OAUTH) {
147  $restToken = "oauth";
148  } elseif ($restToken == Auth::TOKEN_BOTH) {
149  $restToken = "both";
150  } else {
151  $restToken = "token";
152  }
153  $vars['resttoken'] = $restToken;
154 
155  return $this->render('user_edit.html.twig', $this->mergeWithDefault($vars));
156  }
157 
165  private function DisplayForm($UserRec, $SessionIsAdmin)
166  {
167  global $SysConf;
168 
169  $vars = array('isSessionAdmin' => $SessionIsAdmin,
170  'userId' => $UserRec['user_pk']);
171  $vars['userDescReadOnly'] = $SysConf['SYSCONFIG']['UserDescReadOnly'];
172 
173  /* For Admins, get the list of all users
174  * For non-admins, only show themselves
175  */
176  if ($SessionIsAdmin) {
177  $stmt = __METHOD__ . '.asSessionAdmin';
178  $sql = "SELECT * FROM users ORDER BY user_name";
179  $this->dbManager->prepare($stmt, $sql);
180  $res = $this->dbManager->execute($stmt);
181  $allUsers = array();
182  while ($row = $this->dbManager->fetchArray($res)) {
183  $allUsers[$row['user_pk']] = htmlentities($row['user_name']);
184  }
185  $this->dbManager->freeResult($res);
186  $vars['allUsers'] = $allUsers;
187  }
188 
189  $vars['userName'] = $UserRec['user_name'];
190  $vars['userDescription'] = $UserRec['user_desc'];
191  $vars['userEMail'] = $UserRec["user_email"];
192  $vars['eMailNotification'] = ($UserRec['email_notify'] == 'y');
193 
194  if ($SessionIsAdmin) {
195  $vars['allAccessLevels'] = array(
196  PLUGIN_DB_NONE => _("None (very basic, no database access)"),
197  PLUGIN_DB_READ => _("Read-only (read, but no writes or downloads)"),
198  PLUGIN_DB_WRITE => _("Read-Write (read, download, or edit information)"),
199  PLUGIN_DB_CADMIN => _("Clearing Administrator (read, download, edit information and edit decisions)"),
200  PLUGIN_DB_ADMIN => _("Full Administrator (all access including adding and deleting users)")
201  );
202  $vars['accessLevel'] = $UserRec['user_perm'];
203 
204  $vars['allUserStatuses'] = array(
205  "active" => _("Active"),
206  "inactive" => _("Inactive")
207  );
208 
209  $vars['userStatus'] = $UserRec['user_status'];
210 
211  $SelectedFolderPk = $UserRec['root_folder_fk'];
212  $vars['folderListOption'] = FolderListOption($ParentFolder = -1, $Depth = 0, $IncludeTop = 1, $SelectedFolderPk);
213 
214  }
215  $SelectedDefaultFolderPk = $UserRec['default_folder_fk'];
216  $vars['folderListOption2'] = FolderListOption($ParentFolder = $UserRec['root_folder_fk'], $Depth = 0, $IncludeTop = 1, $SelectedDefaultFolderPk);
217 
218  $vars['isBlankPassword'] = ($UserRec['_blank_pass'] == 'on');
219  $vars['agentSelector'] = AgentCheckBoxMake(-1, array("agent_unpack",
220  "agent_adj2nest", "wget_agent"), $UserRec['user_name']);
221  $vars['bucketPool'] = SelectBucketPool($UserRec["default_bucketpool_fk"]);
222  $vars['defaultGroupOption'] = $this->getUserGroupSelect($UserRec);
223  $vars['uploadVisibility'] = $UserRec['upload_visibility'];
224 
225  return $vars;
226  }
227 
234  function UpdateUser($UserRec, $SessionIsAdmin)
235  {
236  global $PG_CONN;
237 
238  $Errors = "";
239 
240  /**** Validations ****/
241  /* Make sure we have a user_pk */
242  if (empty($UserRec['user_pk'])) {
243  $Errors .= "<li>" . _("Consistency error (User_pk missing). Please start over.") . "</li>";
244  }
245 
246  /* Make sure username looks valid */
247  if (empty($UserRec['user_name'])) {
248  $Errors .= "<li>" . _("Username must be specified.") . "</li>";
249  }
250 
251  /* Verify the user_name is not a duplicate */
252  $CheckUserRec = GetSingleRec("users", "WHERE user_name='$UserRec[user_name]'");
253  if ((!empty($CheckUserRec)) and ( $CheckUserRec['user_pk'] != $UserRec['user_pk'])) {
254  $Errors .= "<li>" . _("Username is not unique.") . "</li>";
255  }
256 
257  /* Make sure password matches */
258  if ($UserRec['_pass1'] != $UserRec['_pass2']) {
259  $Errors .= "<li>" . _("Passwords do not match.") . "</li>";
260  }
261 
262  $oldEmail = $this->dbManager->getSingleRow(
263  "SELECT user_email FROM users WHERE user_pk = $1;",
264  array($UserRec['user_pk']), __METHOD__."oldEmail");
265  if (strcmp($oldEmail['user_email'],$UserRec['user_email']) != 0) {
266  /* Make sure email looks valid */
267  $Check = preg_replace("/[^a-zA-Z0-9@_.+-]/", "", $UserRec['user_email']);
268  if ($Check != $UserRec['user_email']) {
269  $Errors .= "<li>" . _("Invalid email address.") . "</li>";
270  }
271 
272  /* Make sure email is unique */
273  $email_count = 0;
274  if (!empty($UserRec['user_email'])) {
275  $email_count = $this->dbManager->getSingleRow(
276  "SELECT COUNT(*) as count FROM users WHERE user_email = $1 LIMIT 1;",
277  array($UserRec['user_email']), __METHOD__."email_count")["count"];
278  }
279  if ($email_count > 0) {
280  $Errors .= "<li>" . _("Email address already exists.") . "</li>";
281  }
282  }
283 
284  /* Make sure user can't ask for blank password if policy is enabled */
285  if (passwordPolicyEnabled() && !empty($UserRec['_blank_pass'])) {
286  $Errors .= "<li>" . _("Password policy enabled, can't have a blank password.") . "</li>";
287  }
288 
289  /* Did they specify a password and also request a blank password? */
290  if (!empty($UserRec['_blank_pass']) && ( !empty($UserRec['_pass1']) || ! empty($UserRec['_pass2']))) {
291  $Errors .= "<li>" . _("You cannot specify both a password and a blank password.") . "</li>";
292  }
293 
294  /* Make sure password matches policy */
295  if (!empty($UserRec['_pass1']) && !empty($UserRec['_pass2'])) {
296  $policyRegex = generate_password_policy();
297  $result = preg_match('/^' . $policyRegex . '$/m', $UserRec['_pass1']);
298  if ($result !== 1) {
299  $Errors .= "<li>" . _("Password does not match policy.");
300  $Errors .= "<br />" . generate_password_policy_string();
301  $Errors .= "</li>";
302  }
303  }
304 
305  /* Check if the user is member of the group */
306  if (!empty($UserRec['group_fk'])) {
307  $group_map = $this->userDao->getUserGroupMap($UserRec['user_pk']);
308  if (!in_array($UserRec['group_fk'], array_keys($group_map))) {
309  $Errors .= "<li>" . _("User is not member of provided group.") .
310  "</li>";
311  }
312  }
313 
314  /* Make sure only admin can change the username */
315  if ((!Auth::isAdmin()) && ($UserRec['user_name'] != $_SESSION['User'])) {
316  $Errors .= "<li>" . _("Only admin can change the username.") . "</li>";
317  }
318 
319  /* If we have any errors, return them */
320  if (!empty($Errors)) {
321  return _("Errors") . ":<ol>$Errors </ol>";
322  }
323 
324  /**** Update the users database record ****/
325  /* First remove user_pass and user_seed if the password wasn't changed. */
326  if (!empty($UserRec['_blank_pass']) ) {
327  $UserRec['user_seed'] = '';
328  $options = array('cost' => 10);
329  $UserRec['user_pass'] = password_hash("", PASSWORD_DEFAULT, $options);
330  } else if (empty($UserRec['_pass1'])) { // password wasn't changed
331  unset( $UserRec['user_pass']);
332  unset( $UserRec['user_seed']);
333  }
334 
335  /* Build the sql update */
336  $sql = "UPDATE users SET ";
337  $first = true;
338  foreach ($UserRec as $key=>$val) {
339  if ($key[0] == '_' || $key == "user_pk") {
340  continue;
341  }
342  if (!$SessionIsAdmin && ($key == "user_perm" || $key == "root_folder_fk" || $key == "user_status")) {
343  continue;
344  }
345  if (!$first) {
346  $sql .= ",";
347  }
348  $sql .= "$key='" . pg_escape_string($val) . "'";
349  $first = false;
350  }
351  $sql .= " WHERE user_pk=$UserRec[user_pk]";
352  $result = pg_query($PG_CONN, $sql);
353  DBCheckResult($result, $sql, __FILE__, __LINE__);
354  pg_free_result($result);
355 
356  return null;
357  } // UpdateUser()
358 
366  function GetUserRec($user_pk)
367  {
368  if (empty($user_pk)) {
369  throw new Exception("Invalid access. Your session has expired.",1);
370  }
371 
372  $UserRec = GetSingleRec("users", "WHERE user_pk=$user_pk");
373  if (empty($UserRec)) {
374  throw new Exception("Invalid user. ",1);
375  }
376  return $UserRec;
377  }
378 
384  function IsSessionAdmin($UserRec)
385  {
386  return ($UserRec['user_perm'] == PLUGIN_DB_ADMIN);
387  }
388 
399  function CreateUserRec(Request $request, $user_pk="")
400  {
401  /* If a $user_pk was given, use it to read the user db record.
402  * Otherwise, use the form data.
403  */
404  if (!empty($user_pk)) {
405  $UserRec = $this->GetUserRec($user_pk);
406  $UserRec['_pass1'] = "";
407  $UserRec['_pass2'] = "";
408  $UserRec['_blank_pass'] = password_verify('', $UserRec['user_pass']) ? "on" : "";
409  } else {
410  $UserRec = array();
411  $UserRec['user_pk'] = intval($request->get('user_pk'));
412  $UserRec['user_name'] = stripslashes($request->get('user_name'));
413  $UserRec['root_folder_fk'] = intval($request->get('root_folder_fk'));
414  $UserRec['upload_visibility'] = stripslashes($request->get('public'));
415  $UserRec['default_folder_fk'] = intval($request->get('default_folder_fk'));
416  $UserRec['user_desc'] = stripslashes($request->get('user_desc'));
417  $defaultGroup = $request->get('default_group_fk', null);
418  if ($defaultGroup !== null) {
419  $UserRec['group_fk'] = intval($defaultGroup);
420  }
421 
422  $UserRec['_pass1'] = stripslashes($request->get('_pass1'));
423  $UserRec['_pass2'] = stripslashes($request->get('_pass2'));
424  if (!empty($UserRec['_pass1'])) {
425  $UserRec['user_seed'] = 'Seed';
426  $options = array('cost' => 10);
427  $UserRec['user_pass'] = password_hash($UserRec['_pass1'], PASSWORD_DEFAULT, $options);
428  $UserRec['_blank_pass'] = "";
429  } else {
430  $UserRec['user_pass'] = "";
431  $UserRec['_blank_pass'] = stripslashes($request->get("_blank_pass"));
432  if (empty($UserRec['_blank_pass'])) { // check for blank password
433  $StoredUserRec = $this->GetUserRec($UserRec['user_pk']);
434  $options = array('cost' => 10);
435  $UserRec['_blank_pass'] = password_verify($StoredUserRec['user_pass'], password_hash("", PASSWORD_DEFAULT, $options)) ? "on" : "";
436  }
437  }
438 
439  $UserRec['user_perm'] = intval($request->get('user_perm'));
440  $UserRec['user_status'] = stripslashes($request->get('user_status'));
441  $UserRec['user_email'] = stripslashes($request->get('user_email'));
442  $UserRec['email_notify'] = stripslashes($request->get('email_notify'));
443  if (!empty($UserRec['email_notify'])) {
444  $UserRec['email_notify'] = 'y';
445  }
446  $UserRec['user_agent_list'] = is_null($request->get('user_agent_list')) ? userAgents() : $request->get('user_agent_list');
447  $UserRec['default_bucketpool_fk'] = intval($request->get("default_bucketpool_fk"));
448  }
449  return $UserRec;
450  }
451 
463  function generateNewToken(Request $request)
464  {
465  global $container;
466 
467  $user_pk = Auth::getUserId();
468  $tokenName = $request->get('pat_name');
469  $tokenExpiry = $request->get('pat_expiry');
470  if ($_SESSION[Auth::USER_LEVEL] < 3) {
471  $tokenScope = 'r';
472  } else {
473  $tokenScope = $request->get('pat_scope');
474  }
475  $tokenScope = array_search($tokenScope, RestHelper::SCOPE_DB_MAP);
476  if ($tokenScope === false) {
477  throw new \UnexpectedValueException("Invalid token scope " .
478  $request->get('pat_scope') . ".");
479  }
480  $tokenScope = RestHelper::SCOPE_DB_MAP[$tokenScope];
482  $restHelper = $container->get('helper.restHelper');
483  try {
484  $restHelper->validateTokenRequest($tokenExpiry, $tokenName, $tokenScope);
485  } catch (HttpBadRequestException $e) {
486  throw new \UnexpectedValueException($e->getMessage());
487  }
488 
490  $restDbHelper = $container->get('helper.dbHelper');
491  $key = bin2hex(
492  openssl_random_pseudo_bytes(RestHelper::TOKEN_KEY_LENGTH / 2));
493  try {
494  $jti = $restDbHelper->insertNewTokenKey($user_pk, $tokenExpiry,
495  $tokenScope, $tokenName, $key);
496  } catch (DuplicateTokenKeyException $e) {
497  // Key already exists, try again.
498  $key = bin2hex(
499  openssl_random_pseudo_bytes(RestHelper::TOKEN_KEY_LENGTH / 2));
500  try {
501  $jti = $restDbHelper->insertNewTokenKey($user_pk, $tokenExpiry,
502  $tokenScope, $tokenName, $key);
503  } catch (DuplicateTokenKeyException $e) {
504  // New key also failed, give up!
505  throw new DuplicateTokenKeyException("Please try again later.");
506  } catch (DuplicateTokenNameException $e) {
507  throw $e;
508  }
509  } catch (DuplicateTokenNameException $e) {
510  throw new \UnexpectedValueException($e->getMessage());
511  }
512  return $this->authHelper->generateJwtToken($tokenExpiry,
513  $jti['created_on'], $jti['jti'], $tokenScope, $key);
514  }
515 
524  {
525  $user_pk = Auth::getUserId();
526  $sql = "SELECT pat_pk, user_fk, expire_on, token_scope, token_name, created_on, active " .
527  "FROM personal_access_tokens " .
528  "WHERE user_fk = $1 AND active = true AND client_id IS NULL;";
529  $rows = $this->dbManager->getRows($sql, [$user_pk],
530  __METHOD__ . ".getActiveTokens");
531  $response = [];
532  foreach ($rows as $row) {
533  try {
534  $this->authHelper->isTokenActive($row, $row["pat_pk"]);
535  } catch (HttpForbiddenException $_) {
536  continue;
537  }
538  $entry = [
539  "id" => $row["pat_pk"] . "." . $user_pk,
540  "name" => $row["token_name"],
541  "created" => $row["created_on"],
542  "expire" => $row["expire_on"],
543  "scope" => $row["token_scope"]
544  ];
545  $response[] = $entry;
546  }
547  array_multisort(array_column($response, "created"), SORT_ASC, $response);
548  return $response;
549  }
550 
556  {
557  $user_pk = Auth::getUserId();
558  $retentionPeriod = $this->getMaxExpiredTokenRetentionPeriod();
559  $sql = "SELECT pat_pk, user_fk, expire_on, token_scope, token_name, created_on " .
560  "FROM personal_access_tokens " .
561  "WHERE user_fk = $1 AND active = false " .
562  "AND expire_on >= (SELECT CURRENT_DATE - ($2)::integer) " .
563  "AND client_id IS NULL;";
564  $rows = $this->dbManager->getRows($sql, [$user_pk, $retentionPeriod],
565  __METHOD__ . ".getExpiredTokens");
566  $response = [];
567  foreach ($rows as $row) {
568  $entry = [
569  "id" => $row["pat_pk"] . "." . $user_pk,
570  "name" => $row["token_name"],
571  "created" => $row["created_on"],
572  "expire" => $row["expire_on"],
573  "scope" => $row["token_scope"]
574  ];
575  $response[] = $entry;
576  }
577  array_multisort(array_column($response, "created"), SORT_ASC, $response);
578  return $response;
579  }
580 
586  private function getUserGroupSelect($userRec)
587  {
588  $groups = $this->userDao->getUserGroupMap($userRec['user_pk']);
589  $userDefaults = $this->userDao->getUserAndDefaultGroupByUserName($userRec['user_name']);
590  $options = "";
591  foreach ($groups as $groupId => $groupName) {
592  $options .= "<option value='$groupId' ";
593  if ($groupId == $userDefaults['group_fk']) {
594  $options .= "selected='selected'";
595  }
596  $options .= ">$groupName</option>";
597  }
598  return $options;
599  }
600 
611  private function addNewClient(Request $request)
612  {
613  global $container;
614 
615  $user_pk = Auth::getUserId();
616  $clientName = GetParm('client_name', PARM_STRING);
617  $clientId = GetParm('client_id', PARM_STRING);
618  if ($_SESSION[Auth::USER_LEVEL] < 3) {
619  $clientScope = 'r';
620  } else {
621  $clientScope = GetParm('client_scope', PARM_STRING);
622  }
624  $restHelper = $container->get('helper.restHelper');
625  try {
626  $restHelper->validateNewOauthClient($user_pk, $clientName, $clientScope,
627  $clientId);
628  } catch (HttpBadRequestException $e) {
629  throw new \UnexpectedValueException($e->getMessage());
630  }
631 
632  $restHelper->getDbHelper()->addNewClient($clientName, $user_pk,
633  $clientId, $clientScope);
634  return "Client \"$clientName\" added with ID \"$clientId\"";
635  }
636 
644  private function getListOfActiveClients()
645  {
646  $user_pk = Auth::getUserId();
647  $sql = "SELECT pat_pk, user_fk, token_scope, token_name, " .
648  "created_on, active, client_id " .
649  "FROM personal_access_tokens " .
650  "WHERE user_fk = $1 AND active = true AND token_key IS NULL;";
651  $rows = $this->dbManager->getRows($sql, [$user_pk],
652  __METHOD__ . ".getActiveClients");
653  $response = [];
654  foreach ($rows as $row) {
655  $entry = [
656  "id" => $row["pat_pk"] . "." . $user_pk,
657  "name" => $row["token_name"],
658  "created" => $row["created_on"],
659  "clientid" => $row["client_id"],
660  "scope" => $row["token_scope"]
661  ];
662  $response[] = $entry;
663  }
664  array_multisort(array_column($response, "created"), SORT_ASC, $response);
665  return $response;
666  }
667 
672  private function getListOfExpiredClients()
673  {
674  $user_pk = Auth::getUserId();
675  $sql = "SELECT pat_pk, user_fk, token_scope, token_name, " .
676  "created_on, active, client_id " .
677  "FROM personal_access_tokens " .
678  "WHERE user_fk = $1 AND active = false AND token_key IS NULL;";
679  $rows = $this->dbManager->getRows($sql, [$user_pk],
680  __METHOD__ . ".getRevokedClients");
681  $response = [];
682  foreach ($rows as $row) {
683  $entry = [
684  "id" => $row["pat_pk"] . "." . $user_pk,
685  "name" => $row["token_name"],
686  "created" => $row["created_on"],
687  "clientid" => $row["client_id"],
688  "scope" => $row["token_scope"]
689  ];
690  $response[] = $entry;
691  }
692  array_multisort(array_column($response, "created"), SORT_ASC, $response);
693  return $response;
694  }
695 
701  {
702  global $SysConf;
703  return $SysConf['SYSCONFIG']['PATMaxPostExpiryRetention'];
704  } /* getMaxExpiredTokenRetentionPeriod() */
705 }
706 register_plugin(new UserEditPage());
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Exception when a token has duplicate key for same user.
Exception when a token has duplicate name for same user.
render($templateName, $vars=null, $headers=null)
Provides helper methods for REST api.
Definition: AuthHelper.php:38
Provides helper methods to access database for REST api.
Definition: DbHelper.php:38
Provides various DAO helper functions for REST api.
Definition: RestHelper.php:32
CreateUserRec(Request $request, $user_pk="")
Create a user record.
Definition: user-edit.php:399
GetUserRec($user_pk)
Get a user record.
Definition: user-edit.php:366
getListOfExpiredClients()
Definition: user-edit.php:672
getListOfActiveClients()
Get a list of active clients for current user.
Definition: user-edit.php:644
IsSessionAdmin($UserRec)
Determine if the session user is an admin.
Definition: user-edit.php:384
UpdateUser($UserRec, $SessionIsAdmin)
Validate and update the user data.
Definition: user-edit.php:234
getListOfActiveTokens()
Get a list of active tokens for current user.
Definition: user-edit.php:523
handle(Request $request)
Allow user to change their account settings (users db table).
Definition: user-edit.php:63
DisplayForm($UserRec, $SessionIsAdmin)
Display the user record edit form.
Definition: user-edit.php:165
getListOfExpiredTokens()
Definition: user-edit.php:555
getUserGroupSelect($userRec)
Definition: user-edit.php:586
getMaxExpiredTokenRetentionPeriod()
getMaxExpiredTokenRetentionPeriod() get the refresh time from DB. @Returns number of days to retain e...
Definition: user-edit.php:700
userAgents($agents=null)
Read the UI form and format the user selected agents into a comma separated list.
AgentCheckBoxMake($upload_pk, $SkipAgents=array(), $specified_username="")
Generate a checkbox list of available agents.
generate_password_policy_string()
passwordPolicyEnabled()
generate_password_policy()
SelectBucketPool($selected, $active='Y')
Return a select list containing all the active bucketpool's.
DBCheckResult($result, $sql, $filenm, $lineno)
Check the postgres result for unexpected errors. If found, treat them as fatal.
Definition: common-db.php:187
GetSingleRec($Table, $Where="")
Retrieve a single database record.
Definition: common-db.php:91
FolderListOption($ParentFolder, $Depth, $IncludeTop=1, $SelectId=-1, $linkParent=false, $OldParent=0)
Create the folder tree, using OPTION tags.
Traceback_uri()
Get the URI without query to this location.
Definition: common-parm.php:97
const PARM_STRING
Definition: common-parm.php:18
GetParm($parameterName, $parameterType)
This function will retrieve the variables and check data types.
Definition: common-parm.php:46
#define PLUGIN_DB_WRITE
Plugin requires write permission on DB.
Definition: libfossology.h:38
#define PERM_READ
Read-only permission.
Definition: libfossology.h:32
#define PLUGIN_DB_NONE
Plugin requires no DB permission.
Definition: libfossology.h:36
#define PLUGIN_DB_READ
Plugin requires read permission on DB.
Definition: libfossology.h:37
#define PLUGIN_DB_ADMIN
Plugin requires admin level permission on DB.
Definition: libfossology.h:39
foreach($Options as $Option=> $OptVal) if(0==$reference_flag &&0==$nomos_flag) $PG_CONN
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16