From 8d4bef41f3dac1d3a49c435b2eac19d5aee7f76b Mon Sep 17 00:00:00 2001 From: zak39 Date: Mon, 4 Aug 2025 11:22:37 +0200 Subject: [PATCH 1/4] refactor: Replace NoAdminRequired and NoCSRFRequired annotations by attributes --- lib/Controller/ConnectedGroupController.php | 5 ++-- lib/Controller/FileCSVController.php | 3 ++- lib/Controller/GroupController.php | 20 +++++++------- lib/Controller/PageController.php | 7 ++--- lib/Controller/SpaceController.php | 11 +++----- lib/Controller/WorkspaceController.php | 30 +++++++++------------ 6 files changed, 35 insertions(+), 41 deletions(-) diff --git a/lib/Controller/ConnectedGroupController.php b/lib/Controller/ConnectedGroupController.php index 6647a0ed7..fff50fa4f 100644 --- a/lib/Controller/ConnectedGroupController.php +++ b/lib/Controller/ConnectedGroupController.php @@ -15,6 +15,7 @@ use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\OpenAPI; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\JSONResponse; use OCP\IGroupManager; use Psr\Log\LoggerInterface; @@ -40,12 +41,12 @@ public function __construct( * * Add a group connected to a workspace/groupfolder. * - * @NoAdminRequired * @SpaceAdminRequired * * @param int $spaceId * @param string $gid */ + #[NoAdminRequired] public function addGroup(int $spaceId, string $gid): JSONResponse { if (!$this->groupManager->groupExists($gid)) { @@ -121,9 +122,9 @@ public function addGroup(int $spaceId, string $gid): JSONResponse { /** * Remove a group connected to a workspace/groupfolder. * - * @NoAdminRequired * @SpaceAdminRequired */ + #[NoAdminRequired] public function removeGroup(int $spaceId, string $gid) { if (!$this->groupManager->groupExists($gid)) { $message = sprintf('The group %s does not exist', $gid); diff --git a/lib/Controller/FileCSVController.php b/lib/Controller/FileCSVController.php index 5ed33fbe6..3990ec15a 100644 --- a/lib/Controller/FileCSVController.php +++ b/lib/Controller/FileCSVController.php @@ -49,6 +49,7 @@ use OCA\Workspace\Users\UsersExistCheck; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\JSONResponse; use OCP\Files\IRootFolder; use OCP\IL10N; @@ -282,11 +283,11 @@ public function import(?int $spaceId = null): JSONResponse { } /** - * @NoAdminRequired * @SpaceAdminRequired * Returns formatted list of existing users of the instance. * */ + #[NoAdminRequired] public function getFromFiles(?int $spaceId = null):JSONResponse { try { $params = $this->request->getParams(); diff --git a/lib/Controller/GroupController.php b/lib/Controller/GroupController.php index b06b78040..4e31426fc 100644 --- a/lib/Controller/GroupController.php +++ b/lib/Controller/GroupController.php @@ -40,6 +40,7 @@ use OCA\Workspace\Space\SpaceManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\JSONResponse; use OCP\Collaboration\Collaborators\ISearch; use OCP\IGroupManager; @@ -70,7 +71,6 @@ public function __construct( } /** - * @NoAdminRequired * @SpaceAdminRequired * * Creates a group @@ -83,6 +83,7 @@ public function __construct( * @var string $spaceId for Middleware * */ + #[NoAdminRequired] public function create(array $data = []): JSONResponse { $data = array_merge(self::DEFAULT, $data); @@ -113,7 +114,6 @@ public function create(array $data = []): JSONResponse { } /** - * @NoAdminRequired * @SpaceAdminRequired * * Deletes a group @@ -123,6 +123,7 @@ public function create(array $data = []): JSONResponse { * @var int $spaceId * */ + #[NoAdminRequired] public function delete(string $gid, int $spaceId): JSONResponse { $gid = urldecode(urldecode($gid)); @@ -147,7 +148,6 @@ public function delete(string $gid, int $spaceId): JSONResponse { } /** - * @NoAdminRequired * @SpaceAdminRequired * * Renames a group @@ -158,6 +158,7 @@ public function delete(string $gid, int $spaceId): JSONResponse { * @var int $spaceId * */ + #[NoAdminRequired] public function rename(string $newGroupName, string $gid, int $spaceId): JSONResponse { @@ -191,7 +192,6 @@ public function rename(string $newGroupName, } /** - * @NoAdminRequired * @SpaceAdminRequired * Adds a user to a group. * The function automaticaly adds the user the the corresponding workspace's user group, and to the application @@ -202,6 +202,7 @@ public function rename(string $newGroupName, * @var string $user * */ + #[NoAdminRequired] public function addUser(string $spaceId, string $gid, string $user): JSONResponse { // Makes sure group exist $NCGroup = $this->groupManager->get($gid); @@ -241,7 +242,6 @@ public function addUser(string $spaceId, string $gid, string $user): JSONRespons /** * Remove a user from a workspace. * - * @NoAdminRequired * @SpaceAdminRequired * * @param array|string $space @@ -249,6 +249,7 @@ public function addUser(string $spaceId, string $gid, string $user): JSONRespons * @param string $user * @return JSONResponse */ + #[NoAdminRequired] public function removeUserFromWorkspace( array|string $space, string $gid, @@ -298,7 +299,6 @@ public function removeUserFromWorkspace( } /** - * @NoAdminRequired * @SpaceAdminRequired * * Removes a user from a group @@ -310,6 +310,7 @@ public function removeUserFromWorkspace( * @var string $user * */ + #[NoAdminRequired] public function removeUser( IRequest $request, array|string $space, @@ -385,9 +386,9 @@ public function removeUser( } /** - * @NoAdminRequired * @SpaceAdminRequired */ + #[NoAdminRequired] public function attachGroupToSpace(int $spaceId, string $gid) { $workspace = $this->spaceManager->get($spaceId); $this->spaceManager->attachGroup($workspace['groupfolder_id'], $gid); @@ -398,11 +399,11 @@ public function attachGroupToSpace(int $spaceId, string $gid) { } /** - * @NoAdminRequired * @GeneralManagerRequired * @param string|array $groupfolder * */ + #[NoAdminRequired] public function transferUsersToGroups(string $spaceId, string|array $groupfolder): JSONResponse { if (gettype($groupfolder) === 'string') { @@ -444,12 +445,11 @@ public function transferUsersToGroups(string $spaceId, } /** - * @NoAdminRequired - * * @param string $pattern The pattern to search * @param bool $ignoreSpaces (not require) Ignore the workspace groups * @param array $groupsPresents are groups already present */ + #[NoAdminRequired] public function search(string $pattern, ?bool $ignoreSpaces = null, array $groupsPresents = []): JSONResponse { [$groups] = $this->collaboratorSearch->search( diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index 0d66b8ffd..43cdc1e3c 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -29,6 +29,8 @@ use OCA\Workspace\Exceptions\NotFoundException; use OCA\Workspace\Service\UserService; use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; +use OCP\AppFramework\Http\Attribute\NoCSRFRequired; use OCP\AppFramework\Http\TemplateResponse; use OCP\IConfig; use OCP\IUserSession; @@ -44,10 +46,9 @@ public function __construct( /** * Application's main page - * - * @NoAdminRequired - * @NOCSRFRequired */ + #[NoAdminRequired] + #[NoCSRFRequired] public function index($path = ''): TemplateResponse { if (strpos($path, 'api/v') === 0) { // avoid non existing API routes to be handled by this controller diff --git a/lib/Controller/SpaceController.php b/lib/Controller/SpaceController.php index e53f409ca..f1b708694 100644 --- a/lib/Controller/SpaceController.php +++ b/lib/Controller/SpaceController.php @@ -28,6 +28,7 @@ use OCA\Workspace\Db\SpaceMapper; use OCA\Workspace\Service\SpaceService; use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\DataResponse; use OCP\IRequest; @@ -41,24 +42,20 @@ public function __construct( parent::__construct($AppName, $request); } - /** - * @NoAdminRequired - */ + #[NoAdminRequired] public function find(int $id): DataResponse { return new DataResponse($this->spaceService->find($id)); } - /** - * @NoAdminRequired - */ + #[NoAdminRequired] public function findAll(): DataResponse { return new DataResponse($this->spaceService->findAll()); } /** - * @NoAdminRequired * @SpaceAdminRequired */ + #[NoAdminRequired] public function updateColorCode(string $colorCode, int $spaceId): DataResponse { return new DataResponse($this->spaceService->updateColorCode($colorCode, (int)$spaceId)); } diff --git a/lib/Controller/WorkspaceController.php b/lib/Controller/WorkspaceController.php index 6cd0d77b6..20eea38bd 100644 --- a/lib/Controller/WorkspaceController.php +++ b/lib/Controller/WorkspaceController.php @@ -44,6 +44,7 @@ use OCA\Workspace\Space\SpaceManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\JSONResponse; use OCP\IGroupManager; use OCP\IRequest; @@ -85,10 +86,10 @@ private function deleteBlankSpaceName(string $spaceName): string { } /** - * @NoAdminRequired * @GeneralManagerRequired * @param string $spaceName */ + #[NoAdminRequired] public function createWorkspace(string $spaceName): JSONResponse { $workspace = $this->spaceManager->create($spaceName); @@ -106,11 +107,11 @@ public function createWorkspace(string $spaceName): JSONResponse { * * Deletes the workspace, and the corresponding groupfolder and groups * - * @NoAdminRequired * @GeneralManagerRequired * @param int $spaceId * */ + #[NoAdminRequired] public function destroy(int $spaceId): JSONResponse { $space = $this->spaceManager->get($spaceId); $groups = []; @@ -136,12 +137,9 @@ public function destroy(int $spaceId): JSONResponse { } /** - * * Returns a list of all the workspaces that the connected user may use. - * - * @NoAdminRequired - * */ + #[NoAdminRequired] public function findAll(): JSONResponse { $workspaces = $this->workspaceService->getAll(); $spaces = []; @@ -198,9 +196,7 @@ public function findAll(): JSONResponse { return new JSONResponse($spaces); } - /** - * @NoAdminRequired - */ + #[NoAdminRequired] public function getUsers(int $spaceId): JSONResponse { $space = $this->spaceMapper->find($spaceId); @@ -222,9 +218,7 @@ public function getUsers(int $spaceId): JSONResponse { return new JSONResponse($users); } - /** - * @NoAdminRequired - */ + #[NoAdminRequired] public function getAdmins(int $spaceId): JSONResponse { $space = $this->spaceMapper->find($spaceId); @@ -256,11 +250,11 @@ public function getAdmins(int $spaceId): JSONResponse { } /** - * @NoAdminRequired * @GeneralManagerRequired * @param int $spaceId of workspace * @param int $quota in bytes */ + #[NoAdminRequired] public function updateQuota(int $spaceId, int $quota): JSONResponse { $space = $this->spaceMapper->find($spaceId); @@ -283,17 +277,17 @@ public function updateQuota(int $spaceId, int $quota): JSONResponse { } /** - * @NoAdminRequired * @param string|array $workspace */ + #[NoAdminRequired] public function addGroupsInfo(string|array $workspace): JSONResponse { return new JSONResponse($this->workspaceService->addGroupsInfo($workspace)); } /** - * @NoAdminRequired * @param string|array $workspace */ + #[NoAdminRequired] public function addUsersInfo(string|array $workspace): JSONResponse { if (gettype($workspace) === 'string') { $workspace = json_decode($workspace, true); @@ -304,12 +298,12 @@ public function addUsersInfo(string|array $workspace): JSONResponse { /** * Returns a list of users whose name matches $term * - * @NoAdminRequired * @param string $term * @param string $spaceId * @param string|array $space * */ + #[NoAdminRequired] public function lookupUsers(string $term, string $spaceId, string|array $space): JSONResponse { @@ -324,13 +318,13 @@ public function lookupUsers(string $term, * * Change a user's role in a workspace * - * @NoAdminRequired * @SpaceAdminRequired * * @param array|string $space * @param string $userId * */ + #[NoAdminRequired] public function changeUserRole(array|string $space, string $userId): JSONResponse { if (gettype($space) === 'string') { @@ -357,12 +351,12 @@ public function changeUserRole(array|string $space, /** * - * @NoAdminRequired * @SpaceAdminRequired * @param int $spaceId * @param string $newSpaceName * */ + #[NoAdminRequired] public function renameSpace(int $spaceId, string $newSpaceName): JSONResponse { From 6000a5087b9fd3e7374baa2283fdfd6b23d99751 Mon Sep 17 00:00:00 2001 From: zak39 Date: Mon, 4 Aug 2025 15:14:55 +0200 Subject: [PATCH 2/4] chore: Limit the workspace to PHP 8.0 minimum --- appinfo/info.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/appinfo/info.xml b/appinfo/info.xml index a345a6aea..64ed91035 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -20,6 +20,7 @@ https://www.arawa.fr/contact/ + From 5b7246b490d253708a6dc7d57c15b1653bbc4f5f Mon Sep 17 00:00:00 2001 From: zak39 Date: Fri, 17 Oct 2025 16:20:13 +0200 Subject: [PATCH 3/4] chore: PHP 8.1 and Nextcloud 28 are the minimun required versions --- appinfo/info.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index 64ed91035..043772dea 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -20,8 +20,8 @@ https://www.arawa.fr/contact/ - - + + Create Groupfolders with delegated management From 6a0ffc5ae0aff11d52174bb66671d16d5230346d Mon Sep 17 00:00:00 2001 From: zak39 Date: Fri, 17 Oct 2025 16:28:16 +0200 Subject: [PATCH 4/4] chore: composer run cs:fix --- lib/Controller/ConnectedGroupController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Controller/ConnectedGroupController.php b/lib/Controller/ConnectedGroupController.php index fff50fa4f..08cca5403 100644 --- a/lib/Controller/ConnectedGroupController.php +++ b/lib/Controller/ConnectedGroupController.php @@ -14,8 +14,8 @@ use OCA\Workspace\Space\SpaceManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; -use OCP\AppFramework\Http\Attribute\OpenAPI; use OCP\AppFramework\Http\Attribute\NoAdminRequired; +use OCP\AppFramework\Http\Attribute\OpenAPI; use OCP\AppFramework\Http\JSONResponse; use OCP\IGroupManager; use Psr\Log\LoggerInterface;