Browse Source
Merge pull request #8904 from nextcloud/ocs-api-get-users-details-per-groups
Merge pull request #8904 from nextcloud/ocs-api-get-users-details-per-groups
Api: return users details by groupspull/9101/head
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 349 additions and 220 deletions
-
2apps/provisioning_api/appinfo/routes.php
-
1apps/provisioning_api/composer/composer/autoload_classmap.php
-
1apps/provisioning_api/composer/composer/autoload_static.php
-
186apps/provisioning_api/lib/Controller/AUserData.php
-
135apps/provisioning_api/lib/Controller/GroupsController.php
-
145apps/provisioning_api/lib/Controller/UsersController.php
-
85apps/provisioning_api/tests/Controller/GroupsControllerTest.php
-
10apps/provisioning_api/tests/Controller/UsersControllerTest.php
-
0build/autoloaderchecker.sh
-
4build/integration/features/provisioning-v1.feature
@ -0,0 +1,186 @@ |
|||
<?php |
|||
declare(strict_types=1); |
|||
/** |
|||
* @copyright Copyright (c) 2018 John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> |
|||
* |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
|
|||
namespace OCA\Provisioning_API\Controller; |
|||
|
|||
use OC\Accounts\AccountManager; |
|||
use OCP\AppFramework\OCS\OCSException; |
|||
use OCP\AppFramework\OCS\OCSNotFoundException; |
|||
use OCP\AppFramework\OCSController; |
|||
use OCP\Files\NotFoundException; |
|||
use OC_Helper; |
|||
use OCP\IConfig; |
|||
use OCP\IGroupManager; |
|||
use OCP\IRequest; |
|||
use OCP\IUserManager; |
|||
use OCP\IUserSession; |
|||
|
|||
abstract class AUserData extends OCSController { |
|||
|
|||
/** @var IUserManager */ |
|||
protected $userManager; |
|||
/** @var IConfig */ |
|||
protected $config; |
|||
/** @var IGroupManager|\OC\Group\Manager */ // FIXME Requires a method that is not on the interface
|
|||
protected $groupManager; |
|||
/** @var IUserSession */ |
|||
protected $userSession; |
|||
/** @var AccountManager */ |
|||
protected $accountManager; |
|||
|
|||
/** |
|||
* @param string $appName |
|||
* @param IRequest $request |
|||
* @param IUserManager $userManager |
|||
* @param IConfig $config |
|||
* @param IGroupManager $groupManager |
|||
* @param IUserSession $userSession |
|||
* @param AccountManager $accountManager |
|||
*/ |
|||
public function __construct(string $appName, |
|||
IRequest $request, |
|||
IUserManager $userManager, |
|||
IConfig $config, |
|||
IGroupManager $groupManager, |
|||
IUserSession $userSession, |
|||
AccountManager $accountManager) { |
|||
parent::__construct($appName, $request); |
|||
|
|||
$this->userManager = $userManager; |
|||
$this->config = $config; |
|||
$this->groupManager = $groupManager; |
|||
$this->userSession = $userSession; |
|||
$this->accountManager = $accountManager; |
|||
} |
|||
|
|||
/** |
|||
* creates a array with all user data |
|||
* |
|||
* @param $userId |
|||
* @return array |
|||
* @throws OCSException |
|||
*/ |
|||
protected function getUserData(string $userId): array { |
|||
$currentLoggedInUser = $this->userSession->getUser(); |
|||
|
|||
$data = []; |
|||
|
|||
// Check if the target user exists
|
|||
$targetUserObject = $this->userManager->get($userId); |
|||
if($targetUserObject === null) { |
|||
throw new OCSNotFoundException('User does not exist'); |
|||
} |
|||
|
|||
// Should be at least Admin Or SubAdmin!
|
|||
if( $this->groupManager->isAdmin($currentLoggedInUser->getUID()) |
|||
|| $this->groupManager->getSubAdmin()->isUserAccessible($currentLoggedInUser, $targetUserObject)) { |
|||
$data['enabled'] = $this->config->getUserValue($targetUserObject->getUID(), 'core', 'enabled', 'true'); |
|||
} else { |
|||
// Check they are looking up themselves
|
|||
if($currentLoggedInUser->getUID() !== $targetUserObject->getUID()) { |
|||
return $data; |
|||
} |
|||
} |
|||
|
|||
// Get groups data
|
|||
$userAccount = $this->accountManager->getUser($targetUserObject); |
|||
$groups = $this->groupManager->getUserGroups($targetUserObject); |
|||
$gids = []; |
|||
foreach ($groups as $group) { |
|||
$gids[] = $group->getDisplayName(); |
|||
} |
|||
|
|||
// Find the data
|
|||
$data['id'] = $targetUserObject->getUID(); |
|||
$data['storageLocation'] = $targetUserObject->getHome(); |
|||
$data['lastLogin'] = $targetUserObject->getLastLogin() * 1000; |
|||
$data['backend'] = $targetUserObject->getBackendClassName(); |
|||
$data['subadmin'] = $this->getUserSubAdminGroupsData($targetUserObject->getUID()); |
|||
$data['quota'] = $this->fillStorageInfo($targetUserObject->getUID()); |
|||
$data[AccountManager::PROPERTY_EMAIL] = $targetUserObject->getEMailAddress(); |
|||
$data[AccountManager::PROPERTY_DISPLAYNAME] = $targetUserObject->getDisplayName(); |
|||
$data[AccountManager::PROPERTY_PHONE] = $userAccount[AccountManager::PROPERTY_PHONE]['value']; |
|||
$data[AccountManager::PROPERTY_ADDRESS] = $userAccount[AccountManager::PROPERTY_ADDRESS]['value']; |
|||
$data[AccountManager::PROPERTY_WEBSITE] = $userAccount[AccountManager::PROPERTY_WEBSITE]['value']; |
|||
$data[AccountManager::PROPERTY_TWITTER] = $userAccount[AccountManager::PROPERTY_TWITTER]['value']; |
|||
$data['groups'] = $gids; |
|||
$data['language'] = $this->config->getUserValue($targetUserObject->getUID(), 'core', 'lang'); |
|||
|
|||
return $data; |
|||
} |
|||
|
|||
/** |
|||
* Get the groups a user is a subadmin of |
|||
* |
|||
* @param string $userId |
|||
* @return array |
|||
* @throws OCSException |
|||
*/ |
|||
protected function getUserSubAdminGroupsData(string $userId): array { |
|||
$user = $this->userManager->get($userId); |
|||
// Check if the user exists
|
|||
if($user === null) { |
|||
throw new OCSNotFoundException('User does not exist'); |
|||
} |
|||
|
|||
// Get the subadmin groups
|
|||
$subAdminGroups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($user); |
|||
$groups = []; |
|||
foreach ($subAdminGroups as $key => $group) { |
|||
$groups[] = $group->getGID(); |
|||
} |
|||
|
|||
return $groups; |
|||
} |
|||
|
|||
/** |
|||
* @param string $userId |
|||
* @return array |
|||
* @throws \OCP\Files\NotFoundException |
|||
*/ |
|||
protected function fillStorageInfo(string $userId): array { |
|||
try { |
|||
\OC_Util::tearDownFS(); |
|||
\OC_Util::setupFS($userId); |
|||
$storage = OC_Helper::getStorageInfo('/'); |
|||
$data = [ |
|||
'free' => $storage['free'], |
|||
'used' => $storage['used'], |
|||
'total' => $storage['total'], |
|||
'relative' => $storage['relative'], |
|||
'quota' => $storage['quota'], |
|||
]; |
|||
} catch (NotFoundException $ex) { |
|||
// User fs is not setup yet
|
|||
$user = $this->userManager->get($userId); |
|||
if ($user === null) { |
|||
throw new OCSException('User does not exist', 101); |
|||
} |
|||
$quota = OC_Helper::computerFileSize($user->getQuota()); |
|||
$data = [ |
|||
'quota' => $quota ? $quota : 'none', |
|||
'used' => 0 |
|||
]; |
|||
} |
|||
return $data; |
|||
} |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue