From 6cd4e06d91d9f74f0c49256b64f2e819d1b7efb5 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 10:55:03 +0200 Subject: [PATCH 01/10] passing select attr to the getUsers Signed-off-by: Luka Siric --- .../catalog-backend-module-msgraph/src/microsoftGraph/read.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts index ecf74b34d9..0542e4fd8e 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts @@ -89,6 +89,7 @@ export async function readMicrosoftGraphUsers( queryMode?: 'basic' | 'advanced'; userFilter?: string; userExpand?: string; + userSelect?: string[]; transformer?: UserTransformer; logger: Logger; }, @@ -105,6 +106,7 @@ export async function readMicrosoftGraphUsers( { filter: options.userFilter, expand: options.userExpand, + select: options.userSelect || [], }, options.queryMode, )) { From b38f4cc987cbdad737b38e6a38b53a320329dc58 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 11:04:56 +0200 Subject: [PATCH 02/10] updated readme Signed-off-by: Luka Siric --- plugins/catalog-backend-module-msgraph/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/catalog-backend-module-msgraph/README.md b/plugins/catalog-backend-module-msgraph/README.md index fe2e568b5a..9bf979f6a6 100644 --- a/plugins/catalog-backend-module-msgraph/README.md +++ b/plugins/catalog-backend-module-msgraph/README.md @@ -54,6 +54,8 @@ catalog: # and for the syntax https://docs.microsoft.com/en-us/graph/query-parameters#filter-parameter # This and userGroupMemberFilter are mutually exclusive, only one can be specified filter: accountEnabled eq true and userType eq 'member' + # See https://docs.microsoft.com/en-us/graph/api/resources/schemaextension?view=graph-rest-1.0 + select: ['id', 'displayName', 'description'] # Optional configuration block userGroupMember: # Optional filter for users, use group membership to get users. From d80aab31aed670120da2d7199639e857b1bceae5 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 11:06:09 +0200 Subject: [PATCH 03/10] added changeset Signed-off-by: Luka Siric --- .changeset/cuddly-clocks-dance.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cuddly-clocks-dance.md diff --git a/.changeset/cuddly-clocks-dance.md b/.changeset/cuddly-clocks-dance.md new file mode 100644 index 0000000000..1a9c05bf20 --- /dev/null +++ b/.changeset/cuddly-clocks-dance.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': minor +--- + +Added $select attribute to user query From ced29ddfeea99060825bd40af144dddc08f29f8e Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 13:48:39 +0200 Subject: [PATCH 04/10] passing userSelect to the readMicrosoftGraphOrg Signed-off-by: Luka Siric --- .../src/microsoftGraph/read.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts index 0542e4fd8e..8e1d9a3776 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts @@ -106,7 +106,7 @@ export async function readMicrosoftGraphUsers( { filter: options.userFilter, expand: options.userExpand, - select: options.userSelect || [], + select: options.userSelect, }, options.queryMode, )) { @@ -147,6 +147,7 @@ export async function readMicrosoftGraphUsersInGroups( options: { queryMode?: 'basic' | 'advanced'; userExpand?: string; + userSelect?: string[]; userGroupMemberSearch?: string; userGroupMemberFilter?: string; groupExpand?: string; @@ -536,6 +537,7 @@ export async function readMicrosoftGraphOrg( options: { userExpand?: string; userFilter?: string; + userSelect?: string[]; userGroupMemberSearch?: string; userGroupMemberFilter?: string; groupExpand?: string; @@ -567,6 +569,7 @@ export async function readMicrosoftGraphOrg( const { users: usersWithFilter } = await readMicrosoftGraphUsers(client, { queryMode: options.queryMode, userFilter: options.userFilter, + userSelect: options.userSelect, userExpand: options.userExpand, transformer: options.userTransformer, logger: options.logger, From e821a3db3d132696a8ea27f9bd6eb3bb33f4db6c Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 13:49:02 +0200 Subject: [PATCH 05/10] added unit test for userSelect option Signed-off-by: Luka Siric --- .../src/microsoftGraph/read.test.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts index 3f43807809..7fe98cf1cf 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts @@ -1002,6 +1002,12 @@ describe('read microsoft graph', () => { }; } + async function* getExampleUsersEmail() { + yield { + mail: 'user.name@example.com', + }; + } + async function getExampleUserProfile(userId: string) { return { id: userId, @@ -1109,6 +1115,37 @@ describe('read microsoft graph', () => { ); }); + it('should read users with userSelect', async () => { + client.getOrganization.mockResolvedValue({ + id: 'tenantid', + displayName: 'Organization Name', + }); + + client.getUsers.mockImplementation(getExampleUsersEmail); + client.getUserPhotoWithSizeLimit.mockResolvedValue( + 'data:image/jpeg;base64,...', + ); + + client.getGroups.mockImplementation(getExampleGroups); + client.getGroupMembers.mockImplementation(getExampleGroupMembers); + client.getGroupPhotoWithSizeLimit.mockResolvedValue( + 'data:image/jpeg;base64,...', + ); + + await readMicrosoftGraphOrg(client, 'tenantid', { + logger: getVoidLogger(), + userSelect: ['mail'], + }); + + expect(client.getUsers).toHaveBeenCalledTimes(1); + expect(client.getUsers).toHaveBeenCalledWith( + { + select: ['mail'], + }, + undefined, + ); + }); + it('should read users using userExpand and userGroupMemberFilter', async () => { client.getOrganization.mockResolvedValue({ id: 'tenantid', From 86b22c7d5dac2126fc18a1878b6edeb4642d89a0 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 13:50:17 +0200 Subject: [PATCH 06/10] removed unused mock getGroupPhotoWithSizeLimit Signed-off-by: Luka Siric --- .../src/microsoftGraph/read.test.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts index 7fe98cf1cf..a537526a9e 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts @@ -1128,9 +1128,6 @@ describe('read microsoft graph', () => { client.getGroups.mockImplementation(getExampleGroups); client.getGroupMembers.mockImplementation(getExampleGroupMembers); - client.getGroupPhotoWithSizeLimit.mockResolvedValue( - 'data:image/jpeg;base64,...', - ); await readMicrosoftGraphOrg(client, 'tenantid', { logger: getVoidLogger(), From 8948d577426a72bdca102f7e0ebfcd27d822f4ae Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 14:19:19 +0200 Subject: [PATCH 07/10] generated new api report for catalog-backend-module-msgraph Signed-off-by: Luka Siric --- plugins/catalog-backend-module-msgraph/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 8f773e1b90..2a244c60d8 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -232,6 +232,7 @@ export function readMicrosoftGraphOrg( options: { userExpand?: string; userFilter?: string; + userSelect?: string[]; userGroupMemberSearch?: string; userGroupMemberFilter?: string; groupExpand?: string; From 852ebeeb24fcc62aeed8b5e6bd67f371347becf3 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 14:33:31 +0200 Subject: [PATCH 08/10] added userSelect attribute to config Signed-off-by: Luka Siric --- plugins/catalog-backend-module-msgraph/config.d.ts | 6 ++++++ .../src/microsoftGraph/config.ts | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/plugins/catalog-backend-module-msgraph/config.d.ts b/plugins/catalog-backend-module-msgraph/config.d.ts index 8748df5974..df41b581f9 100644 --- a/plugins/catalog-backend-module-msgraph/config.d.ts +++ b/plugins/catalog-backend-module-msgraph/config.d.ts @@ -74,6 +74,12 @@ export interface Config { * E.g. "securityEnabled eq false and mailEnabled eq true" */ groupFilter?: string; + /** + * The fields to be fetched on query. + * + * E.g. ["id", "displayName", "description"] + */ + userSelect?: string[]; /** * The search criteria to apply to extract users by groups memberships. * diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts index f7675acf42..2429b67c89 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts @@ -62,6 +62,12 @@ export type MicrosoftGraphProviderConfig = { * E.g. "accountEnabled eq true and userType eq 'member'" */ userFilter?: string; + /** + * The fields to be fetched on query. + * + * E.g. ["id", "displayName", "description"] + */ + userSelect?: string[]; /** * The "expand" argument to apply to users. * @@ -144,6 +150,7 @@ export function readMicrosoftGraphConfig( const userExpand = providerConfig.getOptionalString('userExpand'); const userFilter = providerConfig.getOptionalString('userFilter'); + const userSelect = providerConfig.getOptionalStringArray('userSelect'); const userGroupMemberFilter = providerConfig.getOptionalString( 'userGroupMemberFilter', ); @@ -196,6 +203,7 @@ export function readMicrosoftGraphConfig( clientSecret, userExpand, userFilter, + userSelect, userGroupMemberFilter, userGroupMemberSearch, groupExpand, From b6af632b83bed51b6d60bd79fe64e9d4c9103557 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 15:30:48 +0200 Subject: [PATCH 09/10] generated new api report for catalog-backend-module-msgraph Signed-off-by: Luka Siric --- plugins/catalog-backend-module-msgraph/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 2a244c60d8..8b77ddf7c3 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -193,6 +193,7 @@ export type MicrosoftGraphProviderConfig = { clientId?: string; clientSecret?: string; userFilter?: string; + userSelect?: string[]; userExpand?: string; userGroupMemberFilter?: string; userGroupMemberSearch?: string; From df1e0d44bfa565ba54e9c01739d06931cdb0fd7a Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Thu, 8 Sep 2022 09:18:26 +0200 Subject: [PATCH 10/10] Update .changeset/cuddly-clocks-dance.md changed plugin-catalog-backend-module-msgraph change to "patch" Co-authored-by: Patrik Oldsberg Signed-off-by: Luka Siric --- .changeset/cuddly-clocks-dance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/cuddly-clocks-dance.md b/.changeset/cuddly-clocks-dance.md index 1a9c05bf20..9d33535a62 100644 --- a/.changeset/cuddly-clocks-dance.md +++ b/.changeset/cuddly-clocks-dance.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-backend-module-msgraph': minor +'@backstage/plugin-catalog-backend-module-msgraph': patch --- Added $select attribute to user query