From d5907477dfbceb7d70fec476d8780186b878e131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elie=20M=C3=A9lois?= Date: Tue, 26 Mar 2019 11:58:05 +0000 Subject: [PATCH] Manage multiple pages when fetching groups (#14) --- src/services/gsuite-directory.service.ts | 31 ++++++++++++++++-------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/services/gsuite-directory.service.ts b/src/services/gsuite-directory.service.ts index 2e94d0e1..ca37c54e 100644 --- a/src/services/gsuite-directory.service.ts +++ b/src/services/gsuite-directory.service.ts @@ -128,19 +128,30 @@ export class GSuiteDirectoryService extends BaseDirectoryService implements Dire private async getGroups(setFilter: [boolean, Set]): Promise { const entries: GroupEntry[] = []; + let nextPageToken; + let p = Object.assign({}); - this.logService.info('Querying groups.'); - const res = await this.service.groups.list(this.authParams); - if (res.status !== 200) { - throw new Error('Group list API failed: ' + res.statusText); - } - if (res.data.groups != null) { - for (const group of res.data.groups) { - if (!this.filterOutResult(setFilter, group.name)) { - const entry = await this.buildGroup(group); - entries.push(entry); + while(true) { + this.logService.info('Querying groups - nextPageToken:' + nextPageToken); + + p = Object.assign({ pageToken: nextPageToken }, this.authParams); + const res = await this.service.groups.list(p); + nextPageToken = res.data.nextPageToken; + + if (res.status !== 200) { + throw new Error('Group list API failed: ' + res.statusText); + } + if (res.data.groups != null) { + for (const group of res.data.groups) { + if (!this.filterOutResult(setFilter, group.name)) { + const entry = await this.buildGroup(group); + entries.push(entry); + } } } + if (nextPageToken == null) { + break; + } } return entries;