Merge pull request #6855 from backstage/freben/msgraph-user-transform

Support passing a UserTransformer through the processor to the reader
This commit is contained in:
Fredrik Adelöw
2021-08-18 08:38:43 +02:00
committed by GitHub
5 changed files with 62 additions and 1 deletions
@@ -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;
},
@@ -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', () => {
@@ -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 } =
@@ -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,
},