Skip to content

Commit

Permalink
provisioning_api: Add OpenAPI spec
Browse files Browse the repository at this point in the history
Signed-off-by: jld3103 <jld3103yt@gmail.com>
  • Loading branch information
provokateurin committed Feb 19, 2023
1 parent 42ce50c commit 59f7f8c
Show file tree
Hide file tree
Showing 8 changed files with 3,685 additions and 51 deletions.
10 changes: 7 additions & 3 deletions apps/provisioning_api/lib/Controller/AUserData.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
use OC\User\Backend;
use OC\User\NoUserException;
use OC_Helper;
use OCA\Provisioning_API\ResponseDefinitions;
use OCP\Accounts\IAccountManager;
use OCP\Accounts\PropertyDoesNotExistException;
use OCP\AppFramework\Http;
Expand All @@ -52,6 +53,9 @@
use OCP\User\Backend\ISetDisplayNameBackend;
use OCP\User\Backend\ISetPasswordBackend;

/**
* @psalm-import-type UserDetails from ResponseDefinitions
*/
abstract class AUserData extends OCSController {
public const SCOPE_SUFFIX = 'Scope';

Expand Down Expand Up @@ -98,12 +102,12 @@ public function __construct(string $appName,
*
* @param string $userId
* @param bool $includeScopes
* @return array
* @return UserDetails|null
* @throws NotFoundException
* @throws OCSException
* @throws OCSNotFoundException
*/
protected function getUserData(string $userId, bool $includeScopes = false): array {
protected function getUserData(string $userId, bool $includeScopes = false): ?array {
$currentLoggedInUser = $this->userSession->getUser();
assert($currentLoggedInUser !== null, 'No user logged in');

Expand All @@ -122,7 +126,7 @@ protected function getUserData(string $userId, bool $includeScopes = false): arr
} else {
// Check they are looking up themselves
if ($currentLoggedInUser->getUID() !== $targetUserObject->getUID()) {
return $data;
return null;
}
}

Expand Down
11 changes: 6 additions & 5 deletions apps/provisioning_api/lib/Controller/AppConfigController.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Kate Döen <kate.doeen@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
Expand Down Expand Up @@ -84,7 +85,7 @@ public function __construct(string $appName,
}

/**
* @return DataResponse
* @return DataResponse<array{data: string[]}, Http::STATUS_OK>
*/
public function getApps(): DataResponse {
return new DataResponse([
Expand All @@ -94,7 +95,7 @@ public function getApps(): DataResponse {

/**
* @param string $app
* @return DataResponse
* @return DataResponse<array{data: string[]}, Http::STATUS_OK>|DataResponse<array{data: array{message: string}}, Http::STATUS_FORBIDDEN>
*/
public function getKeys(string $app): DataResponse {
try {
Expand All @@ -111,7 +112,7 @@ public function getKeys(string $app): DataResponse {
* @param string $app
* @param string $key
* @param string $defaultValue
* @return DataResponse
* @return DataResponse<array{data: string}, Http::STATUS_OK>|DataResponse<array{data: array{message: string}}, Http::STATUS_FORBIDDEN>
*/
public function getValue(string $app, string $key, string $defaultValue = ''): DataResponse {
try {
Expand All @@ -131,7 +132,7 @@ public function getValue(string $app, string $key, string $defaultValue = ''): D
* @param string $app
* @param string $key
* @param string $value
* @return DataResponse
* @return DataResponse<array, Http::STATUS_OK>|DataResponse<array{data: array{message: string}}, Http::STATUS_FORBIDDEN>
*/
public function setValue(string $app, string $key, string $value): DataResponse {
$user = $this->userSession->getUser();
Expand All @@ -158,7 +159,7 @@ public function setValue(string $app, string $key, string $value): DataResponse
* @PasswordConfirmationRequired
* @param string $app
* @param string $key
* @return DataResponse
* @return DataResponse<array, Http::STATUS_OK>|DataResponse<array{data: array{message: string}}, Http::STATUS_FORBIDDEN>
*/
public function deleteKey(string $app, string $key): DataResponse {
try {
Expand Down
15 changes: 11 additions & 4 deletions apps/provisioning_api/lib/Controller/AppsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Tom Needham <tom@owncloud.com>
* @author Kate Döen <kate.doeen@nextcloud.com>
*
* @license AGPL-3.0
*
Expand All @@ -29,13 +30,18 @@
namespace OCA\Provisioning_API\Controller;

use OC_App;
use OCA\Provisioning_API\ResponseDefinitions;
use OCP\App\AppPathNotFoundException;
use OCP\App\IAppManager;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCSController;
use OCP\IRequest;

/**
* @psalm-import-type AppInfo from ResponseDefinitions
*/
class AppsController extends OCSController {
/** @var IAppManager */
private $appManager;
Expand All @@ -52,11 +58,12 @@ public function __construct(

/**
* @param string|null $filter
* @return DataResponse
* @return DataResponse<array{apps: string[]}, Http::STATUS_OK>
* @throws OCSException
*/
public function getApps(string $filter = null): DataResponse {
$apps = (new OC_App())->listAllApps();
/** @var string[] $list */
$list = [];
foreach ($apps as $app) {
$list[] = $app['id'];
Expand All @@ -81,7 +88,7 @@ public function getApps(string $filter = null): DataResponse {

/**
* @param string $app
* @return DataResponse
* @return DataResponse<AppInfo, Http::STATUS_OK>
* @throws OCSException
*/
public function getAppInfo(string $app): DataResponse {
Expand All @@ -96,7 +103,7 @@ public function getAppInfo(string $app): DataResponse {
/**
* @PasswordConfirmationRequired
* @param string $app
* @return DataResponse
* @return DataResponse<array, Http::STATUS_OK>
* @throws OCSException
*/
public function enable(string $app): DataResponse {
Expand All @@ -111,7 +118,7 @@ public function enable(string $app): DataResponse {
/**
* @PasswordConfirmationRequired
* @param string $app
* @return DataResponse
* @return DataResponse<array, Http::STATUS_OK>
*/
public function disable(string $app): DataResponse {
$this->appManager->disableApp($app);
Expand Down
32 changes: 22 additions & 10 deletions apps/provisioning_api/lib/Controller/GroupsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Tom Needham <tom@owncloud.com>
* @author Kate Döen <kate.doeen@nextcloud.com>
*
* @license AGPL-3.0
*
Expand All @@ -32,7 +33,9 @@
*/
namespace OCA\Provisioning_API\Controller;

use OCA\Provisioning_API\ResponseDefinitions;
use OCP\Accounts\IAccountManager;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSForbiddenException;
Expand All @@ -48,6 +51,10 @@
use OCP\L10N\IFactory;
use Psr\Log\LoggerInterface;

/**
* @psalm-import-type GroupDetails from ResponseDefinitions
* @psalm-import-type UserDetails from ResponseDefinitions
*/
class GroupsController extends AUserData {

/** @var LoggerInterface */
Expand Down Expand Up @@ -83,7 +90,7 @@ public function __construct(string $appName,
* @param string $search
* @param int $limit
* @param int $offset
* @return DataResponse
* @return DataResponse<array{groups: string[]}, Http::STATUS_OK>
*/
public function getGroups(string $search = '', int $limit = null, int $offset = 0): DataResponse {
$groups = $this->groupManager->search($search, $limit, $offset);
Expand All @@ -104,7 +111,7 @@ public function getGroups(string $search = '', int $limit = null, int $offset =
* @param string $search
* @param int $limit
* @param int $offset
* @return DataResponse
* @return DataResponse<array{groups: GroupDetails[]}, Http::STATUS_OK>
*/
public function getGroupsDetails(string $search = '', int $limit = null, int $offset = 0): DataResponse {
$groups = $this->groupManager->search($search, $limit, $offset);
Expand All @@ -127,7 +134,7 @@ public function getGroupsDetails(string $search = '', int $limit = null, int $of
* @NoAdminRequired
*
* @param string $groupId
* @return DataResponse
* @return DataResponse<array{users: string[]}, Http::STATUS_OK>
* @throws OCSException
*
* @deprecated 14 Use getGroupUsers
Expand All @@ -142,8 +149,10 @@ public function getGroup(string $groupId): DataResponse {
* @NoAdminRequired
*
* @param string $groupId
* @return DataResponse
* @return DataResponse<array{users: string[]}, Http::STATUS_OK>
* @throws OCSException
* @throws OCSNotFoundException
* @throws OCSForbiddenException
*/
public function getGroupUsers(string $groupId): DataResponse {
$groupId = urldecode($groupId);
Expand All @@ -167,6 +176,7 @@ public function getGroupUsers(string $groupId): DataResponse {
/** @var IUser $user */
return $user->getUID();
}, $users);
/** @var string[] $users */
$users = array_values($users);
return new DataResponse(['users' => $users]);
}
Expand All @@ -183,7 +193,8 @@ public function getGroupUsers(string $groupId): DataResponse {
* @param string $search
* @param int $limit
* @param int $offset
* @return DataResponse
*
* @return DataResponse<array{users: array<string, UserDetails|array{id: string}>}, Http::STATUS_OK>
* @throws OCSException
*/
public function getGroupUsersDetails(string $groupId, string $search = '', int $limit = null, int $offset = 0): DataResponse {
Expand All @@ -210,7 +221,7 @@ public function getGroupUsersDetails(string $groupId, string $search = '', int $
$userId = (string)$user->getUID();
$userData = $this->getUserData($userId);
// Do not insert empty entry
if (!empty($userData)) {
if ($userData != null) {
$usersDetails[$userId] = $userData;
} else {
// Logged user does not have permissions to see this user
Expand All @@ -234,7 +245,7 @@ public function getGroupUsersDetails(string $groupId, string $search = '', int $
*
* @param string $groupid
* @param string $displayname
* @return DataResponse
* @return DataResponse<array, Http::STATUS_OK>
* @throws OCSException
*/
public function addGroup(string $groupid, string $displayname = ''): DataResponse {
Expand Down Expand Up @@ -263,7 +274,7 @@ public function addGroup(string $groupid, string $displayname = ''): DataRespons
* @param string $groupId
* @param string $key
* @param string $value
* @return DataResponse
* @return DataResponse<array, Http::STATUS_OK>
* @throws OCSException
*/
public function updateGroup(string $groupId, string $key, string $value): DataResponse {
Expand All @@ -285,7 +296,7 @@ public function updateGroup(string $groupId, string $key, string $value): DataRe
* @PasswordConfirmationRequired
*
* @param string $groupId
* @return DataResponse
* @return DataResponse<array, Http::STATUS_OK>
* @throws OCSException
*/
public function deleteGroup(string $groupId): DataResponse {
Expand All @@ -304,7 +315,7 @@ public function deleteGroup(string $groupId): DataResponse {

/**
* @param string $groupId
* @return DataResponse
* @return DataResponse<string[], Http::STATUS_OK>
* @throws OCSException
*/
public function getSubAdminsOfGroup(string $groupId): DataResponse {
Expand All @@ -317,6 +328,7 @@ public function getSubAdminsOfGroup(string $groupId): DataResponse {
/** @var IUser[] $subadmins */
$subadmins = $this->groupManager->getSubAdmin()->getGroupsSubAdmins($targetGroup);
// New class returns IUser[] so convert back
/** @var string[] $uids */
$uids = [];
foreach ($subadmins as $user) {
$uids[] = $user->getUID();
Expand Down
13 changes: 13 additions & 0 deletions apps/provisioning_api/lib/Controller/PreferencesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>
*
* @author Joas Schilling <coding@schilljs.com>
* @author Kate Döen <kate.doeen@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
Expand Down Expand Up @@ -58,6 +59,10 @@ public function __construct(
/**
* @NoAdminRequired
* @NoSubAdminRequired
*
* @param array<string, string> $configs
*
* @return DataResponse<array, Http::STATUS_OK|Http::STATUS_BAD_REQUEST>
*/
public function setMultiplePreferences(string $appId, array $configs): DataResponse {
$userId = $this->userSession->getUser()->getUID();
Expand Down Expand Up @@ -93,6 +98,8 @@ public function setMultiplePreferences(string $appId, array $configs): DataRespo
/**
* @NoAdminRequired
* @NoSubAdminRequired
*
* @return DataResponse<array, Http::STATUS_OK|Http::STATUS_BAD_REQUEST>
*/
public function setPreference(string $appId, string $configKey, string $configValue): DataResponse {
$userId = $this->userSession->getUser()->getUID();
Expand Down Expand Up @@ -124,6 +131,10 @@ public function setPreference(string $appId, string $configKey, string $configVa
/**
* @NoAdminRequired
* @NoSubAdminRequired
*
* @param string[] $configKeys
*
* @return DataResponse<array, Http::STATUS_OK|Http::STATUS_BAD_REQUEST>
*/
public function deleteMultiplePreference(string $appId, array $configKeys): DataResponse {
$userId = $this->userSession->getUser()->getUID();
Expand Down Expand Up @@ -157,6 +168,8 @@ public function deleteMultiplePreference(string $appId, array $configKeys): Data
/**
* @NoAdminRequired
* @NoSubAdminRequired
*
* @return DataResponse<array, Http::STATUS_OK|Http::STATUS_BAD_REQUEST>
*/
public function deletePreference(string $appId, string $configKey): DataResponse {
$userId = $this->userSession->getUser()->getUID();
Expand Down
Loading

0 comments on commit 59f7f8c

Please sign in to comment.