diff --git a/.changeset/shy-pets-join.md b/.changeset/shy-pets-join.md new file mode 100644 index 0000000000..ba39dfd4f4 --- /dev/null +++ b/.changeset/shy-pets-join.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': patch +--- + +Pass along a `UserTransformer` to the read step diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 91f8180e94..f614bdca36 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -111,6 +111,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { constructor(options: { providers: MicrosoftGraphProviderConfig[]; logger: Logger_2; + userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; }); // (undocumented) @@ -118,6 +119,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { config: Config, options: { logger: Logger_2; + userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; }, ): MicrosoftGraphOrgReaderProcessor; @@ -170,6 +172,7 @@ export function readMicrosoftGraphOrg( options: { userFilter?: string; groupFilter?: string; + userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; logger: Logger_2; }, 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 68f7e216ea..82279b76c6 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts @@ -114,6 +114,48 @@ describe('read microsoft graph', () => { expect(client.getUserPhotoWithSizeLimit).toBeCalledTimes(1); expect(client.getUserPhotoWithSizeLimit).toBeCalledWith('userid', 120); }); + + it('should read users with custom transformer', async () => { + async function* getExampleUsers() { + yield { + id: 'userid', + displayName: 'User Name', + mail: 'user.name@example.com', + }; + } + + client.getUsers.mockImplementation(getExampleUsers); + client.getUserPhotoWithSizeLimit.mockResolvedValue( + 'data:image/jpeg;base64,...', + ); + + const { users } = await readMicrosoftGraphUsers(client, { + userFilter: 'accountEnabled eq true', + transformer: async () => ({ + apiVersion: 'backstage.io/v1alpha1', + kind: 'User', + metadata: { name: 'x' }, + spec: { memberOf: [] }, + }), + logger: getVoidLogger(), + }); + + expect(users).toEqual([ + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'User', + metadata: { name: 'x' }, + spec: { memberOf: [] }, + }, + ]); + + expect(client.getUsers).toBeCalledTimes(1); + expect(client.getUsers).toBeCalledWith({ + filter: 'accountEnabled eq true', + }); + expect(client.getUserPhotoWithSizeLimit).toBeCalledTimes(1); + expect(client.getUserPhotoWithSizeLimit).toBeCalledWith('userid', 120); + }); }); describe('readMicrosoftGraphOrganization', () => { diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts index 62513b0e10..6fbd2cb0de 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts @@ -382,12 +382,14 @@ export async function readMicrosoftGraphOrg( options: { userFilter?: string; groupFilter?: string; + userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; logger: Logger; }, ): Promise<{ users: UserEntity[]; groups: GroupEntity[] }> { const { users } = await readMicrosoftGraphUsers(client, { userFilter: options.userFilter, + transformer: options.userTransformer, logger: options.logger, }); const { groups, rootGroup, groupMember, groupMemberOf } = diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts index 88240db618..1495bce93c 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts @@ -28,6 +28,7 @@ import { MicrosoftGraphProviderConfig, readMicrosoftGraphConfig, readMicrosoftGraphOrg, + UserTransformer, } from '../microsoftGraph'; /** @@ -36,11 +37,16 @@ import { export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { private readonly providers: MicrosoftGraphProviderConfig[]; private readonly logger: Logger; + private readonly userTransformer?: UserTransformer; private readonly groupTransformer?: GroupTransformer; static fromConfig( config: Config, - options: { logger: Logger; groupTransformer?: GroupTransformer }, + options: { + logger: Logger; + userTransformer?: UserTransformer; + groupTransformer?: GroupTransformer; + }, ) { const c = config.getOptionalConfig('catalog.processors.microsoftGraphOrg'); return new MicrosoftGraphOrgReaderProcessor({ @@ -52,10 +58,12 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { constructor(options: { providers: MicrosoftGraphProviderConfig[]; logger: Logger; + userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; }) { this.providers = options.providers; this.logger = options.logger; + this.userTransformer = options.userTransformer; this.groupTransformer = options.groupTransformer; } @@ -89,6 +97,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { { userFilter: provider.userFilter, groupFilter: provider.groupFilter, + userTransformer: this.userTransformer, groupTransformer: this.groupTransformer, logger: this.logger, },