[provisioning_api] Moved groups away from static stuff
This commit is contained in:
parent
abca7737b7
commit
b745e75737
|
@ -44,7 +44,9 @@ API::register('delete', '/cloud/users/{userid}/subadmins', [$users, 'removeSubAd
|
|||
API::register('get', '/cloud/users/{userid}/subadmins', [$users, 'getUserSubAdminGroups'], 'provisioning_api', API::ADMIN_AUTH);
|
||||
|
||||
// Groups
|
||||
$groups = new \OCA\Provisioning_API\Groups();
|
||||
$groups = new \OCA\Provisioning_API\Groups(
|
||||
\OC::$server->getGroupManager()
|
||||
);
|
||||
API::register('get', '/cloud/groups', [$groups, 'getGroups'], 'provisioning_api', API::SUBADMIN_AUTH);
|
||||
API::register('post', '/cloud/groups', [$groups, 'addGroup'], 'provisioning_api', API::SUBADMIN_AUTH);
|
||||
API::register('get', '/cloud/groups/{groupid}', [$groups, 'getGroup'], 'provisioning_api', API::SUBADMIN_AUTH);
|
||||
|
|
|
@ -24,33 +24,53 @@
|
|||
namespace OCA\Provisioning_API;
|
||||
|
||||
use \OC_OCS_Result;
|
||||
use \OC_Group;
|
||||
use \OC_SubAdmin;
|
||||
|
||||
class Groups{
|
||||
|
||||
/** @var \OCP\IGroupManager */
|
||||
private $groupManager;
|
||||
|
||||
/**
|
||||
* @param \OCP\IGroupManager $groupManager
|
||||
*/
|
||||
public function __construct(\OCP\IGroupManager $groupManager) {
|
||||
$this->groupManager = $groupManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a list of groups
|
||||
*/
|
||||
public static function getGroups($parameters){
|
||||
public function getGroups($parameters){
|
||||
$search = !empty($_GET['search']) ? $_GET['search'] : '';
|
||||
$limit = !empty($_GET['limit']) ? $_GET['limit'] : null;
|
||||
$offset = !empty($_GET['offset']) ? $_GET['offset'] : null;
|
||||
return new OC_OCS_Result(array('groups' => OC_Group::getGroups($search, $limit, $offset)));
|
||||
|
||||
$groups = $this->groupManager->search($search, $limit, $offset);
|
||||
$groups = array_map(function($group) {
|
||||
return $group->getGID();
|
||||
}, $groups);
|
||||
|
||||
return new OC_OCS_Result(['groups' => $groups]);
|
||||
}
|
||||
|
||||
/**
|
||||
* returns an array of users in the group specified
|
||||
*/
|
||||
public static function getGroup($parameters){
|
||||
public function getGroup($parameters){
|
||||
// Check the group exists
|
||||
if(!OC_Group::groupExists($parameters['groupid'])){
|
||||
if(!$this->groupManager->groupExists($parameters['groupid'])){
|
||||
return new OC_OCS_Result(null, \OCP\API::RESPOND_NOT_FOUND, 'The requested group could not be found');
|
||||
}
|
||||
// Check subadmin has access to this group
|
||||
if(\OC_User::isAdminUser(\OC_User::getUser())
|
||||
if($this->groupManager->isAdmin(\OC_User::getUser())
|
||||
|| in_array($parameters['groupid'], \OC_SubAdmin::getSubAdminsGroups(\OC_User::getUser()))){
|
||||
return new OC_OCS_Result(array('users' => OC_Group::usersInGroup($parameters['groupid'])));
|
||||
$users = $this->groupManager->get($parameters['groupid'])->getUsers();
|
||||
$users = array_map(function($user) {
|
||||
return $user->getUID();
|
||||
}, $users);
|
||||
$users = array_values($users);
|
||||
return new OC_OCS_Result(['users' => $users]);
|
||||
} else {
|
||||
return new OC_OCS_Result(null, \OCP\API::RESPOND_UNAUTHORISED, 'User does not have access to specified group');
|
||||
}
|
||||
|
@ -59,7 +79,7 @@ class Groups{
|
|||
/**
|
||||
* creates a new group
|
||||
*/
|
||||
public static function addGroup($parameters){
|
||||
public function addGroup($parameters){
|
||||
// Validate name
|
||||
$groupid = isset($_POST['groupid']) ? $_POST['groupid'] : '';
|
||||
if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $groupid ) || empty($groupid)){
|
||||
|
@ -67,21 +87,18 @@ class Groups{
|
|||
return new OC_OCS_Result(null, 101, 'Invalid group name');
|
||||
}
|
||||
// Check if it exists
|
||||
if(OC_Group::groupExists($groupid)){
|
||||
if($this->groupManager->groupExists($groupid)){
|
||||
return new OC_OCS_Result(null, 102);
|
||||
}
|
||||
if(OC_Group::createGroup($groupid)){
|
||||
$this->groupManager->createGroup($groupid);
|
||||
return new OC_OCS_Result(null, 100);
|
||||
} else {
|
||||
return new OC_OCS_Result(null, 103);
|
||||
}
|
||||
}
|
||||
|
||||
public static function deleteGroup($parameters){
|
||||
public function deleteGroup($parameters){
|
||||
// Check it exists
|
||||
if(!OC_Group::groupExists($parameters['groupid'])){
|
||||
if(!$this->groupManager->grouExists($parameters['groupid'])){
|
||||
return new OC_OCS_Result(null, 101);
|
||||
} else if($parameters['groupid'] == 'admin' || !OC_Group::deleteGroup($parameters['groupid'])){
|
||||
} else if($parameters['groupid'] === 'admin' || !$this->groupManger->get($parameters['groupid'])->delete()){
|
||||
// Cannot delete admin group
|
||||
return new OC_OCS_Result(null, 102);
|
||||
} else {
|
||||
|
@ -89,10 +106,10 @@ class Groups{
|
|||
}
|
||||
}
|
||||
|
||||
public static function getSubAdminsOfGroup($parameters) {
|
||||
public function getSubAdminsOfGroup($parameters) {
|
||||
$group = $parameters['groupid'];
|
||||
// Check group exists
|
||||
if(!OC_Group::groupExists($group)) {
|
||||
if(!$this->groupManager->groupExists($group)) {
|
||||
return new OC_OCS_Result(null, 101, 'Group does not exist');
|
||||
}
|
||||
// Go
|
||||
|
|
|
@ -25,17 +25,25 @@
|
|||
namespace OCA\Provisioning_API\Tests;
|
||||
|
||||
class GroupsTest extends TestCase {
|
||||
|
||||
protected function setup() {
|
||||
parent::setup();
|
||||
|
||||
$this->userManager = \OC::$server->getUserManager();
|
||||
$this->groupManager = \OC::$server->getGroupManager();
|
||||
$this->api = new \OCA\Provisioning_API\Groups($this->groupManager);
|
||||
}
|
||||
|
||||
public function testGetGroupAsUser() {
|
||||
|
||||
$users = $this->generateUsers(2);
|
||||
self::loginAsUser($users[0]);
|
||||
|
||||
$group = $this->getUniqueID();
|
||||
\OC_Group::createGroup($group);
|
||||
\OC_Group::addToGroup($users[1], $group);
|
||||
$group = $this->groupManager->createGroup($this->getUniqueID());
|
||||
$group->addUser($this->userManager->get($users[1]));
|
||||
|
||||
$result = \OCA\provisioning_api\Groups::getGroup(array(
|
||||
'groupid' => $group,
|
||||
$result = $this->api->getGroup(array(
|
||||
'groupid' => $group->getGID(),
|
||||
));
|
||||
|
||||
$this->assertInstanceOf('OC_OCS_Result', $result);
|
||||
|
@ -49,15 +57,14 @@ class GroupsTest extends TestCase {
|
|||
$users = $this->generateUsers(2);
|
||||
self::loginAsUser($users[0]);
|
||||
|
||||
$group = $this->getUniqueID();
|
||||
\OC_Group::createGroup($group);
|
||||
\OC_Group::addToGroup($users[0], $group);
|
||||
\OC_Group::addToGroup($users[1], $group);
|
||||
$group = $this->groupManager->createGroup($this->getUniqueID());
|
||||
$group->addUser($this->userManager->get($users[0]));
|
||||
$group->addUser($this->userManager->get($users[1]));
|
||||
|
||||
\OC_SubAdmin::createSubAdmin($users[0], $group);
|
||||
\OC_SubAdmin::createSubAdmin($users[0], $group->getGID());
|
||||
|
||||
$result = \OCA\provisioning_api\Groups::getGroup(array(
|
||||
'groupid' => $group,
|
||||
$result = $this->api->getGroup(array(
|
||||
'groupid' => $group->getGID(),
|
||||
));
|
||||
|
||||
$this->assertInstanceOf('OC_OCS_Result', $result);
|
||||
|
@ -78,17 +85,15 @@ class GroupsTest extends TestCase {
|
|||
$users = $this->generateUsers(2);
|
||||
self::loginAsUser($users[0]);
|
||||
|
||||
$group = $this->getUniqueID();
|
||||
\OC_Group::createGroup($group);
|
||||
$group2 = $this->getUniqueID();
|
||||
\OC_Group::createGroup($group2);
|
||||
\OC_Group::addToGroup($users[1], $group);
|
||||
\OC_Group::addToGroup($users[0], $group2);
|
||||
$group1 = $this->groupManager->createGroup($this->getUniqueID());
|
||||
$group2 = $this->groupManager->createGroup($this->getUniqueID());
|
||||
$group1->addUser($this->userManager->get($users[1]));
|
||||
$group2->addUser($this->userManager->get($users[0]));
|
||||
|
||||
\OC_SubAdmin::createSubAdmin($users[0], $group2);
|
||||
\OC_SubAdmin::createSubAdmin($users[0], $group2->getGID());
|
||||
|
||||
$result = \OCA\provisioning_api\Groups::getGroup(array(
|
||||
'groupid' => $group,
|
||||
$result = $this->api->getGroup(array(
|
||||
'groupid' => $group1->getGID(),
|
||||
));
|
||||
|
||||
$this->assertInstanceOf('OC_OCS_Result', $result);
|
||||
|
@ -102,14 +107,13 @@ class GroupsTest extends TestCase {
|
|||
$users = $this->generateUsers(2);
|
||||
self::loginAsUser($users[0]);
|
||||
|
||||
$group = $this->getUniqueID();
|
||||
\OC_Group::createGroup($group);
|
||||
$group = $this->groupManager->createGroup($this->getUniqueID());
|
||||
|
||||
\OC_Group::addToGroup($users[1], $group);
|
||||
\OC_Group::addToGroup($users[0], 'admin');
|
||||
$group->addUser($this->userManager->get($users[1]));
|
||||
$this->groupManager->get('admin')->addUser($this->userManager->get($users[0]));
|
||||
|
||||
$result = \OCA\provisioning_api\Groups::getGroup(array(
|
||||
'groupid' => $group,
|
||||
$result = $this->api->getGroup(array(
|
||||
'groupid' => $group->getGID(),
|
||||
));
|
||||
|
||||
$this->assertInstanceOf('OC_OCS_Result', $result);
|
||||
|
@ -122,23 +126,22 @@ class GroupsTest extends TestCase {
|
|||
$user1 = $this->generateUsers();
|
||||
$user2 = $this->generateUsers();
|
||||
self::loginAsUser($user1);
|
||||
\OC_Group::addToGroup($user1, 'admin');
|
||||
$group1 = $this->getUniqueID();
|
||||
\OC_Group::createGroup($group1);
|
||||
\OC_SubAdmin::createSubAdmin($user2, $group1);
|
||||
$result = \OCA\provisioning_api\Groups::getSubAdminsOfGroup(array(
|
||||
'groupid' => $group1,
|
||||
$this->groupManager->get('admin')->addUser($this->userManager->get($user1));
|
||||
$group1 = $this->groupManager->createGroup($this->getUniqueID());
|
||||
\OC_SubAdmin::createSubAdmin($user2, $group1->getGID());
|
||||
$result = $this->api->getSubAdminsOfGroup(array(
|
||||
'groupid' => $group1->getGID(),
|
||||
));
|
||||
$this->assertInstanceOf('OC_OCS_Result', $result);
|
||||
$this->assertTrue($result->succeeded());
|
||||
$data = $result->getData();
|
||||
$this->assertEquals($user2, reset($data));
|
||||
\OC_Group::deleteGroup($group1);
|
||||
$group1->delete();
|
||||
|
||||
$user1 = $this->generateUsers();
|
||||
self::loginAsUser($user1);
|
||||
\OC_Group::addToGroup($user1, 'admin');
|
||||
$result = \OCA\provisioning_api\Groups::getSubAdminsOfGroup(array(
|
||||
$this->groupManager->get('admin')->addUser($this->userManager->get($user1));
|
||||
$result = $this->api->getSubAdminsOfGroup(array(
|
||||
'groupid' => $this->getUniqueID(),
|
||||
));
|
||||
$this->assertInstanceOf('OC_OCS_Result', $result);
|
||||
|
|
Loading…
Reference in New Issue