diff --git a/src/services/gsuite-directory.service.ts b/src/services/gsuite-directory.service.ts index 481e8f96..97ac08a7 100644 --- a/src/services/gsuite-directory.service.ts +++ b/src/services/gsuite-directory.service.ts @@ -122,7 +122,6 @@ export class GSuiteDirectoryService implements DirectoryService { entry.email = user.primaryEmail; entry.disabled = user.suspended || false; entry.deleted = deleted; - // entry.creationDate = user.creationTime; // TODO: string to date conversion return entry; } diff --git a/src/services/okta-directory.service.ts b/src/services/okta-directory.service.ts index 9d4d869e..db9e2f4f 100644 --- a/src/services/okta-directory.service.ts +++ b/src/services/okta-directory.service.ts @@ -56,13 +56,17 @@ export class OktaDirectoryService implements DirectoryService { private async getUsers(force: boolean): Promise { const entries: UserEntry[] = []; + const lastSync = await this.configurationService.getLastUserSyncDate(); + const filter = this.buildFilter(this.syncConfig.userFilter, force, lastSync); + this.logService.info('Querying users.'); - await this.client.listUsers().each((user: any) => { + await this.client.listUsers({ filter: filter }).each((user: any) => { const entry = this.buildUser(user); if (entry != null) { entries.push(entry); } }); + return entries; } @@ -78,8 +82,11 @@ export class OktaDirectoryService implements DirectoryService { private async getGroups(force: boolean): Promise { const entries: GroupEntry[] = []; + const lastSync = await this.configurationService.getLastGroupSyncDate(); + const filter = this.buildFilter(this.syncConfig.groupFilter, force, lastSync); + this.logService.info('Querying groups.'); - await this.client.listGroups().each((group: any) => { + await this.client.listGroups({ filter: filter }).each((group: any) => { const entry = this.buildGroup(group); if (entry != null) { entries.push(entry); @@ -95,4 +102,18 @@ export class OktaDirectoryService implements DirectoryService { entry.name = group.profile.name; return entry; } + + private buildFilter(baseFilter: string, force: boolean, lastSync: Date) { + baseFilter = baseFilter == null || baseFilter.trim() === '' ? null : baseFilter; + if (force || lastSync == null) { + return baseFilter; + } + + const updatedFilter = 'lastUpdated gt ' + lastSync.toISOString(); + if (baseFilter == null) { + return updatedFilter; + } + + return '(' + baseFilter + ') and ' + updatedFilter; + } }