Support passing a UserTransformer through the processor to the reader
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-msgraph': patch
|
||||
---
|
||||
|
||||
Pass along a `UserTransformer` to the read step
|
||||
@@ -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 } =
|
||||
|
||||
+10
-1
@@ -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,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user