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:
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user