11 namespace Fossology\Lib\Dao;
16 use Symfony\Component\HttpFoundation\Session\Session;
24 const USER_ACTIVE_STATUS =
'active';
26 const SUPER_USER =
'fossy';
35 function __construct(
DbManager $dbManager, Logger $logger)
38 $this->logger = $logger;
41 $this->session = $container->get(
'session');
49 if (empty($groupId)) {
52 $userChoices = array();
53 $statementN = __METHOD__;
54 $sql =
"SELECT user_pk, user_name, user_desc FROM users LEFT JOIN group_user_member AS gum ON users.user_pk = gum.user_fk"
55 .
" WHERE gum.group_fk = $1 AND users.user_status='active'";
56 $this->
dbManager->prepare($statementN, $sql);
57 $res = $this->
dbManager->execute($statementN, array($groupId));
58 while ($rw = $this->
dbManager->fetchArray($res)) {
59 $userChoices[$rw[
'user_pk']] = $rw[
'user_desc'] .
' (' . $rw[
'user_name'] .
')';
73 if (empty($groupId)) {
76 $userChoices = array();
77 $statementN = __METHOD__;
78 $sql =
"SELECT user_pk, user_name FROM users LEFT JOIN group_user_member AS gum ON users.user_pk = gum.user_fk"
79 .
" WHERE gum.group_fk = $1 AND users.user_status='active'";
80 $this->
dbManager->prepare($statementN, $sql);
81 $res = $this->
dbManager->execute($statementN, array($groupId));
82 while ($rw = $this->
dbManager->fetchArray($res)) {
83 $userChoices[$rw[
'user_pk']] = $rw[
'user_name'];
97 return $this->
dbManager->createMap(
'groups',
'group_pk',
'group_name');
99 $sql =
"SELECT group_pk, group_name FROM groups, group_user_member"
100 .
" WHERE group_pk=group_fk AND user_fk=$1 AND group_perm=$2";
101 $param = array($userId,self::ADMIN);
102 $this->
dbManager->prepare($stmt=__METHOD__, $sql);
103 $res = $this->
dbManager->execute($stmt,$param);
105 while ($row = $this->
dbManager->fetchArray($res)) {
106 $groupMap[$row[
'group_pk']] = $row[
'group_name'];
119 $sql =
"SELECT group_pk, group_name FROM groups, group_user_member WHERE group_pk=group_fk AND user_fk=$1";
120 $this->
dbManager->prepare($stmt=__METHOD__, $sql);
121 $res = $this->
dbManager->execute($stmt,array($userId));
123 while ($row = $this->
dbManager->fetchArray($res)) {
124 $groupMap[$row[
'group_pk']] = $row[
'group_name'];
138 $sql =
"SELECT group_pk, group_name FROM groups LEFT JOIN users ON group_name=user_name "
139 .
"WHERE user_name IS NULL";
142 $sql =
"SELECT group_pk, group_name FROM groups LEFT JOIN users ON group_name=user_name "
143 .
" INNER JOIN group_user_member ON group_pk=group_user_member.group_fk AND user_fk=$1 AND group_perm=$2 "
144 .
"WHERE user_name IS NULL";
145 $param = array($userId,1);
147 $this->
dbManager->prepare($stmt=__METHOD__.
".$userLevel", $sql);
148 $res = $this->
dbManager->execute($stmt,$param);
150 while ($row = $this->
dbManager->fetchArray($res)) {
151 $groupMap[$row[
'group_pk']] = $row[
'group_name'];
166 if (!$this->session->isStarted()) {
167 $this->session->setName(
'Login');
168 $this->session->start();
170 $groupArray = $this->
dbManager->getSingleRow(
'SELECT group_pk, group_name FROM groups WHERE group_pk=$1',
171 array($groupId),__METHOD__.
'.exists');
172 if ($groupArray===
false) {
173 throw new \Exception( _(
"Group does not exist. Not deleted.") );
175 $groupConstraint = $this->
dbManager->getSingleRow(
'SELECT count(*) cnt FROM users WHERE user_name=$1',
176 array($groupArray[
'group_name']),__METHOD__.
'.contraint');
177 if ($groupConstraint[
'cnt']) {
178 throw new \Exception( _(
"Group must not be deleted due to name constraint.") );
182 $adminLevel = $this->
dbManager->getSingleRow(
"SELECT count(*) cnt FROM group_user_member WHERE group_fk=$1 and user_fk=$2 and group_perm=1",
183 array($groupId,$userId),__METHOD__.
'.admin_lvl');
184 if ($adminLevel[
'cnt']< 1) {
185 $text = _(
"Permission Denied.");
186 throw new \Exception($text);
191 $this->
dbManager->getSingleRow(
"DELETE FROM perm_upload WHERE group_fk=$1",array($groupId),__METHOD__.
'.perm_upload');
192 $this->
dbManager->getSingleRow(
"DELETE FROM group_user_member WHERE group_fk=$1",array($groupId),__METHOD__.
'.gum');
193 $this->
dbManager->getSingleRow(
"UPDATE users SET new_upload_group_fk=NULL, new_upload_perm=NULL WHERE new_upload_group_fk=$1",
194 array($groupId),__METHOD__.
'.upload_group');
195 $newGroupIdStmt =
'(SELECT group_fk FROM group_user_member WHERE user_fk=user_pk LIMIT 1)';
196 $this->
dbManager->getSingleRow(
"UPDATE users SET group_fk=$newGroupIdStmt WHERE group_fk=$1",
197 array($groupId),__METHOD__.
'.active_group');
198 $this->
dbManager->getSingleRow(
"DELETE FROM groups WHERE group_pk=$1",array($groupId),__METHOD__.
'.delete');
201 $newGroupId= $this->
dbManager->getSingleRow(
"SELECT group_fk FROM users WHERE user_pk=$1",
202 array($this->session->get(AUTH::USER_ID)), __METHOD__.
'.group_after_update');
209 function updateUserTable()
211 $statementBasename = __FUNCTION__;
214 $this->
dbManager->getSingleRow(
"UPDATE users SET user_perm = $1 WHERE user_perm IS NULL;",
216 $statementBasename .
'.setDefaultPermission');
220 if (empty($defaultUser[
'user_name'])) {
223 INSERT INTO users (user_name,user_desc,user_seed,user_pass,user_perm,user_email,root_folder_fk)
224 VALUES ('Default User','Default User when nobody is logged in','Seed','Pass', $1,NULL,1);",
225 array($level), $statementBasename .
'.createDefaultUser');
231 if (empty($row[
'user_name'])) {
233 $options = array(
'cost' => 10);
234 $hash = password_hash(self::SUPER_USER, PASSWORD_DEFAULT, $options);
237 if (empty($row0[
'user_name'])) {
239 INSERT INTO users (user_name, user_desc, user_seed, user_pass, user_perm, user_email, email_notify, root_folder_fk)
240 VALUES ($1,'Default Administrator',$2, $3, $4, $1,'y',1)",
241 array(self::SUPER_USER,
'Seed', $hash, $perm), $statementBasename .
'.createDefaultAdmin');
243 $this->
dbManager->getSingleRow(
"UPDATE users SET user_perm = $1, email_notify = 'y'," .
244 " user_email=$2 WHERE user_name =$2",
245 array($perm, self::SUPER_USER), $statementBasename .
'.updateDefaultUserToDefaultAdmin');
250 return empty($row[
'user_name']) ? 1 : 0;
259 return $this->
dbManager->getSingleRow(
"SELECT * FROM users WHERE user_name = $1", array($userName), __FUNCTION__);
268 return $this->
dbManager->getSingleRow(
"SELECT * FROM users WHERE user_pk = $1", array($userPk), __FUNCTION__);
277 $row = $this->
dbManager->getSingleRow(
"SELECT * FROM groups WHERE group_name = $1", array($groupName), __FUNCTION__);
278 return $row[
'group_pk'];
287 return $this->
dbManager->getSingleRow(
"SELECT * FROM users WHERE user_perm = $1", array($permission), __FUNCTION__);
296 $this->
dbManager->getSingleRow(
"UPDATE users SET group_fk=$2 WHERE user_pk=$1",
297 array($userId, $groupId), __FUNCTION__);
300 public function getUserAndDefaultGroupByUserName(&$userName, $oauth=
false)
303 $statement = __METHOD__;
305 $searchEmail =
" OR user_email=$1";
306 $statement .=
"oauth";
308 $userRow = $this->
dbManager->getSingleRow(
309 "SELECT users.*,group_name FROM users LEFT JOIN groups ON group_fk=group_pk WHERE user_name=$1$searchEmail",
310 array($userName), $statement);
311 if (empty($userRow)) {
312 throw new \Exception(
'invalid user name');
315 $userName = $userRow[
'user_name'];
317 $userRow[
'oauth'] = $oauth;
318 if ($userRow[
'group_fk']) {
323 $userRow[
'group_fk'] = $groupRow[
'group_fk'];
324 $userRow[
'group_name'] = $groupRow[
'group_name'];
334 $row = $this->
dbManager->getSingleRow(
"SELECT user_status FROM users WHERE user_name=$1",
335 array($userName), __METHOD__);
336 return $row!==
false && ($row[
'user_status']==self::USER_ACTIVE_STATUS);
345 $row = $this->
dbManager->getSingleRow(
"SELECT user_status FROM users WHERE user_pk=$1",
346 array($userId), __METHOD__);
347 return $row!==
false && ($row[
'user_status']==self::USER_ACTIVE_STATUS);
355 $this->
dbManager->getSingleRow(
"UPDATE users SET last_connection=now() WHERE user_pk=$1",
356 array($userId), __FUNCTION__);
366 $groupRow = $this->
dbManager->getSingleRow(
367 "SELECT group_fk,group_name FROM group_user_member LEFT JOIN groups ON group_fk=group_pk WHERE user_fk=$1",
368 array($userId), __FUNCTION__.
".getGroup");
374 if (empty($groupId)) {
375 $groupId = $this->
addGroup($groupName);
376 $this->addGroupMembership($groupId, $userId);
379 return array(
'group_fk'=>$groupId,
'group_name'=>$groupName);
382 public function isAdvisorOrAdmin($userId, $groupId)
384 $row = $this->
dbManager->getSingleRow(
"SELECT group_perm FROM group_user_member WHERE user_fk=$1 AND group_fk=$2",
385 array($userId, $groupId), __METHOD__);
386 return $row!==
false && ($row[
'group_perm']==self::ADVISOR || $row[
'group_perm']==self::ADMIN);
396 if (empty($groupName)) {
397 throw new \Exception(_(
"Error: Group name must be specified."));
400 $groupAlreadyExists = $this->
dbManager->getSingleRow(
"SELECT group_pk, group_name FROM groups WHERE LOWER(group_name)=LOWER($1)",
402 __METHOD__.
'.gExists');
403 if ($groupAlreadyExists) {
404 throw new \Exception(_(
"Group exists. Try different Name, Group-Name checking is case-insensitive and Duplicate not allowed"));
407 $this->
dbManager->insertTableRow(
'groups', array(
'group_name'=>$groupName));
408 $groupNowExists = $this->
dbManager->getSingleRow(
"SELECT * FROM groups WHERE group_name=$1",
410 __METHOD__.
'.gNowExists');
411 if (!$groupNowExists) {
412 throw new \Exception(_(
"Failed to create group"));
414 return $groupNowExists[
'group_pk'];
417 public function addGroupMembership($groupId, $userId, $groupPerm=1)
419 $this->
dbManager->insertTableRow(
'group_user_member',
420 array(
'group_fk'=>$groupId,
'user_fk'=>$userId,
'group_perm'=>$groupPerm));
429 $userRow = $this->
dbManager->getSingleRow(
"SELECT user_name FROM users WHERE user_pk=$1",array($userId),__METHOD__);
431 throw new \Exception(
'unknown user with id='.$userId);
433 return $userRow[
'user_name'];
442 $groupRow = $this->
dbManager->getSingleRow(
"SELECT group_name FROM groups WHERE group_pk = $1",array($groupId),__METHOD__);
443 if (empty($groupRow)) {
444 throw new \Exception(
'Error: GroupId ='. $groupId .
' not a member of a valid group.');
446 return $groupRow[
'group_name'];
455 $userRow = $this->
dbManager->getSingleRow(
"SELECT user_email FROM users WHERE user_pk=$1",array($userId),__METHOD__);
457 throw new \Exception(
'unknown user with id='.$userId);
459 return $userRow[
'user_email'];
468 return $this->
dbManager->getRows(
"SELECT * FROM users ORDER BY user_name;");
477 $this->
dbManager->getSingleRow(
'UPDATE groups SET group_name=$2 WHERE group_pk=$1;',
478 array($groupId, $newGroupName),__METHOD__.
'.UpdateEditGroup');
Contains the constants and helpers for authentication of user.
static getUserId()
Get the current user's id.
static getGroupId()
Get the current user's group id.
getGroupIdByName($groupName)
setDefaultGroupMembership($userId, $groupId)
fixDefaultGroup($userId, $groupName)
editGroup($groupId, $newGroupName)
getUserChoices($groupId=null)
getUsersByGroup($groupId=null)
getDeletableAdminGroupMap($userId, $userLevel=0)
get array of groups that this user has admin access to
getUserGroupMap($userId)
get array of groups that this user has admin access to
deleteGroup($groupId)
Delete a group (for constraint, see http://www.fossology.org/projects/fossology/wiki/GroupsPerms )
updateUserLastConnection($userId)
getAdminGroupMap($userId, $userLevel=0)
get array of groups that this user has admin access to
getUserByPermission($permission)
getGroupNameById($groupId)
#define PLUGIN_DB_NONE
Plugin requires no DB permission.
#define PLUGIN_DB_READ
Plugin requires read permission on DB.
#define PLUGIN_DB_ADMIN
Plugin requires admin level permission on DB.
fo_dbManager * dbManager
fo_dbManager object