mirror of
https://github.com/bitwarden/directory-connector
synced 2025-12-05 23:53:21 +00:00
Manage multiple pages when fetching users (#15)
This commit is contained in:
committed by
Kyle Spearrin
parent
d7412410f2
commit
bcf16562fe
@@ -67,46 +67,62 @@ export class GSuiteDirectoryService extends BaseDirectoryService implements Dire
|
||||
private async getUsers(): Promise<UserEntry[]> {
|
||||
const entries: UserEntry[] = [];
|
||||
const query = this.createDirectoryQuery(this.syncConfig.userFilter);
|
||||
let nextPageToken;
|
||||
let p = Object.assign({});
|
||||
|
||||
this.logService.info('Querying users.');
|
||||
let p = Object.assign({ query: query }, this.authParams);
|
||||
const res = await this.service.users.list(p);
|
||||
if (res.status !== 200) {
|
||||
throw new Error('User list API failed: ' + res.statusText);
|
||||
}
|
||||
while (true) {
|
||||
this.logService.info('Querying users - nextPageToken:' + nextPageToken);
|
||||
p = Object.assign({ query: query, pageToken: nextPageToken }, this.authParams);
|
||||
const res = await this.service.users.list(p);
|
||||
if (res.status !== 200) {
|
||||
throw new Error('User list API failed: ' + res.statusText);
|
||||
}
|
||||
|
||||
const filter = this.createCustomSet(this.syncConfig.userFilter);
|
||||
if (res.data.users != null) {
|
||||
for (const user of res.data.users) {
|
||||
if (this.filterOutResult(filter, user.primaryEmail)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const entry = this.buildUser(user, false);
|
||||
if (entry != null) {
|
||||
entries.push(entry);
|
||||
const filter = this.createCustomSet(this.syncConfig.userFilter);
|
||||
nextPageToken = res.data.nextPageToken;
|
||||
if (res.data.users != null) {
|
||||
for (const user of res.data.users) {
|
||||
if (this.filterOutResult(filter, user.primaryEmail)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const entry = this.buildUser(user, false);
|
||||
if (entry != null) {
|
||||
entries.push(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nextPageToken == null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.logService.info('Querying deleted users.');
|
||||
p = Object.assign({ showDeleted: true, query: query }, this.authParams);
|
||||
const delRes = await this.service.users.list(p);
|
||||
if (delRes.status !== 200) {
|
||||
throw new Error('Deleted user list API failed: ' + delRes.statusText);
|
||||
}
|
||||
nextPageToken = null;
|
||||
|
||||
if (delRes.data.users != null) {
|
||||
for (const user of delRes.data.users) {
|
||||
if (this.filterOutResult(filter, user.primaryEmail)) {
|
||||
continue;
|
||||
}
|
||||
while (true) {
|
||||
this.logService.info('Querying deleted users - nextPageToken:' + nextPageToken);
|
||||
p = Object.assign({ showDeleted: true, query: query, pageToken: nextPageToken }, this.authParams);
|
||||
const delRes = await this.service.users.list(p);
|
||||
if (delRes.status !== 200) {
|
||||
throw new Error('Deleted user list API failed: ' + delRes.statusText);
|
||||
}
|
||||
|
||||
const entry = this.buildUser(user, true);
|
||||
if (entry != null) {
|
||||
entries.push(entry);
|
||||
nextPageToken = delRes.data.nextPageToken;
|
||||
if (delRes.data.users != null) {
|
||||
for (const user of delRes.data.users) {
|
||||
if (this.filterOutResult(filter, user.primaryEmail)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const entry = this.buildUser(user, true);
|
||||
if (entry != null) {
|
||||
entries.push(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nextPageToken == null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return entries;
|
||||
|
||||
Reference in New Issue
Block a user