diff --git a/.changeset/forty-pumpkins-marry.md b/.changeset/forty-pumpkins-marry.md new file mode 100644 index 0000000000..782fb5ae91 --- /dev/null +++ b/.changeset/forty-pumpkins-marry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': patch +--- + +Now plugin configuration accept a new optional parameter `groupSelect` which allow the client to fetch defined fields from the ms-graph api. diff --git a/plugins/catalog-backend-module-msgraph/README.md b/plugins/catalog-backend-module-msgraph/README.md index 1fd5fc3f19..e6429152e4 100644 --- a/plugins/catalog-backend-module-msgraph/README.md +++ b/plugins/catalog-backend-module-msgraph/README.md @@ -72,6 +72,9 @@ catalog: # Optional search for groups, see Microsoft Graph API for the syntax # See https://docs.microsoft.com/en-us/graph/search-query-parameter groupSearch: '"description:One" AND ("displayName:Video" OR "displayName:Drive")' + # Optional select for groups, this will allow you work with schemaExtensions in order to add extra information to your groups that can be used on you custom groupTransformers + # See https://docs.microsoft.com/en-us/graph/api/resources/schemaextension?view=graph-rest-1.0 + groupSelect: ['id', 'displayName', 'description'] ``` `userFilter` and `userGroupMemberFilter` are mutually exclusive, only one can be provided. If both are provided, an error will be thrown. diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 2e741e65fe..2239ec1332 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -182,6 +182,7 @@ export type MicrosoftGraphProviderConfig = { groupExpand?: string; groupFilter?: string; groupSearch?: string; + groupSelect?: string[]; queryMode?: 'basic' | 'advanced'; }; @@ -219,6 +220,7 @@ export function readMicrosoftGraphOrg( groupExpand?: string; groupSearch?: string; groupFilter?: string; + groupSelect?: string[]; queryMode?: 'basic' | 'advanced'; userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; diff --git a/plugins/catalog-backend-module-msgraph/config.d.ts b/plugins/catalog-backend-module-msgraph/config.d.ts index db5ab81c4b..cf00713e72 100644 --- a/plugins/catalog-backend-module-msgraph/config.d.ts +++ b/plugins/catalog-backend-module-msgraph/config.d.ts @@ -79,6 +79,14 @@ export interface Config { * E.g. "\"displayName:-team\"" would only match groups which contain '-team' */ groupSearch?: string; + + /** + * The fields to be fetched on query. + * + * E.g. ["id", "displayName", "description"] + */ + groupSelect?: string[]; + /** * The filter to apply to extract users by groups memberships. * diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts index 34796fb29a..e310fa544f 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts @@ -56,6 +56,7 @@ describe('readMicrosoftGraphConfig', () => { userExpand: 'manager', userFilter: 'accountEnabled eq true', groupExpand: 'member', + groupSelect: ['id', 'displayName', 'description'], groupFilter: 'securityEnabled eq false', }, ], @@ -71,6 +72,7 @@ describe('readMicrosoftGraphConfig', () => { userExpand: 'manager', userFilter: 'accountEnabled eq true', groupExpand: 'member', + groupSelect: ['id', 'displayName', 'description'], groupFilter: 'securityEnabled eq false', }, ]; diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts index 441892531a..aa2f2d6ee2 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts @@ -88,6 +88,14 @@ export type MicrosoftGraphProviderConfig = { * E.g. "\"displayName:-team\"" would only match groups which contain '-team' */ groupSearch?: string; + + /** + * The fields to be fetched on query. + * + * E.g. ["id", "displayName", "description"] + */ + groupSelect?: string[]; + /** * By default, the Microsoft Graph API only provides the basic feature set * for querying. Certain features are limited to advanced query capabilities @@ -145,6 +153,7 @@ export function readMicrosoftGraphConfig( ); } + const groupSelect = providerConfig.getOptionalStringArray('groupSelect'); const queryMode = providerConfig.getOptionalString('queryMode'); if ( queryMode !== undefined && @@ -167,6 +176,7 @@ export function readMicrosoftGraphConfig( groupExpand, groupFilter, groupSearch, + groupSelect, queryMode, }); } diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts index e9760f7698..de7f3e49e0 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts @@ -343,6 +343,7 @@ export async function readMicrosoftGraphGroups( groupExpand?: string; groupFilter?: string; groupSearch?: string; + groupSelect?: string[]; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; }, @@ -373,6 +374,7 @@ export async function readMicrosoftGraphGroups( expand: options?.groupExpand, search: options?.groupSearch, filter: options?.groupFilter, + select: options?.groupSelect, }, options?.queryMode, )) { @@ -535,6 +537,7 @@ export async function readMicrosoftGraphOrg( groupExpand?: string; groupSearch?: string; groupFilter?: string; + groupSelect?: string[]; queryMode?: 'basic' | 'advanced'; userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; @@ -571,6 +574,7 @@ export async function readMicrosoftGraphOrg( queryMode: options.queryMode, groupSearch: options.groupSearch, groupFilter: options.groupFilter, + groupSelect: options.groupSelect, groupTransformer: options.groupTransformer, organizationTransformer: options.organizationTransformer, }); diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts index dfd0a7782e..d96faf8e03 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts @@ -176,7 +176,6 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { const provider = this.options.provider; const { markReadComplete } = trackProgress(logger); const client = MicrosoftGraphClient.create(this.options.provider); - const { users, groups } = await readMicrosoftGraphOrg( client, provider.tenantId, @@ -186,6 +185,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { userGroupMemberSearch: provider.userGroupMemberSearch, groupFilter: provider.groupFilter, groupSearch: provider.groupSearch, + groupSelect: provider.groupSelect, queryMode: provider.queryMode, groupTransformer: this.options.groupTransformer, userTransformer: this.options.userTransformer, diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts index 5d8619e874..5d0e6b2ec7 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts @@ -113,6 +113,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { groupExpand: provider.groupExpand, groupFilter: provider.groupFilter, groupSearch: provider.groupSearch, + groupSelect: provider.groupSelect, queryMode: provider.queryMode, userTransformer: this.userTransformer, groupTransformer: this.groupTransformer,