@boxyhq/saml-jackson 1.9.11 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controller/api.d.ts +9 -0
- package/dist/controller/api.js +14 -0
- package/dist/controller/api.js.map +1 -1
- package/dist/controller/connection/oidc.js +8 -0
- package/dist/controller/connection/oidc.js.map +1 -1
- package/dist/controller/connection/saml.js +8 -0
- package/dist/controller/connection/saml.js.map +1 -1
- package/dist/controller/utils.d.ts +3 -1
- package/dist/controller/utils.js +3 -1
- package/dist/controller/utils.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonIndex.js +2 -3
- package/dist/db/planetscale/entity/JacksonIndex.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonStore.js +2 -3
- package/dist/db/planetscale/entity/JacksonStore.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonTTL.js +2 -3
- package/dist/db/planetscale/entity/JacksonTTL.js.map +1 -1
- package/dist/db/redis.js +16 -26
- package/dist/db/redis.js.map +1 -1
- package/dist/db/sql/entity/JacksonIndex.js +2 -3
- package/dist/db/sql/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/entity/JacksonStore.js +2 -3
- package/dist/db/sql/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/entity/JacksonTTL.js +2 -3
- package/dist/db/sql/entity/JacksonTTL.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonIndex.js +2 -3
- package/dist/db/sql/mariadb/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonStore.js +2 -3
- package/dist/db/sql/mariadb/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonTTL.js +2 -3
- package/dist/db/sql/mariadb/entity/JacksonTTL.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonIndex.js +2 -3
- package/dist/db/sql/mssql/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonStore.js +2 -3
- package/dist/db/sql/mssql/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonTTL.js +2 -3
- package/dist/db/sql/mssql/entity/JacksonTTL.js.map +1 -1
- package/dist/directory-sync/index.d.ts +10 -8
- package/dist/directory-sync/index.js +22 -12
- package/dist/directory-sync/index.js.map +1 -1
- package/dist/directory-sync/non-scim/google/api.d.ts +48 -0
- package/dist/directory-sync/non-scim/google/api.js +147 -0
- package/dist/directory-sync/non-scim/google/api.js.map +1 -0
- package/dist/directory-sync/non-scim/google/index.d.ts +12 -0
- package/dist/directory-sync/non-scim/google/index.js +14 -0
- package/dist/directory-sync/non-scim/google/index.js.map +1 -0
- package/dist/directory-sync/non-scim/google/oauth.d.ts +27 -0
- package/dist/directory-sync/non-scim/google/oauth.js +109 -0
- package/dist/directory-sync/non-scim/google/oauth.js.map +1 -0
- package/dist/directory-sync/non-scim/index.d.ts +10 -0
- package/dist/directory-sync/non-scim/index.js +51 -0
- package/dist/directory-sync/non-scim/index.js.map +1 -0
- package/dist/directory-sync/non-scim/syncGroupMembers.d.ts +23 -0
- package/dist/directory-sync/non-scim/syncGroupMembers.js +112 -0
- package/dist/directory-sync/non-scim/syncGroupMembers.js.map +1 -0
- package/dist/directory-sync/non-scim/syncGroups.d.ts +24 -0
- package/dist/directory-sync/non-scim/syncGroups.js +124 -0
- package/dist/directory-sync/non-scim/syncGroups.js.map +1 -0
- package/dist/directory-sync/non-scim/syncUsers.d.ts +24 -0
- package/dist/directory-sync/non-scim/syncUsers.js +124 -0
- package/dist/directory-sync/non-scim/syncUsers.js.map +1 -0
- package/dist/directory-sync/non-scim/utils.d.ts +36 -0
- package/dist/directory-sync/non-scim/utils.js +124 -0
- package/dist/directory-sync/non-scim/utils.js.map +1 -0
- package/dist/directory-sync/{Base.d.ts → scim/Base.d.ts} +1 -5
- package/dist/directory-sync/{Base.js → scim/Base.js} +3 -17
- package/dist/directory-sync/scim/Base.js.map +1 -0
- package/dist/directory-sync/{DirectoryConfig.d.ts → scim/DirectoryConfig.d.ts} +20 -27
- package/dist/directory-sync/{DirectoryConfig.js → scim/DirectoryConfig.js} +94 -48
- package/dist/directory-sync/scim/DirectoryConfig.js.map +1 -0
- package/dist/directory-sync/{DirectoryGroups.d.ts → scim/DirectoryGroups.d.ts} +8 -6
- package/dist/directory-sync/{DirectoryGroups.js → scim/DirectoryGroups.js} +8 -12
- package/dist/directory-sync/scim/DirectoryGroups.js.map +1 -0
- package/dist/directory-sync/{DirectoryUsers.d.ts → scim/DirectoryUsers.d.ts} +7 -5
- package/dist/directory-sync/{DirectoryUsers.js → scim/DirectoryUsers.js} +4 -3
- package/dist/directory-sync/scim/DirectoryUsers.js.map +1 -0
- package/dist/directory-sync/scim/Groups.d.ts +38 -0
- package/dist/directory-sync/{Groups.js → scim/Groups.js} +38 -29
- package/dist/directory-sync/scim/Groups.js.map +1 -0
- package/dist/directory-sync/scim/Users.d.ts +32 -0
- package/dist/directory-sync/{Users.js → scim/Users.js} +27 -25
- package/dist/directory-sync/scim/Users.js.map +1 -0
- package/dist/directory-sync/{WebhookEventsLogger.d.ts → scim/WebhookEventsLogger.d.ts} +1 -1
- package/dist/directory-sync/{WebhookEventsLogger.js → scim/WebhookEventsLogger.js} +3 -1
- package/dist/directory-sync/scim/WebhookEventsLogger.js.map +1 -0
- package/dist/directory-sync/{events.d.ts → scim/events.d.ts} +5 -3
- package/dist/directory-sync/{events.js → scim/events.js} +6 -4
- package/dist/directory-sync/scim/events.js.map +1 -0
- package/dist/directory-sync/{transform.d.ts → scim/transform.d.ts} +1 -1
- package/dist/directory-sync/scim/transform.js.map +1 -0
- package/dist/directory-sync/scim/utils.d.ts +33 -0
- package/dist/directory-sync/{utils.js → scim/utils.js} +8 -3
- package/dist/directory-sync/scim/utils.js.map +1 -0
- package/dist/directory-sync/types.d.ts +65 -13
- package/dist/directory-sync/types.js +3 -2
- package/dist/directory-sync/types.js.map +1 -1
- package/dist/typings.d.ts +18 -0
- package/package.json +15 -12
- package/dist/directory-sync/Base.js.map +0 -1
- package/dist/directory-sync/DirectoryConfig.js.map +0 -1
- package/dist/directory-sync/DirectoryGroups.js.map +0 -1
- package/dist/directory-sync/DirectoryUsers.js.map +0 -1
- package/dist/directory-sync/Groups.d.ts +0 -48
- package/dist/directory-sync/Groups.js.map +0 -1
- package/dist/directory-sync/Users.d.ts +0 -49
- package/dist/directory-sync/Users.js.map +0 -1
- package/dist/directory-sync/WebhookEventsLogger.js.map +0 -1
- package/dist/directory-sync/events.js.map +0 -1
- package/dist/directory-sync/transform.js.map +0 -1
- package/dist/directory-sync/utils.d.ts +0 -33
- package/dist/directory-sync/utils.js.map +0 -1
- /package/dist/directory-sync/{transform.js → scim/transform.js} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"JacksonTTL.js","sourceRoot":"","sources":["../../../../../src/db/sql/mariadb/entity/JacksonTTL.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAgD;
|
1
|
+
{"version":3,"file":"JacksonTTL.js","sourceRoot":"","sources":["../../../../../src/db/sql/mariadb/entity/JacksonTTL.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAgD;AAGzC,IAAM,UAAU,wBAAhB,MAAM,UAAU;CAatB,CAAA;AAPC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;uCACW;AAMb;IAJC,IAAA,eAAK,EAAC,yBAAyB,CAAC;IAChC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,QAAQ;KACf,CAAC;6CACiB;qBAZR,UAAU;IADtB,IAAA,gBAAM,GAAE;GACI,UAAU,CAatB"}
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.JacksonIndex = void 0;
|
10
10
|
const JacksonStore_1 = require("./JacksonStore");
|
11
11
|
const typeorm_1 = require("typeorm");
|
12
|
-
let JacksonIndex = class JacksonIndex {
|
12
|
+
let JacksonIndex = exports.JacksonIndex = class JacksonIndex {
|
13
13
|
};
|
14
14
|
__decorate([
|
15
15
|
(0, typeorm_1.PrimaryGeneratedColumn)()
|
@@ -34,9 +34,8 @@ __decorate([
|
|
34
34
|
onDelete: 'CASCADE',
|
35
35
|
})
|
36
36
|
], JacksonIndex.prototype, "store", void 0);
|
37
|
-
JacksonIndex = __decorate([
|
37
|
+
exports.JacksonIndex = JacksonIndex = __decorate([
|
38
38
|
(0, typeorm_1.Index)('_jackson_index_key_store', ['key', 'storeKey']),
|
39
39
|
(0, typeorm_1.Entity)()
|
40
40
|
], JacksonIndex);
|
41
|
-
exports.JacksonIndex = JacksonIndex;
|
42
41
|
//# sourceMappingURL=JacksonIndex.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"JacksonIndex.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonIndex.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iDAA8C;AAE9C,qCAAmF;
|
1
|
+
{"version":3,"file":"JacksonIndex.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonIndex.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iDAA8C;AAE9C,qCAAmF;AAI5E,IAAM,YAAY,0BAAlB,MAAM,YAAY;CAuBxB,CAAA;AArBC;IADC,IAAA,gCAAsB,GAAE;wCACb;AAOZ;IALC,IAAA,eAAK,EAAC,oBAAoB,CAAC;IAC3B,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;yCACW;AAMb;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;8CACgB;AAOlB;IALC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,2BAAY,EAAE,SAAS,EAAE;QACxC,oBAAoB;QACpB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,SAAS;KACpB,CAAC;2CACmB;uBAtBV,YAAY;IAFxB,IAAA,eAAK,EAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACtD,IAAA,gBAAM,GAAE;GACI,YAAY,CAuBxB"}
|
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
9
9
|
exports.JacksonStore = void 0;
|
10
10
|
const typeorm_1 = require("typeorm");
|
11
|
-
let JacksonStore = class JacksonStore {
|
11
|
+
let JacksonStore = exports.JacksonStore = class JacksonStore {
|
12
12
|
};
|
13
13
|
__decorate([
|
14
14
|
(0, typeorm_1.Column)({
|
@@ -49,8 +49,7 @@ __decorate([
|
|
49
49
|
nullable: true,
|
50
50
|
})
|
51
51
|
], JacksonStore.prototype, "modifiedAt", void 0);
|
52
|
-
JacksonStore = __decorate([
|
52
|
+
exports.JacksonStore = JacksonStore = __decorate([
|
53
53
|
(0, typeorm_1.Entity)()
|
54
54
|
], JacksonStore);
|
55
|
-
exports.JacksonStore = JacksonStore;
|
56
55
|
//# sourceMappingURL=JacksonStore.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"JacksonStore.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonStore.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAyC;
|
1
|
+
{"version":3,"file":"JacksonStore.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonStore.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAyC;AAGlC,IAAM,YAAY,0BAAlB,MAAM,YAAY;CAuCxB,CAAA;AAjCC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;yCACW;AAKb;IAHC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;KACb,CAAC;2CACa;AAOf;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;KACf,CAAC;wCACU;AAOZ;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;KACf,CAAC;yCACW;AAOb;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB;QAClC,QAAQ,EAAE,KAAK;KAChB,CAAC;+CACe;AAMjB;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI;KACf,CAAC;gDACkB;uBAtCT,YAAY;IADxB,IAAA,gBAAM,GAAE;GACI,YAAY,CAuCxB"}
|
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
9
9
|
exports.JacksonTTL = void 0;
|
10
10
|
const typeorm_1 = require("typeorm");
|
11
|
-
let JacksonTTL = class JacksonTTL {
|
11
|
+
let JacksonTTL = exports.JacksonTTL = class JacksonTTL {
|
12
12
|
};
|
13
13
|
__decorate([
|
14
14
|
(0, typeorm_1.Column)({
|
@@ -23,8 +23,7 @@ __decorate([
|
|
23
23
|
type: 'bigint',
|
24
24
|
})
|
25
25
|
], JacksonTTL.prototype, "expiresAt", void 0);
|
26
|
-
JacksonTTL = __decorate([
|
26
|
+
exports.JacksonTTL = JacksonTTL = __decorate([
|
27
27
|
(0, typeorm_1.Entity)()
|
28
28
|
], JacksonTTL);
|
29
|
-
exports.JacksonTTL = JacksonTTL;
|
30
29
|
//# sourceMappingURL=JacksonTTL.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"JacksonTTL.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonTTL.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAgD;
|
1
|
+
{"version":3,"file":"JacksonTTL.js","sourceRoot":"","sources":["../../../../../src/db/sql/mssql/entity/JacksonTTL.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAAgD;AAGzC,IAAM,UAAU,wBAAhB,MAAM,UAAU;CAatB,CAAA;AAPC;IALC,IAAA,gBAAM,EAAC;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,CAAC;uCACW;AAMb;IAJC,IAAA,eAAK,EAAC,yBAAyB,CAAC;IAChC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,QAAQ;KACf,CAAC;6CACiB;qBAZR,UAAU;IADtB,IAAA,gBAAM,GAAE;GACI,UAAU,CAatB"}
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import type { DatabaseStore, JacksonOption, IEventController } from '../typings';
|
2
|
-
import { DirectoryConfig } from './DirectoryConfig';
|
3
|
-
import { Users } from './Users';
|
4
|
-
import { Groups } from './Groups';
|
1
|
+
import type { DatabaseStore, JacksonOption, IEventController, EventCallback } from '../typings';
|
2
|
+
import { DirectoryConfig } from './scim/DirectoryConfig';
|
3
|
+
import { Users } from './scim/Users';
|
4
|
+
import { Groups } from './scim/Groups';
|
5
5
|
import { RequestHandler } from './request';
|
6
|
-
import { WebhookEventsLogger } from './WebhookEventsLogger';
|
6
|
+
import { WebhookEventsLogger } from './scim/WebhookEventsLogger';
|
7
7
|
declare const directorySync: (params: {
|
8
8
|
db: DatabaseStore;
|
9
9
|
opts: JacksonOption;
|
@@ -14,11 +14,13 @@ declare const directorySync: (params: {
|
|
14
14
|
directories: DirectoryConfig;
|
15
15
|
webhookLogs: WebhookEventsLogger;
|
16
16
|
requests: RequestHandler;
|
17
|
-
events: {
|
18
|
-
callback: (event: import("./types").DirectorySyncEvent) => Promise<void>;
|
19
|
-
};
|
20
17
|
providers: () => {
|
21
18
|
[K: string]: string;
|
22
19
|
};
|
20
|
+
events: {
|
21
|
+
callback: (event: import("./types").DirectorySyncEvent) => Promise<void>;
|
22
|
+
};
|
23
|
+
google: import("./non-scim/google/oauth").GoogleAuth;
|
24
|
+
sync: (callback: EventCallback) => Promise<void>;
|
23
25
|
}>;
|
24
26
|
export default directorySync;
|
@@ -9,15 +9,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
9
9
|
});
|
10
10
|
};
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
const DirectoryConfig_1 = require("./DirectoryConfig");
|
13
|
-
const DirectoryUsers_1 = require("./DirectoryUsers");
|
14
|
-
const DirectoryGroups_1 = require("./DirectoryGroups");
|
15
|
-
const Users_1 = require("./Users");
|
16
|
-
const Groups_1 = require("./Groups");
|
17
|
-
const utils_1 = require("./utils");
|
12
|
+
const DirectoryConfig_1 = require("./scim/DirectoryConfig");
|
13
|
+
const DirectoryUsers_1 = require("./scim/DirectoryUsers");
|
14
|
+
const DirectoryGroups_1 = require("./scim/DirectoryGroups");
|
15
|
+
const Users_1 = require("./scim/Users");
|
16
|
+
const Groups_1 = require("./scim/Groups");
|
17
|
+
const utils_1 = require("./scim/utils");
|
18
18
|
const request_1 = require("./request");
|
19
|
-
const events_1 = require("./events");
|
20
|
-
const WebhookEventsLogger_1 = require("./WebhookEventsLogger");
|
19
|
+
const events_1 = require("./scim/events");
|
20
|
+
const WebhookEventsLogger_1 = require("./scim/WebhookEventsLogger");
|
21
|
+
const google_1 = require("./non-scim/google");
|
22
|
+
const non_scim_1 = require("./non-scim");
|
21
23
|
const directorySync = (params) => __awaiter(void 0, void 0, void 0, function* () {
|
22
24
|
const { db, opts, eventController } = params;
|
23
25
|
const users = new Users_1.Users({ db });
|
@@ -26,18 +28,26 @@ const directorySync = (params) => __awaiter(void 0, void 0, void 0, function* ()
|
|
26
28
|
const directories = new DirectoryConfig_1.DirectoryConfig({ db, opts, users, groups, logger, eventController });
|
27
29
|
const directoryUsers = new DirectoryUsers_1.DirectoryUsers({ directories, users });
|
28
30
|
const directoryGroups = new DirectoryGroups_1.DirectoryGroups({ directories, users, groups });
|
31
|
+
const requestHandler = new request_1.RequestHandler(directoryUsers, directoryGroups);
|
32
|
+
// Fetch the supported providers
|
33
|
+
const getProviders = () => {
|
34
|
+
return (0, utils_1.getDirectorySyncProviders)();
|
35
|
+
};
|
36
|
+
const googleProvider = (0, google_1.newGoogleProvider)({ directories, opts });
|
29
37
|
return {
|
30
38
|
users,
|
31
39
|
groups,
|
32
40
|
directories,
|
33
41
|
webhookLogs: logger,
|
34
|
-
requests:
|
42
|
+
requests: requestHandler,
|
43
|
+
providers: getProviders,
|
35
44
|
events: {
|
36
45
|
callback: yield (0, events_1.handleEventCallback)(directories, logger),
|
37
46
|
},
|
38
|
-
|
39
|
-
|
40
|
-
|
47
|
+
google: googleProvider.oauth,
|
48
|
+
sync: (callback) => __awaiter(void 0, void 0, void 0, function* () {
|
49
|
+
return yield (0, non_scim_1.startSync)({ userController: users, groupController: groups, opts, directories, requestHandler }, callback);
|
50
|
+
}),
|
41
51
|
};
|
42
52
|
});
|
43
53
|
exports.default = directorySync;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/directory-sync/index.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/directory-sync/index.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,4DAAyD;AACzD,0DAAuD;AACvD,4DAAyD;AACzD,wCAAqC;AACrC,0CAAuC;AACvC,wCAAyD;AACzD,uCAA2C;AAC3C,0CAAoD;AACpD,oEAAiE;AACjE,8CAAsD;AACtD,yCAAuC;AAEvC,MAAM,aAAa,GAAG,CAAO,MAI5B,EAAE,EAAE;IACH,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAE7C,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,yCAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,iCAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAE9F,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG,IAAI,wBAAc,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAE3E,gCAAgC;IAChC,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,OAAO,IAAA,iCAAyB,GAAE,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,IAAA,0BAAiB,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,OAAO;QACL,KAAK;QACL,MAAM;QACN,WAAW;QACX,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE;YACN,QAAQ,EAAE,MAAM,IAAA,4BAAmB,EAAC,WAAW,EAAE,MAAM,CAAC;SACzD;QACD,MAAM,EAAE,cAAc,CAAC,KAAK;QAC5B,IAAI,EAAE,CAAO,QAAuB,EAAE,EAAE;YACtC,OAAO,MAAM,IAAA,oBAAS,EACpB,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,EACrF,QAAQ,CACT,CAAC;QACJ,CAAC,CAAA;KACF,CAAC;AACJ,CAAC,CAAA,CAAC;AAEF,kBAAe,aAAa,CAAC"}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import { OAuth2Client } from 'google-auth-library';
|
2
|
+
import type { Directory, IDirectoryConfig, Group, GroupMember, IDirectoryProvider, JacksonOption, PaginationParams } from '../../../typings';
|
3
|
+
interface GoogleProviderParams {
|
4
|
+
opts: JacksonOption;
|
5
|
+
directories: IDirectoryConfig;
|
6
|
+
}
|
7
|
+
export declare class GoogleProvider implements IDirectoryProvider {
|
8
|
+
opts: JacksonOption;
|
9
|
+
directories: IDirectoryConfig;
|
10
|
+
groupFieldsToExcludeWhenCompare: string[];
|
11
|
+
userFieldsToExcludeWhenCompare: string[];
|
12
|
+
constructor({ directories, opts }: GoogleProviderParams);
|
13
|
+
createOAuth2Client(directory: Directory): OAuth2Client;
|
14
|
+
getDirectories(): Promise<Directory[]>;
|
15
|
+
getUsers(directory: Directory, options: PaginationParams | null): Promise<{
|
16
|
+
data: never[];
|
17
|
+
metadata: null;
|
18
|
+
} | {
|
19
|
+
data: {
|
20
|
+
id: string;
|
21
|
+
email: string;
|
22
|
+
first_name: string;
|
23
|
+
last_name: string;
|
24
|
+
active: boolean;
|
25
|
+
raw: import("googleapis").admin_directory_v1.Schema$User;
|
26
|
+
}[];
|
27
|
+
metadata: {
|
28
|
+
nextPageToken: string | null | undefined;
|
29
|
+
hasNextPage: boolean;
|
30
|
+
};
|
31
|
+
}>;
|
32
|
+
getGroups(directory: Directory, options: PaginationParams | null): Promise<{
|
33
|
+
data: never[];
|
34
|
+
metadata: null;
|
35
|
+
} | {
|
36
|
+
data: {
|
37
|
+
id: string;
|
38
|
+
name: string;
|
39
|
+
raw: import("googleapis").admin_directory_v1.Schema$Group;
|
40
|
+
}[];
|
41
|
+
metadata: {
|
42
|
+
pageToken: string;
|
43
|
+
hasNextPage: boolean;
|
44
|
+
};
|
45
|
+
}>;
|
46
|
+
getGroupMembers(directory: Directory, group: Group): Promise<GroupMember[]>;
|
47
|
+
}
|
48
|
+
export {};
|
@@ -0,0 +1,147 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.GoogleProvider = void 0;
|
13
|
+
const googleapis_1 = require("googleapis");
|
14
|
+
const google_auth_library_1 = require("google-auth-library");
|
15
|
+
class GoogleProvider {
|
16
|
+
constructor({ directories, opts }) {
|
17
|
+
this.groupFieldsToExcludeWhenCompare = ['etag'];
|
18
|
+
this.userFieldsToExcludeWhenCompare = ['etag', 'lastLoginTime', 'thumbnailPhotoEtag'];
|
19
|
+
this.opts = opts;
|
20
|
+
this.directories = directories;
|
21
|
+
}
|
22
|
+
createOAuth2Client(directory) {
|
23
|
+
var _a;
|
24
|
+
const googleProvider = (_a = this.opts.dsync) === null || _a === void 0 ? void 0 : _a.providers.google;
|
25
|
+
const authClient = new google_auth_library_1.OAuth2Client(googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientId, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientSecret, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.callbackUrl);
|
26
|
+
authClient.setCredentials({
|
27
|
+
access_token: directory.google_access_token,
|
28
|
+
refresh_token: directory.google_refresh_token,
|
29
|
+
});
|
30
|
+
return authClient;
|
31
|
+
}
|
32
|
+
getDirectories() {
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
34
|
+
const { data: directories } = yield this.directories.filterBy({
|
35
|
+
provider: 'google',
|
36
|
+
});
|
37
|
+
if (!directories || directories.length === 0) {
|
38
|
+
return [];
|
39
|
+
}
|
40
|
+
return directories.filter((directory) => {
|
41
|
+
return (directory.google_access_token && directory.google_refresh_token && directory.google_domain !== '');
|
42
|
+
});
|
43
|
+
});
|
44
|
+
}
|
45
|
+
getUsers(directory, options) {
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
47
|
+
const query = {
|
48
|
+
maxResults: 200,
|
49
|
+
domain: directory.google_domain,
|
50
|
+
};
|
51
|
+
if (options === null || options === void 0 ? void 0 : options.pageToken) {
|
52
|
+
query['pageToken'] = options.pageToken;
|
53
|
+
}
|
54
|
+
const googleAdmin = googleapis_1.google.admin({ version: 'directory_v1', auth: this.createOAuth2Client(directory) });
|
55
|
+
const response = yield googleAdmin.users.list(query);
|
56
|
+
if (!response.data.users) {
|
57
|
+
return {
|
58
|
+
data: [],
|
59
|
+
metadata: null,
|
60
|
+
};
|
61
|
+
}
|
62
|
+
const users = response.data.users.map((user) => {
|
63
|
+
var _a, _b;
|
64
|
+
return {
|
65
|
+
id: user.id,
|
66
|
+
email: user.primaryEmail,
|
67
|
+
first_name: (_a = user.name) === null || _a === void 0 ? void 0 : _a.givenName,
|
68
|
+
last_name: (_b = user.name) === null || _b === void 0 ? void 0 : _b.familyName,
|
69
|
+
active: !user.suspended,
|
70
|
+
raw: user,
|
71
|
+
};
|
72
|
+
});
|
73
|
+
return {
|
74
|
+
data: users,
|
75
|
+
metadata: {
|
76
|
+
nextPageToken: response.data.nextPageToken,
|
77
|
+
hasNextPage: !!response.data.nextPageToken,
|
78
|
+
},
|
79
|
+
};
|
80
|
+
});
|
81
|
+
}
|
82
|
+
getGroups(directory, options) {
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
84
|
+
const googleAdmin = googleapis_1.google.admin({ version: 'directory_v1', auth: this.createOAuth2Client(directory) });
|
85
|
+
const query = {
|
86
|
+
maxResults: 200,
|
87
|
+
domain: directory.google_domain,
|
88
|
+
};
|
89
|
+
if (options === null || options === void 0 ? void 0 : options.pageToken) {
|
90
|
+
query['pageToken'] = options.pageToken;
|
91
|
+
}
|
92
|
+
const response = yield googleAdmin.groups.list(query);
|
93
|
+
if (!response.data.groups) {
|
94
|
+
return {
|
95
|
+
data: [],
|
96
|
+
metadata: null,
|
97
|
+
};
|
98
|
+
}
|
99
|
+
const groups = response.data.groups.map((group) => {
|
100
|
+
return {
|
101
|
+
id: group.id,
|
102
|
+
name: group.name,
|
103
|
+
raw: group,
|
104
|
+
};
|
105
|
+
});
|
106
|
+
return {
|
107
|
+
data: groups,
|
108
|
+
metadata: {
|
109
|
+
pageToken: response.data.nextPageToken,
|
110
|
+
hasNextPage: !!response.data.nextPageToken,
|
111
|
+
},
|
112
|
+
};
|
113
|
+
});
|
114
|
+
}
|
115
|
+
getGroupMembers(directory, group) {
|
116
|
+
return __awaiter(this, void 0, void 0, function* () {
|
117
|
+
const googleAdmin = googleapis_1.google.admin({ version: 'directory_v1', auth: this.createOAuth2Client(directory) });
|
118
|
+
const allMembers = [];
|
119
|
+
const query = {
|
120
|
+
maxResults: 200,
|
121
|
+
groupKey: group.id,
|
122
|
+
domain: directory.google_domain,
|
123
|
+
};
|
124
|
+
let nextPageToken = null;
|
125
|
+
do {
|
126
|
+
if (nextPageToken) {
|
127
|
+
query['pageToken'] = nextPageToken;
|
128
|
+
}
|
129
|
+
const response = yield googleAdmin.members.list(query);
|
130
|
+
if (!response.data.members) {
|
131
|
+
break;
|
132
|
+
}
|
133
|
+
const members = response.data.members.map((user) => {
|
134
|
+
return {
|
135
|
+
id: user.id,
|
136
|
+
raw: user,
|
137
|
+
};
|
138
|
+
});
|
139
|
+
allMembers.push(...members);
|
140
|
+
nextPageToken = response.data.nextPageToken;
|
141
|
+
} while (nextPageToken);
|
142
|
+
return allMembers;
|
143
|
+
});
|
144
|
+
}
|
145
|
+
}
|
146
|
+
exports.GoogleProvider = GoogleProvider;
|
147
|
+
//# sourceMappingURL=api.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/google/api.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { GoogleAuth } from './oauth';
|
2
|
+
import { GoogleProvider } from './api';
|
3
|
+
import type { IDirectoryConfig, JacksonOption } from '../../../typings';
|
4
|
+
interface NewGoogleProviderParams {
|
5
|
+
directories: IDirectoryConfig;
|
6
|
+
opts: JacksonOption;
|
7
|
+
}
|
8
|
+
export declare const newGoogleProvider: (params: NewGoogleProviderParams) => {
|
9
|
+
directory: GoogleProvider;
|
10
|
+
oauth: GoogleAuth;
|
11
|
+
};
|
12
|
+
export {};
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.newGoogleProvider = void 0;
|
4
|
+
const oauth_1 = require("./oauth");
|
5
|
+
const api_1 = require("./api");
|
6
|
+
const newGoogleProvider = (params) => {
|
7
|
+
const { directories, opts } = params;
|
8
|
+
return {
|
9
|
+
directory: new api_1.GoogleProvider({ opts, directories }),
|
10
|
+
oauth: new oauth_1.GoogleAuth({ opts, directories }),
|
11
|
+
};
|
12
|
+
};
|
13
|
+
exports.newGoogleProvider = newGoogleProvider;
|
14
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/google/index.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AACrC,+BAAuC;AAQhC,MAAM,iBAAiB,GAAG,CAAC,MAA+B,EAAE,EAAE;IACnE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAErC,OAAO;QACL,SAAS,EAAE,IAAI,oBAAc,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACpD,KAAK,EAAE,IAAI,kBAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,iBAAiB,qBAO5B"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { OAuth2Client, Credentials } from 'google-auth-library';
|
2
|
+
import type { Directory, IDirectoryConfig, JacksonOption, Response } from '../../../typings';
|
3
|
+
interface GoogleAuthParams {
|
4
|
+
opts: JacksonOption;
|
5
|
+
directories: IDirectoryConfig;
|
6
|
+
}
|
7
|
+
export declare class GoogleAuth {
|
8
|
+
private opts;
|
9
|
+
private directories;
|
10
|
+
constructor({ directories, opts }: GoogleAuthParams);
|
11
|
+
createOAuth2Client(directory: Directory): OAuth2Client;
|
12
|
+
generateAuthorizationUrl(params: {
|
13
|
+
directoryId: string;
|
14
|
+
}): Promise<Response<{
|
15
|
+
authorizationUrl: string;
|
16
|
+
}>>;
|
17
|
+
getAccessToken(params: {
|
18
|
+
directoryId: string;
|
19
|
+
code: string;
|
20
|
+
}): Promise<Response<Credentials>>;
|
21
|
+
setToken(params: {
|
22
|
+
directoryId: string;
|
23
|
+
accessToken: Credentials['access_token'];
|
24
|
+
refreshToken: Credentials['refresh_token'];
|
25
|
+
}): Promise<Response<Directory>>;
|
26
|
+
}
|
27
|
+
export {};
|
@@ -0,0 +1,109 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.GoogleAuth = void 0;
|
13
|
+
const google_auth_library_1 = require("google-auth-library");
|
14
|
+
const error_1 = require("../../../controller/error");
|
15
|
+
const scope = [
|
16
|
+
'https://www.googleapis.com/auth/admin.directory.user.readonly',
|
17
|
+
'https://www.googleapis.com/auth/admin.directory.group.readonly',
|
18
|
+
'https://www.googleapis.com/auth/admin.directory.group.member.readonly',
|
19
|
+
];
|
20
|
+
class GoogleAuth {
|
21
|
+
constructor({ directories, opts }) {
|
22
|
+
this.opts = opts;
|
23
|
+
this.directories = directories;
|
24
|
+
}
|
25
|
+
createOAuth2Client(directory) {
|
26
|
+
var _a;
|
27
|
+
const googleProvider = (_a = this.opts.dsync) === null || _a === void 0 ? void 0 : _a.providers.google;
|
28
|
+
const authClient = new google_auth_library_1.OAuth2Client(googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientId, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientSecret, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.callbackUrl);
|
29
|
+
authClient.setCredentials({
|
30
|
+
access_token: directory.google_access_token,
|
31
|
+
refresh_token: directory.google_refresh_token,
|
32
|
+
});
|
33
|
+
return authClient;
|
34
|
+
}
|
35
|
+
// Generate the Google authorization URL
|
36
|
+
generateAuthorizationUrl(params) {
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
38
|
+
const { directoryId } = params;
|
39
|
+
try {
|
40
|
+
const { data: directory, error } = yield this.directories.get(directoryId);
|
41
|
+
if (error) {
|
42
|
+
throw error;
|
43
|
+
}
|
44
|
+
if ((directory === null || directory === void 0 ? void 0 : directory.type) !== 'google') {
|
45
|
+
throw new error_1.JacksonError('Directory is not a Google Directory', 400);
|
46
|
+
}
|
47
|
+
const oauth2Client = this.createOAuth2Client(directory);
|
48
|
+
const authorizationUrl = oauth2Client.generateAuthUrl({
|
49
|
+
access_type: 'offline',
|
50
|
+
prompt: 'consent',
|
51
|
+
scope,
|
52
|
+
state: JSON.stringify({ directoryId }),
|
53
|
+
});
|
54
|
+
const data = {
|
55
|
+
authorizationUrl,
|
56
|
+
};
|
57
|
+
return { data, error: null };
|
58
|
+
}
|
59
|
+
catch (error) {
|
60
|
+
return (0, error_1.apiError)(error);
|
61
|
+
}
|
62
|
+
});
|
63
|
+
}
|
64
|
+
// Get the Google API access token from the authorization code
|
65
|
+
getAccessToken(params) {
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
67
|
+
const { directoryId, code } = params;
|
68
|
+
try {
|
69
|
+
const { data: directory, error } = yield this.directories.get(directoryId);
|
70
|
+
if (error) {
|
71
|
+
throw error;
|
72
|
+
}
|
73
|
+
const oauth2Client = this.createOAuth2Client(directory);
|
74
|
+
const { tokens } = yield oauth2Client.getToken(code);
|
75
|
+
return { data: tokens, error: null };
|
76
|
+
}
|
77
|
+
catch (error) {
|
78
|
+
return (0, error_1.apiError)(error);
|
79
|
+
}
|
80
|
+
});
|
81
|
+
}
|
82
|
+
// Set the Google API access token and refresh token for the directory
|
83
|
+
setToken(params) {
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
85
|
+
const { directoryId, accessToken, refreshToken } = params;
|
86
|
+
try {
|
87
|
+
if (!accessToken) {
|
88
|
+
throw new error_1.JacksonError(`Access token is required`, 400);
|
89
|
+
}
|
90
|
+
if (!refreshToken) {
|
91
|
+
throw new error_1.JacksonError(`Refresh token is required`, 400);
|
92
|
+
}
|
93
|
+
const { data } = yield this.directories.update(directoryId, {
|
94
|
+
google_access_token: accessToken,
|
95
|
+
google_refresh_token: refreshToken,
|
96
|
+
});
|
97
|
+
if (!data) {
|
98
|
+
throw new error_1.JacksonError('Failed to update directory', 400);
|
99
|
+
}
|
100
|
+
return { data, error: null };
|
101
|
+
}
|
102
|
+
catch (error) {
|
103
|
+
return (0, error_1.apiError)(error);
|
104
|
+
}
|
105
|
+
});
|
106
|
+
}
|
107
|
+
}
|
108
|
+
exports.GoogleAuth = GoogleAuth;
|
109
|
+
//# sourceMappingURL=oauth.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/google/oauth.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import type { IDirectoryConfig, IUsers, IGroups, IRequestHandler, JacksonOption, EventCallback } from '../../typings';
|
2
|
+
interface SyncParams {
|
3
|
+
userController: IUsers;
|
4
|
+
groupController: IGroups;
|
5
|
+
opts: JacksonOption;
|
6
|
+
directories: IDirectoryConfig;
|
7
|
+
requestHandler: IRequestHandler;
|
8
|
+
}
|
9
|
+
export declare const startSync: (params: SyncParams, callback: EventCallback) => Promise<void>;
|
10
|
+
export {};
|
@@ -0,0 +1,51 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.startSync = void 0;
|
13
|
+
const google_1 = require("./google");
|
14
|
+
const syncUsers_1 = require("./syncUsers");
|
15
|
+
const syncGroups_1 = require("./syncGroups");
|
16
|
+
const syncGroupMembers_1 = require("./syncGroupMembers");
|
17
|
+
// Method to start the directory sync process
|
18
|
+
// This method will be called by the directory sync cron job
|
19
|
+
const startSync = (params, callback) => __awaiter(void 0, void 0, void 0, function* () {
|
20
|
+
const { userController, groupController, opts, directories, requestHandler } = params;
|
21
|
+
const { directory: provider } = (0, google_1.newGoogleProvider)({ directories, opts });
|
22
|
+
const startTime = Date.now();
|
23
|
+
console.info('Starting the sync process');
|
24
|
+
const allDirectories = yield provider.getDirectories();
|
25
|
+
if (allDirectories.length === 0) {
|
26
|
+
console.info('No directories found. Skipping the sync process');
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
try {
|
30
|
+
for (const directory of allDirectories) {
|
31
|
+
const params = {
|
32
|
+
directory,
|
33
|
+
userController,
|
34
|
+
groupController,
|
35
|
+
provider,
|
36
|
+
requestHandler,
|
37
|
+
callback,
|
38
|
+
};
|
39
|
+
yield new syncUsers_1.SyncUsers(params).sync();
|
40
|
+
yield new syncGroups_1.SyncGroups(params).sync();
|
41
|
+
yield new syncGroupMembers_1.SyncGroupMembers(params).sync();
|
42
|
+
}
|
43
|
+
}
|
44
|
+
catch (e) {
|
45
|
+
console.error(e);
|
46
|
+
}
|
47
|
+
const endTime = Date.now();
|
48
|
+
console.info(`Sync process completed in ${(endTime - startTime) / 1000} seconds`);
|
49
|
+
});
|
50
|
+
exports.startSync = startSync;
|
51
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/directory-sync/non-scim/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA6C;AAS7C,2CAAwC;AACxC,6CAA0C;AAC1C,yDAAsD;AAUtD,6CAA6C;AAC7C,4DAA4D;AACrD,MAAM,SAAS,GAAG,CAAO,MAAkB,EAAE,QAAuB,EAAE,EAAE;IAC7E,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAEtF,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAA,0BAAiB,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAE1C,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;IAEvD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO;KACR;IAED,IAAI;QACF,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE;YACtC,MAAM,MAAM,GAAG;gBACb,SAAS;gBACT,cAAc;gBACd,eAAe;gBACf,QAAQ;gBACR,cAAc;gBACd,QAAQ;aACT,CAAC;YAEF,MAAM,IAAI,qBAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,uBAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,mCAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;SAC3C;KACF;IAAC,OAAO,CAAM,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;AACpF,CAAC,CAAA,CAAC;AAtCW,QAAA,SAAS,aAsCpB"}
|