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