FOSSology  4.6.0
Open Source License Compliance by Open Source Software
UserHelper.php
1 <?php
2 
14 namespace Fossology\UI\Api\Helper;
15 
21 use Symfony\Component\HttpFoundation\Request;
22 
28 {
32  private $user_pk;
33 
39  public function __construct($user_pk=null)
40  {
41  $this->user_pk = $user_pk;
42  }
43 
44  public function modifyUserDetails($reqBody, $version = ApiVersion::V1)
45  {
46  global $container;
47  $restHelper = $container->get('helper.restHelper');
48  $userEditObj = $restHelper->getPlugin('user_edit');
49  /* Is the session owner an admin? */
50  $sessionOwnerUser_pk = $restHelper->getUserId();
51  $SessionUserRec = $userEditObj->GetUserRec($sessionOwnerUser_pk);
52  $SessionIsAdmin = $userEditObj->IsSessionAdmin($SessionUserRec);
53 
54  $symReq = $this->createSymRequest($reqBody, $version);
55  $isSelfEdit = intval($sessionOwnerUser_pk) === intval($this->user_pk);
56  if (!$SessionIsAdmin && !$isSelfEdit) {
57  $returnVal = new Info(403, "The session owner is not an admin!", InfoType::INFO);
58  } else {
59  $userRec = $userEditObj->CreateUserRec($symReq);
60  $ErrMsgs = $userEditObj->UpdateUser($userRec, $SessionIsAdmin);
61 
62  if ($ErrMsgs == null) {
63  $returnVal = new Info(200, "User updated succesfully!", InfoType::INFO);
64  } else {
65  $returnVal = new Info(400, $ErrMsgs, InfoType::INFO);
66  }
67  }
68  return $returnVal;
69  }
70 
75  public function createSymRequest($userDetails, $version = ApiVersion::V1)
76  {
77  global $container;
78  $restHelper = $container->get('helper.restHelper');
79 
84  $userDao = $restHelper->getUserDao();
85  $user = $userDao->getUserByPk($this->user_pk);
86 
87  $symfonyRequest = new Request();
88  $symfonyRequest->request->set('user_pk', $userDetails['id'] ?? $this->user_pk);
89  $symfonyRequest->request->set('user_name', $userDetails['name'] ?? $user['user_name']);
90  $symfonyRequest->request->set('root_folder_fk', $userDetails['rootFolderId'] ?? $user['root_folder_fk']);
91  $symfonyRequest->request->set('default_group_fk', $userDetails['defaultGroup'] ?? $user['group_fk']);
92  $symfonyRequest->request->set('public', $userDetails['defaultVisibility'] ?? $user['upload_visibility']);
93  $symfonyRequest->request->set('default_folder_fk', $userDetails['defaultFolderId'] ?? $user['default_folder_fk']);
94  $symfonyRequest->request->set('user_desc', $userDetails['description'] ?? $user['user_desc']);
95  $symfonyRequest->request->set('_pass1', $userDetails[$version == ApiVersion::V2 ? 'userPass' : 'user_pass'] ?? null);
96  $symfonyRequest->request->set('_pass2', $userDetails[$version == ApiVersion::V2 ? 'userPass' : 'user_pass'] ?? null);
97  $symfonyRequest->request->set('_blank_pass', $userDetails['_blank_pass'] ?? "");
98  $symfonyRequest->request->set('user_status', $userDetails['user_status'] ?? $user['user_status']);
99  $symfonyRequest->request->set('user_email', $userDetails['email'] ?? $user['user_email']);
100  $symfonyRequest->request->set('email_notify', isset($userDetails['emailNotification']) && $userDetails['emailNotification'] ? "y" : $user['email_notify']);
101  $symfonyRequest->request->set('default_bucketpool_fk', $userDetails['defaultBucketpool'] ?? $user['default_bucketpool_fk']);
102 
103  if (isset($userDetails['accessLevel'])) {
104  $user_perm = $this->getEquivalentValueForPermission($userDetails['accessLevel']);
105  $symfonyRequest->request->set('user_perm', $user_perm);
106  } else {
107  $symfonyRequest->request->set('user_perm', $user['user_perm']);
108  }
109 
110  $agentsExists = array();
111  // setting previous values from db
112  $agentsTempVal = explode(',', $user['user_agent_list']);
113  foreach ($agentsTempVal as $agent) {
114  $agentsExists['Check_' . $agent] = 1;
115  }
116  $newAgents = array();
117  if (isset($userDetails['agents'])) {
118  if (is_string($userDetails['agents'])) {
119  $userDetails['agents'] = json_decode($userDetails['agents'], true);
120  }
121  if (isset($userDetails['agents']['mime'])) {
122  $newAgents['Check_agent_mimetype'] = $userDetails['agents']['mime'] ? 1 : 0;
123  }
124  if (isset($userDetails['agents']['monk'])) {
125  $newAgents['Check_agent_monk'] = $userDetails['agents']['monk'] ? 1 : 0;
126  }
127  if (isset($userDetails['agents']['ojo'])) {
128  $newAgents['Check_agent_ojo'] = $userDetails['agents']['ojo'] ? 1 : 0;
129  }
130  if (isset($userDetails['agents'][$version == ApiVersion::V2 ? 'copyrightEmailAuthor' : 'copyright_email_author'])) {
131  $newAgents['Check_agent_copyright'] = $userDetails['agents'][$version == ApiVersion::V2 ? 'copyrightEmailAuthor' : 'copyright_email_author'] ? 1 : 0;
132  }
133  if (isset($userDetails['agents']['ecc'])) {
134  $newAgents['Check_agent_ecc'] = $userDetails['agents']['ecc'] ? 1 : 0;
135  }
136  if (isset($userDetails['agents']['keyword'])) {
137  $newAgents['Check_agent_keyword'] = $userDetails['agents']['keyword'] ? 1 : 0;
138  }
139  if (isset($userDetails['agents']['nomos'])) {
140  $newAgents['Check_agent_nomos'] = $userDetails['agents']['nomos'] ? 1 : 0;
141  }
142  if (isset($userDetails['agents']['package'])) {
143  $newAgents['Check_agent_pkgagent'] = $userDetails['agents']['package'] ? 1 : 0;
144  }
145  if (isset($userDetails['agents']['reso'])) {
146  $newAgents['Check_agent_reso'] = $userDetails['agents']['reso'] ? 1 : 0;
147  }
148  if (isset($userDetails['agents']['heritage'])) {
149  $newAgents['Check_agent_shagent'] = $userDetails['agents']['heritage'] ? 1 : 0;
150  }
151  // Make sure all agents are in the list
152  $agentList = listAgents();
153  foreach (array_keys($agentList) as $agentName) {
154  if (!array_key_exists("Check_$agentName", $newAgents)) {
155  $newAgents["Check_$agentName"] = 0;
156  }
157  }
158  }
159  $agents = array_replace($agentsExists, $newAgents);
160 
161  $symfonyRequest->request->set('user_agent_list', userAgents($agents));
162 
163  return $symfonyRequest;
164  }
165 
170  public function getEquivalentValueForPermission($perm)
171  {
172  switch ($perm) {
173  case 'read_only':
174  return Auth::PERM_READ;
175  case 'read_write':
176  return Auth::PERM_WRITE;
177  case 'clearing_admin':
178  return Auth::PERM_CADMIN;
179  case 'admin':
180  return Auth::PERM_ADMIN;
181  default:
182  return Auth::PERM_NONE;
183  }
184  }
185 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Handle user related queries.
Definition: UserHelper.php:28
Different type of infos provided by REST.
Definition: InfoType.php:16
Info model to contain general error and return values.
Definition: Info.php:19
userAgents($agents=null)
Read the UI form and format the user selected agents into a comma separated list.
listAgents()
Search in available plugins and return all agents.
REST api helper classes.