1
0
mirror of https://github.com/bitwarden/directory-connector synced 2025-12-05 23:53:21 +00:00

Improve okta group performance (#132)

* Avoid unnecessary API calls to Okta

Filter excluded/included groups as early as possible to avoid using up
API calls and long waits

* Remove console timing calls
This commit is contained in:
Matt Gibson
2021-06-11 11:10:29 -05:00
committed by GitHub
parent 6097bca063
commit 5d3fa0a0d2

View File

@@ -14,9 +14,12 @@ import { LogService } from 'jslib-common/abstractions/log.service';
import * as https from 'https';
const DelayBetweenBuildGroupCallsInMilliseconds = 500;
export class OktaDirectoryService extends BaseDirectoryService implements IDirectoryService {
private dirConfig: OktaConfiguration;
private syncConfig: SyncConfiguration;
private lastBuildGroupCall: number;
constructor(private configurationService: ConfigurationService, private logService: LogService,
private i18nService: I18nService) {
@@ -116,13 +119,11 @@ export class OktaDirectoryService extends BaseDirectoryService implements IDirec
this.logService.info('Querying groups.');
await this.apiGetMany('groups?filter=' + this.encodeUrlParameter(oktaFilter)).then(async (groups: any[]) => {
for (const group of groups) {
for (const group of groups.filter(g => !this.filterOutResult(setFilter, g.profile.name))) {
const entry = await this.buildGroup(group);
if (entry != null && !this.filterOutResult(setFilter, entry.name)) {
if (entry != null) {
entries.push(entry);
}
// throttle some to avoid rate limiting
await new Promise(resolve => setTimeout(resolve, 500));
}
});
return entries;
@@ -134,6 +135,14 @@ export class OktaDirectoryService extends BaseDirectoryService implements IDirec
entry.referenceId = group.id;
entry.name = group.profile.name;
// throttle some to avoid rate limiting
const neededDelay = DelayBetweenBuildGroupCallsInMilliseconds - (Date.now() - this.lastBuildGroupCall);
if (neededDelay > 0) {
await new Promise(resolve =>
setTimeout(resolve, neededDelay));
}
this.lastBuildGroupCall = Date.now();
await this.apiGetMany('groups/' + group.id + '/users').then((users: any[]) => {
for (const user of users) {
entry.userMemberExternalIds.add(user.id);