Merge pull request #13553 from lsiric/feature/pass-select-attr-to-msgraph-user-import

Feature/pass select attr to msgraph user import
This commit is contained in:
Patrik Oldsberg
2022-09-13 10:49:30 +02:00
committed by GitHub
7 changed files with 62 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-msgraph': patch
---
Added $select attribute to user query
@@ -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.
@@ -193,6 +193,7 @@ export type MicrosoftGraphProviderConfig = {
clientId?: string;
clientSecret?: string;
userFilter?: string;
userSelect?: string[];
userExpand?: string;
userGroupMemberFilter?: string;
userGroupMemberSearch?: string;
@@ -232,6 +233,7 @@ export function readMicrosoftGraphOrg(
options: {
userExpand?: string;
userFilter?: string;
userSelect?: string[];
userGroupMemberSearch?: string;
userGroupMemberFilter?: string;
groupExpand?: string;
+6
View File
@@ -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.
*
@@ -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,
@@ -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,34 @@ 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);
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',
@@ -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,
)) {
@@ -145,6 +147,7 @@ export async function readMicrosoftGraphUsersInGroups(
options: {
queryMode?: 'basic' | 'advanced';
userExpand?: string;
userSelect?: string[];
userGroupMemberSearch?: string;
userGroupMemberFilter?: string;
groupExpand?: string;
@@ -534,6 +537,7 @@ export async function readMicrosoftGraphOrg(
options: {
userExpand?: string;
userFilter?: string;
userSelect?: string[];
userGroupMemberSearch?: string;
userGroupMemberFilter?: string;
groupExpand?: string;
@@ -565,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,