diff --git a/.changeset/young-mice-shake.md b/.changeset/young-mice-shake.md new file mode 100644 index 0000000000..6acd0239c6 --- /dev/null +++ b/.changeset/young-mice-shake.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +Fix getGroupMembers with token that don't have sufficient permissions 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)