From 647d2cc8fddb2a38288120e523a925d8fc355bfd Mon Sep 17 00:00:00 2001 From: Boris Gershanik Date: Wed, 14 Jun 2023 17:57:04 +0300 Subject: [PATCH] Fix getGroupMembers with token that don't have sufficient permissions Signed-off-by: Boris Gershanik --- .../src/lib/client.test.ts | 22 +++++++++++++++++++ .../src/lib/client.ts | 8 +++++++ 2 files changed, 30 insertions(+) diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts index 122aae7f54..f4504e8937 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts @@ -429,6 +429,28 @@ describe('GitLabClient', () => { expect(members).toEqual([1]); }); + it('gets member IDs with token without full permissions', async () => { + server.use( + graphql + .link(`${MOCK_CONFIG.baseUrl}/api/graphql`) + .operation((_, res, ctx) => + res( + ctx.data({ + group: {}, + }), + ), + ), + ); + const client = new GitLabClient({ + config: MOCK_CONFIG, + logger: getVoidLogger(), + }); + + const members = await client.getGroupMembers('group1'); + + expect(members).toEqual([]); + }); + it('rejects when GraphQL returns errors', async () => { server.use( graphql diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.ts index 46932c95c6..f0e169d8df 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.ts @@ -127,6 +127,14 @@ export class GitLabClient { if (response.errors) { throw new Error(`GraphQL errors: ${JSON.stringify(response.errors)}`); } + + if (!response.data.group?.groupMembers?.nodes) { + this.logger.warn( + `Couldn't get members for group ${groupPath}. The provided token might not have sufficient permissions`, + ); + continue; + } + memberIds.push( ...response.data.group.groupMembers.nodes .filter(n => n.user)