From e162fd835b31a506c72bfd2a613fb94f63b804dc Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 8 Feb 2024 11:12:46 +0100 Subject: [PATCH] feat(xo-server/rest-api): add /groups/:id/users and /users/:id/groups collections Fixes https://xcp-ng.org/forum/post/70500 --- CHANGELOG.unreleased.md | 1 + packages/xo-server/src/xo-mixins/rest-api.mjs | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 38919ba49..26e734d18 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -8,6 +8,7 @@ > Users must be able to say: “Nice enhancement, I'm eager to test it” - [REST API] Add `/groups` collection [Forum#70500](https://xcp-ng.org/forum/post/70500) +- [REST API] Add `/groups/:id/users` and `/users/:id/groups` collection [Forum#70500](https://xcp-ng.org/forum/post/70500) ### Bug fixes diff --git a/packages/xo-server/src/xo-mixins/rest-api.mjs b/packages/xo-server/src/xo-mixins/rest-api.mjs index dbd285b3f..6d4c17f4f 100644 --- a/packages/xo-server/src/xo-mixins/rest-api.mjs +++ b/packages/xo-server/src/xo-mixins/rest-api.mjs @@ -326,6 +326,21 @@ export default class RestApi { async getObjects(filter, limit) { return handleArray(await app.getAllGroups(), filter, limit) }, + routes: { + async users(req, res) { + const { filter, limit } = req.query + await sendObjects( + handleArray( + await Promise.all(req.object.users.map(id => app.getUser(id).then(getUserPublicProperties))), + handleOptionalUserFilter(filter), + ifDef(limit, Number) + ), + req, + res, + '/users' + ) + }, + }, } collections.restore = {} collections.tasks = {} @@ -336,6 +351,21 @@ export default class RestApi { async getObjects(filter, limit) { return handleArray(await app.getAllUsers(), filter, limit) }, + routes: { + async groups(req, res) { + const { filter, limit } = req.query + await sendObjects( + handleArray( + await Promise.all(req.object.groups.map(id => app.getGroup(id))), + handleOptionalUserFilter(filter), + ifDef(limit, Number) + ), + req, + res, + '/groups' + ) + }, + }, } // normalize collections