mirror of
https://github.com/bitwarden/directory-connector
synced 2026-01-20 09:23:25 +00:00
* Groups that reference all users in an organisation were not being populated They now are, based on the "customer" member type. The null check for member.status is now not required as the property was only null for groups and now that comparison will not occur. * If the user is not configured to sync users, but is syncing groups this errored with "users is not iterable" * Update gsuite-directory.service.ts Co-authored-by: Kyle Spearrin <kspearrin@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
150164534f
commit
4eb9c9bd4d
@@ -49,7 +49,7 @@ export class GSuiteDirectoryService extends BaseDirectoryService implements Dire
|
||||
|
||||
await this.auth();
|
||||
|
||||
let users: UserEntry[];
|
||||
let users: UserEntry[] = [];
|
||||
if (this.syncConfig.users) {
|
||||
users = await this.getUsers();
|
||||
}
|
||||
@@ -57,7 +57,7 @@ export class GSuiteDirectoryService extends BaseDirectoryService implements Dire
|
||||
let groups: GroupEntry[];
|
||||
if (this.syncConfig.groups) {
|
||||
const setFilter = this.createCustomSet(this.syncConfig.groupFilter);
|
||||
groups = await this.getGroups(setFilter);
|
||||
groups = await this.getGroups(setFilter, users);
|
||||
users = this.filterUsersFromGroupsSet(users, groups, setFilter, this.syncConfig);
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ export class GSuiteDirectoryService extends BaseDirectoryService implements Dire
|
||||
return entry;
|
||||
}
|
||||
|
||||
private async getGroups(setFilter: [boolean, Set<string>]): Promise<GroupEntry[]> {
|
||||
private async getGroups(setFilter: [boolean, Set<string>], users: UserEntry[]): Promise<GroupEntry[]> {
|
||||
const entries: GroupEntry[] = [];
|
||||
let nextPageToken: string = null;
|
||||
|
||||
@@ -156,7 +156,7 @@ export class GSuiteDirectoryService extends BaseDirectoryService implements Dire
|
||||
if (res.data.groups != null) {
|
||||
for (const group of res.data.groups) {
|
||||
if (!this.filterOutResult(setFilter, group.name)) {
|
||||
const entry = await this.buildGroup(group);
|
||||
const entry = await this.buildGroup(group, users);
|
||||
entries.push(entry);
|
||||
}
|
||||
}
|
||||
@@ -170,7 +170,7 @@ export class GSuiteDirectoryService extends BaseDirectoryService implements Dire
|
||||
return entries;
|
||||
}
|
||||
|
||||
private async buildGroup(group: admin_directory_v1.Schema$Group) {
|
||||
private async buildGroup(group: admin_directory_v1.Schema$Group, users: UserEntry[]) {
|
||||
let nextPageToken: string = null;
|
||||
|
||||
const entry = new GroupEntry();
|
||||
@@ -192,15 +192,18 @@ export class GSuiteDirectoryService extends BaseDirectoryService implements Dire
|
||||
if (member.type == null) {
|
||||
continue;
|
||||
}
|
||||
if (member.status == null || member.status.toLowerCase() !== 'active') {
|
||||
continue;
|
||||
}
|
||||
|
||||
const type = member.type.toLowerCase();
|
||||
if (type === 'user') {
|
||||
if (member.status == null || member.status.toLowerCase() !== 'active') {
|
||||
continue;
|
||||
}
|
||||
entry.userMemberExternalIds.add(member.id);
|
||||
} else if (type === 'group') {
|
||||
entry.groupMemberReferenceIds.add(member.id);
|
||||
} else if (type === 'customer') {
|
||||
for (let user of users) {
|
||||
entry.userMemberExternalIds.add(user.externalId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user