FOSSology  4.4.0
Open Source License Compliance by Open Source Software
fo_usergroup.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2015 Siemens AG
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
8 
12 
13 require_once("$MODDIR/lib/php/common-cli.php");
14 cli_Init();
15 require_once("$MODDIR/lib/php/common-users.php");
16 
17 error_reporting(E_ALL);
18 
19 $usage = "Usage: " . basename($argv[0]) . " [options]
20  --username = admin/user with user-creation permissions
21  --password = admin/user password
22  --uname = username to create if not exists
23  --gname = groupname to create if not exists
24  --upasswd = password of created user
25  --permlvl = group permission level (-1: None, ".UserDao::USER.": User, ".UserDao::ADMIN.": Admin, ".UserDao::ADVISOR.": Advisor)
26  --accesslvl = user database permission level (".Auth::PERM_NONE.": None, ".Auth::PERM_READ.": Read, ".Auth::PERM_WRITE.": Write, ".Auth::PERM_ADMIN.": Admin)
27  --folder = root folder
28 ";
29 $opts = getopt("h", array('username:', 'password:', 'uname:', 'gname:', 'upasswd:', 'permlvl:', 'accesslvl:', 'folder:'));
30 
31 if (array_key_exists('h',$opts)) {
32  print "$usage\n";
33  return 0;
34 }
35 
36 $adminName = array_key_exists("username", $opts) ? $opts["username"] : null;
37 $passwd = array_key_exists("password", $opts) ? $opts["password"] : null;
38 if (!account_check($adminName, $passwd, $group)) {
39  print "Fossology login failure\n";
40  return 2;
41 } else {
42  print "Logged in as user $adminName\n";
43 }
44 
46 $userDao = $GLOBALS['container']->get("dao.user");
48 $folderDao = $GLOBALS['container']->get("dao.folder");
49 
50 $adminRow = $userDao->getUserByName($adminName);
51 if ($adminRow["user_perm"] < PLUGIN_DB_ADMIN) {
52  print "You have no permission to admin the user group thingy\n";
53  return 1;
54 }
55 
56 $uName = array_key_exists("uname", $opts) ? $opts["uname"] : '';
57 $user = $uName ? $userDao->getUserByName($uName) : false;
58 if ($user !== false) {
59  print "The user already exists, and updates in permissions not done from the commandline, we will only add group rights\n";
60 }
61 
62 if ($uName && !$user) {
63  $pass = array_key_exists('upasswd', $opts) ? $opts['upasswd'] : '';
64  $options = array('cost' => 10);
65  $hash = password_hash($pass, PASSWORD_DEFAULT, $options);
66  $desc = 'created via cli';
67  $perm = array_key_exists('accesslvl', $opts) ? intval($opts['accesslvl']) : 0;
68  if (array_key_exists('folder', $opts)) {
69  $folder = $opts['folder'];
70  $folderid = $folderDao->getFolderId($folder);
71 
72  if ($folderid == null) {
73  $folderid = $folderDao->insertFolder($folder, 'Cli generated folder');
74  }
75 
76  } else {
77  $folderid=1;
78  }
79  $agentList = userAgents();
80  $email = $emailNotify = '';
81  add_user($uName, $desc, $hash, $perm, $email, $emailNotify, $agentList, $folderid);
82  $user = $userDao->getUserByName($uName);
83  print "added user $uName\n";
84 }
85 
86 $gName = array_key_exists("gname", $opts) ? $opts["gname"] : '';
87 if ($gName) {
88  $sql = "SELECT group_pk FROM groups WHERE group_name=$1";
89  $groupRow = $dbManager->getSingleRow($sql, array($gName), __FILE__ . __LINE__);
90  $groupId = $groupRow ? $groupRow['group_pk'] : $userDao->addGroup($gName);
91 } else {
92  $groupId = false;
93 }
94 
95 $permLvl = array_key_exists("permlvl", $opts) ? intval($opts["permlvl"]) : 0;
96 if ($user && $groupId) {
97  $sql = "SELECT group_user_member_pk id FROM group_user_member WHERE user_fk=$1 AND group_fk=$2";
98  $gumRow = $dbManager->getSingleRow($sql,array($user['user_pk'],$groupId),__FILE__.__LINE__);
99 }
100 
101 if ($user && $groupId && $permLvl<0 && $gumRow) {
102  $dbManager->prepare($stmt = __FILE__.__LINE__,
103  "delete from group_user_member where group_user_member_pk=$1");
104  $dbManager->freeResult($dbManager->execute($stmt, array($gumRow['id'])));
105  print "deleted membership of $uName in $gName\n";
106 } else if ($user && $groupId && $permLvl>=0 && $gumRow) {
107  $dbManager->getSingleRow("update group_user_member set group_perm=$1 where group_user_member_pk=$2",
108  array($permLvl, $gumRow['id']), __FILE__.__LINE__);
109  print "update membership of $uName in $gName\n";
110 } else if ($user && $groupId && $permLvl>=0) {
111  $dbManager->insertTableRow('group_user_member',
112  array('group_perm'=>$permLvl,'user_fk'=>$user['user_pk'],'group_fk'=>$groupId));
113  print "inserted membership of $uName in $gName\n";
114 } else {
115  print ".\n";
116 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
userAgents($agents=null)
Read the UI form and format the user selected agents into a comma separated list.
account_check(&$user, &$passwd, &$group="")
check if this account is correct
Definition: common-auth.php:75
cli_Init()
Initialize the fossology environment for CLI use. This routine loads the plugins so they can be use b...
Definition: common-cli.php:25
add_user($User, $Desc, $Hash, $Perm, $Email, $Email_notify, $Upload_visibility, $agentList, $Folder, $default_bucketpool_fk='')
Add a user.
#define PERM_WRITE
Read-Write permission.
Definition: libfossology.h:33
#define PERM_READ
Read-only permission.
Definition: libfossology.h:32
#define PERM_ADMIN
Administrator.
Definition: libfossology.h:34
#define PERM_NONE
User has no permission (not logged in)
Definition: libfossology.h:31
#define PLUGIN_DB_ADMIN
Plugin requires admin level permission on DB.
Definition: libfossology.h:39