@boxyhq/saml-jackson 1.33.0 → 1.33.1-beta.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/oauth/oidc-client.d.ts +3 -3
- package/dist/controller/oauth/oidc-client.js +2 -1
- package/dist/controller/oauth/oidc-client.js.map +1 -1
- package/dist/controller/oauth/oidc-issuer.d.ts +2 -0
- package/dist/controller/oauth/oidc-issuer.js +25 -0
- package/dist/controller/oauth/oidc-issuer.js.map +1 -0
- package/dist/controller/oauth.js +36 -35
- package/dist/controller/oauth.js.map +1 -1
- package/dist/controller/sso-handler.js +1 -1
- package/dist/controller/sso-handler.js.map +1 -1
- package/dist/controller/utils.d.ts +5 -3
- package/dist/controller/utils.js +10 -2
- package/dist/controller/utils.js.map +1 -1
- package/dist/src/controller/admin.d.ts +27 -0
- package/dist/src/controller/admin.js +60 -0
- package/dist/src/controller/admin.js.map +1 -0
- package/dist/src/controller/analytics.d.ts +16 -0
- package/dist/src/controller/analytics.js +79 -0
- package/dist/src/controller/analytics.js.map +1 -0
- package/dist/src/controller/api.d.ts +557 -0
- package/dist/src/controller/api.js +806 -0
- package/dist/src/controller/api.js.map +1 -0
- package/dist/src/controller/connection/oidc.d.ts +7 -0
- package/dist/src/controller/connection/oidc.js +181 -0
- package/dist/src/controller/connection/oidc.js.map +1 -0
- package/dist/src/controller/connection/saml.d.ts +7 -0
- package/dist/src/controller/connection/saml.js +250 -0
- package/dist/src/controller/connection/saml.js.map +1 -0
- package/dist/src/controller/error.d.ts +10 -0
- package/dist/src/controller/error.js +13 -0
- package/dist/src/controller/error.js.map +1 -0
- package/dist/src/controller/health-check.d.ts +11 -0
- package/dist/src/controller/health-check.js +51 -0
- package/dist/src/controller/health-check.js.map +1 -0
- package/dist/src/controller/logout.d.ts +18 -0
- package/dist/src/controller/logout.js +132 -0
- package/dist/src/controller/logout.js.map +1 -0
- package/dist/src/controller/oauth/allowed.d.ts +1 -0
- package/dist/src/controller/oauth/allowed.js +30 -0
- package/dist/src/controller/oauth/allowed.js.map +1 -0
- package/dist/src/controller/oauth/code-verifier.d.ts +1 -0
- package/dist/src/controller/oauth/code-verifier.js +8 -0
- package/dist/src/controller/oauth/code-verifier.js.map +1 -0
- package/dist/src/controller/oauth/oidc-client.d.ts +12 -0
- package/dist/src/controller/oauth/oidc-client.js +89 -0
- package/dist/src/controller/oauth/oidc-client.js.map +1 -0
- package/dist/src/controller/oauth/redirect.d.ts +1 -0
- package/dist/src/controller/oauth/redirect.js +13 -0
- package/dist/src/controller/oauth/redirect.js.map +1 -0
- package/dist/src/controller/oauth.d.ts +142 -0
- package/dist/src/controller/oauth.js +1112 -0
- package/dist/src/controller/oauth.js.map +1 -0
- package/dist/src/controller/oidc-discovery.d.ts +22 -0
- package/dist/src/controller/oidc-discovery.js +47 -0
- package/dist/src/controller/oidc-discovery.js.map +1 -0
- package/dist/src/controller/setup-link.d.ts +307 -0
- package/dist/src/controller/setup-link.js +462 -0
- package/dist/src/controller/setup-link.js.map +1 -0
- package/dist/src/controller/sp-config.d.ts +22 -0
- package/dist/src/controller/sp-config.js +89 -0
- package/dist/src/controller/sp-config.js.map +1 -0
- package/dist/src/controller/sso-handler.d.ts +66 -0
- package/dist/src/controller/sso-handler.js +306 -0
- package/dist/src/controller/sso-handler.js.map +1 -0
- package/dist/src/controller/utils.d.ts +84 -0
- package/dist/src/controller/utils.js +328 -0
- package/dist/src/controller/utils.js.map +1 -0
- package/dist/src/cron/lock.d.ts +18 -0
- package/dist/src/cron/lock.js +98 -0
- package/dist/src/cron/lock.js.map +1 -0
- package/dist/src/db/db.d.ts +5 -0
- package/dist/src/db/db.js +178 -0
- package/dist/src/db/db.js.map +1 -0
- package/dist/src/db/defaultDb.d.ts +2 -0
- package/dist/src/db/defaultDb.js +18 -0
- package/dist/src/db/defaultDb.js.map +1 -0
- package/dist/src/db/dynamoDb.d.ts +19 -0
- package/dist/src/db/dynamoDb.js +320 -0
- package/dist/src/db/dynamoDb.js.map +1 -0
- package/dist/src/db/encrypter.d.ts +3 -0
- package/dist/src/db/encrypter.js +22 -0
- package/dist/src/db/encrypter.js.map +1 -0
- package/dist/src/db/mem.d.ts +23 -0
- package/dist/src/db/mem.js +186 -0
- package/dist/src/db/mem.js.map +1 -0
- package/dist/src/db/mongo.d.ts +22 -0
- package/dist/src/db/mongo.js +177 -0
- package/dist/src/db/mongo.js.map +1 -0
- package/dist/src/db/planetscale/entity/JacksonIndex.d.ts +5 -0
- package/dist/src/db/planetscale/entity/JacksonIndex.js +32 -0
- package/dist/src/db/planetscale/entity/JacksonIndex.js.map +1 -0
- package/dist/src/db/planetscale/entity/JacksonStore.d.ts +9 -0
- package/dist/src/db/planetscale/entity/JacksonStore.js +63 -0
- package/dist/src/db/planetscale/entity/JacksonStore.js.map +1 -0
- package/dist/src/db/planetscale/entity/JacksonTTL.d.ts +4 -0
- package/dist/src/db/planetscale/entity/JacksonTTL.js +27 -0
- package/dist/src/db/planetscale/entity/JacksonTTL.js.map +1 -0
- package/dist/src/db/redis.d.ts +18 -0
- package/dist/src/db/redis.js +214 -0
- package/dist/src/db/redis.js.map +1 -0
- package/dist/src/db/sql/entity/JacksonIndex.d.ts +7 -0
- package/dist/src/db/sql/entity/JacksonIndex.js +39 -0
- package/dist/src/db/sql/entity/JacksonIndex.js.map +1 -0
- package/dist/src/db/sql/entity/JacksonStore.d.ts +9 -0
- package/dist/src/db/sql/entity/JacksonStore.js +61 -0
- package/dist/src/db/sql/entity/JacksonStore.js.map +1 -0
- package/dist/src/db/sql/entity/JacksonTTL.d.ts +4 -0
- package/dist/src/db/sql/entity/JacksonTTL.js +27 -0
- package/dist/src/db/sql/entity/JacksonTTL.js.map +1 -0
- package/dist/src/db/sql/mariadb/entity/JacksonIndex.d.ts +7 -0
- package/dist/src/db/sql/mariadb/entity/JacksonIndex.js +39 -0
- package/dist/src/db/sql/mariadb/entity/JacksonIndex.js.map +1 -0
- package/dist/src/db/sql/mariadb/entity/JacksonStore.d.ts +9 -0
- package/dist/src/db/sql/mariadb/entity/JacksonStore.js +63 -0
- package/dist/src/db/sql/mariadb/entity/JacksonStore.js.map +1 -0
- package/dist/src/db/sql/mariadb/entity/JacksonTTL.d.ts +4 -0
- package/dist/src/db/sql/mariadb/entity/JacksonTTL.js +27 -0
- package/dist/src/db/sql/mariadb/entity/JacksonTTL.js.map +1 -0
- package/dist/src/db/sql/mssql/entity/JacksonIndex.d.ts +7 -0
- package/dist/src/db/sql/mssql/entity/JacksonIndex.js +39 -0
- package/dist/src/db/sql/mssql/entity/JacksonIndex.js.map +1 -0
- package/dist/src/db/sql/mssql/entity/JacksonStore.d.ts +9 -0
- package/dist/src/db/sql/mssql/entity/JacksonStore.js +61 -0
- package/dist/src/db/sql/mssql/entity/JacksonStore.js.map +1 -0
- package/dist/src/db/sql/mssql/entity/JacksonTTL.d.ts +4 -0
- package/dist/src/db/sql/mssql/entity/JacksonTTL.js +27 -0
- package/dist/src/db/sql/mssql/entity/JacksonTTL.js.map +1 -0
- package/dist/src/db/sql/mssql.d.ts +1 -0
- package/dist/src/db/sql/mssql.js +44 -0
- package/dist/src/db/sql/mssql.js.map +1 -0
- package/dist/src/db/sql/sql.d.ts +32 -0
- package/dist/src/db/sql/sql.js +318 -0
- package/dist/src/db/sql/sql.js.map +1 -0
- package/dist/src/db/sql/sqlite/entity/JacksonIndex.d.ts +7 -0
- package/dist/src/db/sql/sqlite/entity/JacksonIndex.js +39 -0
- package/dist/src/db/sql/sqlite/entity/JacksonIndex.js.map +1 -0
- package/dist/src/db/sql/sqlite/entity/JacksonStore.d.ts +9 -0
- package/dist/src/db/sql/sqlite/entity/JacksonStore.js +61 -0
- package/dist/src/db/sql/sqlite/entity/JacksonStore.js.map +1 -0
- package/dist/src/db/sql/sqlite/entity/JacksonTTL.d.ts +4 -0
- package/dist/src/db/sql/sqlite/entity/JacksonTTL.js +27 -0
- package/dist/src/db/sql/sqlite/entity/JacksonTTL.js.map +1 -0
- package/dist/src/db/store.d.ts +5 -0
- package/dist/src/db/store.js +65 -0
- package/dist/src/db/store.js.map +1 -0
- package/dist/src/db/utils.d.ts +16 -0
- package/dist/src/db/utils.js +28 -0
- package/dist/src/db/utils.js.map +1 -0
- package/dist/src/directory-sync/batch-events/queue.d.ts +40 -0
- package/dist/src/directory-sync/batch-events/queue.js +225 -0
- package/dist/src/directory-sync/batch-events/queue.js.map +1 -0
- package/dist/src/directory-sync/index.d.ts +27 -0
- package/dist/src/directory-sync/index.js +97 -0
- package/dist/src/directory-sync/index.js.map +1 -0
- package/dist/src/directory-sync/non-scim/google/api.d.ts +36 -0
- package/dist/src/directory-sync/non-scim/google/api.js +143 -0
- package/dist/src/directory-sync/non-scim/google/api.js.map +1 -0
- package/dist/src/directory-sync/non-scim/google/index.d.ts +12 -0
- package/dist/src/directory-sync/non-scim/google/index.js +10 -0
- package/dist/src/directory-sync/non-scim/google/index.js.map +1 -0
- package/dist/src/directory-sync/non-scim/google/oauth.d.ts +27 -0
- package/dist/src/directory-sync/non-scim/google/oauth.js +105 -0
- package/dist/src/directory-sync/non-scim/google/oauth.js.map +1 -0
- package/dist/src/directory-sync/non-scim/index.d.ts +24 -0
- package/dist/src/directory-sync/non-scim/index.js +85 -0
- package/dist/src/directory-sync/non-scim/index.js.map +1 -0
- package/dist/src/directory-sync/non-scim/syncGroupMembers.d.ts +23 -0
- package/dist/src/directory-sync/non-scim/syncGroupMembers.js +105 -0
- package/dist/src/directory-sync/non-scim/syncGroupMembers.js.map +1 -0
- package/dist/src/directory-sync/non-scim/syncGroups.d.ts +24 -0
- package/dist/src/directory-sync/non-scim/syncGroups.js +120 -0
- package/dist/src/directory-sync/non-scim/syncGroups.js.map +1 -0
- package/dist/src/directory-sync/non-scim/syncUsers.d.ts +24 -0
- package/dist/src/directory-sync/non-scim/syncUsers.js +120 -0
- package/dist/src/directory-sync/non-scim/syncUsers.js.map +1 -0
- package/dist/src/directory-sync/non-scim/utils.d.ts +36 -0
- package/dist/src/directory-sync/non-scim/utils.js +109 -0
- package/dist/src/directory-sync/non-scim/utils.js.map +1 -0
- package/dist/src/directory-sync/request.d.ts +14 -0
- package/dist/src/directory-sync/request.js +29 -0
- package/dist/src/directory-sync/request.js.map +1 -0
- package/dist/src/directory-sync/scim/Base.d.ts +12 -0
- package/dist/src/directory-sync/scim/Base.js +23 -0
- package/dist/src/directory-sync/scim/Base.js.map +1 -0
- package/dist/src/directory-sync/scim/DirectoryConfig.d.ts +343 -0
- package/dist/src/directory-sync/scim/DirectoryConfig.js +580 -0
- package/dist/src/directory-sync/scim/DirectoryConfig.js.map +1 -0
- package/dist/src/directory-sync/scim/DirectoryGroups.d.ts +28 -0
- package/dist/src/directory-sync/scim/DirectoryGroups.js +252 -0
- package/dist/src/directory-sync/scim/DirectoryGroups.js.map +1 -0
- package/dist/src/directory-sync/scim/DirectoryUsers.d.ts +25 -0
- package/dist/src/directory-sync/scim/DirectoryUsers.js +193 -0
- package/dist/src/directory-sync/scim/DirectoryUsers.js.map +1 -0
- package/dist/src/directory-sync/scim/Groups.d.ts +166 -0
- package/dist/src/directory-sync/scim/Groups.js +348 -0
- package/dist/src/directory-sync/scim/Groups.js.map +1 -0
- package/dist/src/directory-sync/scim/Users.d.ts +99 -0
- package/dist/src/directory-sync/scim/Users.js +215 -0
- package/dist/src/directory-sync/scim/Users.js.map +1 -0
- package/dist/src/directory-sync/scim/WebhookEventsLogger.d.ts +101 -0
- package/dist/src/directory-sync/scim/WebhookEventsLogger.js +165 -0
- package/dist/src/directory-sync/scim/WebhookEventsLogger.js.map +1 -0
- package/dist/src/directory-sync/scim/transform.d.ts +6 -0
- package/dist/src/directory-sync/scim/transform.js +37 -0
- package/dist/src/directory-sync/scim/transform.js.map +1 -0
- package/dist/src/directory-sync/scim/utils.d.ts +33 -0
- package/dist/src/directory-sync/scim/utils.js +129 -0
- package/dist/src/directory-sync/scim/utils.js.map +1 -0
- package/dist/src/directory-sync/types.d.ts +195 -0
- package/dist/src/directory-sync/types.js +10 -0
- package/dist/src/directory-sync/types.js.map +1 -0
- package/dist/src/directory-sync/utils.d.ts +19 -0
- package/dist/src/directory-sync/utils.js +56 -0
- package/dist/src/directory-sync/utils.js.map +1 -0
- package/dist/src/ee/branding/index.d.ts +17 -0
- package/dist/src/ee/branding/index.js +49 -0
- package/dist/src/ee/branding/index.js.map +1 -0
- package/dist/src/ee/common/checkLicense.d.ts +3 -0
- package/dist/src/ee/common/checkLicense.js +23 -0
- package/dist/src/ee/common/checkLicense.js.map +1 -0
- package/dist/src/ee/identity-federation/app.d.ts +328 -0
- package/dist/src/ee/identity-federation/app.js +532 -0
- package/dist/src/ee/identity-federation/app.js.map +1 -0
- package/dist/src/ee/identity-federation/idp-login.d.ts +18 -0
- package/dist/src/ee/identity-federation/idp-login.js +98 -0
- package/dist/src/ee/identity-federation/idp-login.js.map +1 -0
- package/dist/src/ee/identity-federation/index.d.ts +15 -0
- package/dist/src/ee/identity-federation/index.js +43 -0
- package/dist/src/ee/identity-federation/index.js.map +1 -0
- package/dist/src/ee/identity-federation/sso.d.ts +24 -0
- package/dist/src/ee/identity-federation/sso.js +124 -0
- package/dist/src/ee/identity-federation/sso.js.map +1 -0
- package/dist/src/ee/identity-federation/types.d.ts +38 -0
- package/dist/src/ee/identity-federation/types.js +2 -0
- package/dist/src/ee/identity-federation/types.js.map +1 -0
- package/dist/src/ee/ory/ory.d.ts +18 -0
- package/dist/src/ee/ory/ory.js +195 -0
- package/dist/src/ee/ory/ory.js.map +1 -0
- package/dist/src/ee/product/index.d.ts +14 -0
- package/dist/src/ee/product/index.js +45 -0
- package/dist/src/ee/product/index.js.map +1 -0
- package/dist/src/event/axios.d.ts +2 -0
- package/dist/src/event/axios.js +27 -0
- package/dist/src/event/axios.js.map +1 -0
- package/dist/src/event/index.d.ts +11 -0
- package/dist/src/event/index.js +53 -0
- package/dist/src/event/index.js.map +1 -0
- package/dist/src/event/types.d.ts +21 -0
- package/dist/src/event/types.js +2 -0
- package/dist/src/event/types.js.map +1 -0
- package/dist/src/event/utils.d.ts +4 -0
- package/dist/src/event/utils.js +33 -0
- package/dist/src/event/utils.js.map +1 -0
- package/dist/src/event/webhook.d.ts +3 -0
- package/dist/src/event/webhook.js +34 -0
- package/dist/src/event/webhook.js.map +1 -0
- package/dist/src/index.d.ts +35 -0
- package/dist/src/index.js +161 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/loadConnection.d.ts +4 -0
- package/dist/src/loadConnection.js +38 -0
- package/dist/src/loadConnection.js.map +1 -0
- package/dist/src/opentelemetry/metrics.d.ts +14 -0
- package/dist/src/opentelemetry/metrics.js +64 -0
- package/dist/src/opentelemetry/metrics.js.map +1 -0
- package/dist/src/saml/claims.d.ts +12 -0
- package/dist/src/saml/claims.js +57 -0
- package/dist/src/saml/claims.js.map +1 -0
- package/dist/src/saml/lib.d.ts +8 -0
- package/dist/src/saml/lib.js +29 -0
- package/dist/src/saml/lib.js.map +1 -0
- package/dist/src/saml/x509.d.ts +9 -0
- package/dist/src/saml/x509.js +93 -0
- package/dist/src/saml/x509.js.map +1 -0
- package/dist/src/sso-traces/index.d.ts +114 -0
- package/dist/src/sso-traces/index.js +229 -0
- package/dist/src/sso-traces/index.js.map +1 -0
- package/dist/src/sso-traces/types.d.ts +44 -0
- package/dist/src/sso-traces/types.js +2 -0
- package/dist/src/sso-traces/types.js.map +1 -0
- package/dist/src/typings.d.ts +540 -0
- package/dist/src/typings.js +5 -0
- package/dist/src/typings.js.map +1 -0
- package/dist/typeorm.d.ts +3 -0
- package/dist/typeorm.js +58 -0
- package/dist/typeorm.js.map +1 -0
- package/dist/typings.d.ts +1 -1
- package/package.json +7 -7
@@ -0,0 +1,105 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import { OAuth2Client } from 'google-auth-library';
|
11
|
+
import { JacksonError, apiError } from '../../../controller/error';
|
12
|
+
const scope = [
|
13
|
+
'https://www.googleapis.com/auth/admin.directory.user.readonly',
|
14
|
+
'https://www.googleapis.com/auth/admin.directory.group.readonly',
|
15
|
+
'https://www.googleapis.com/auth/admin.directory.group.member.readonly',
|
16
|
+
];
|
17
|
+
export class GoogleAuth {
|
18
|
+
constructor({ directories, opts }) {
|
19
|
+
this.opts = opts;
|
20
|
+
this.directories = directories;
|
21
|
+
}
|
22
|
+
createOAuth2Client(directory) {
|
23
|
+
var _a, _b;
|
24
|
+
const googleProvider = (_b = (_a = this.opts.dsync) === null || _a === void 0 ? void 0 : _a.providers) === null || _b === void 0 ? void 0 : _b.google;
|
25
|
+
const authClient = new OAuth2Client(googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientId, googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.clientSecret, `${this.opts.externalUrl}${googleProvider === null || googleProvider === void 0 ? void 0 : googleProvider.callbackPath}`);
|
26
|
+
authClient.setCredentials({
|
27
|
+
access_token: directory.google_access_token,
|
28
|
+
refresh_token: directory.google_refresh_token,
|
29
|
+
});
|
30
|
+
return authClient;
|
31
|
+
}
|
32
|
+
// Generate the Google authorization URL
|
33
|
+
generateAuthorizationUrl(params) {
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
35
|
+
const { directoryId } = params;
|
36
|
+
try {
|
37
|
+
const { data: directory, error } = yield this.directories.get(directoryId);
|
38
|
+
if (error) {
|
39
|
+
throw error;
|
40
|
+
}
|
41
|
+
if ((directory === null || directory === void 0 ? void 0 : directory.type) !== 'google') {
|
42
|
+
throw new JacksonError('Directory is not a Google Directory', 400);
|
43
|
+
}
|
44
|
+
const oauth2Client = this.createOAuth2Client(directory);
|
45
|
+
const authorizationUrl = oauth2Client.generateAuthUrl({
|
46
|
+
access_type: 'offline',
|
47
|
+
prompt: 'consent',
|
48
|
+
scope,
|
49
|
+
state: JSON.stringify({ directoryId }),
|
50
|
+
});
|
51
|
+
const data = {
|
52
|
+
authorizationUrl,
|
53
|
+
};
|
54
|
+
return { data, error: null };
|
55
|
+
}
|
56
|
+
catch (error) {
|
57
|
+
return apiError(error);
|
58
|
+
}
|
59
|
+
});
|
60
|
+
}
|
61
|
+
// Get the Google API access token from the authorization code
|
62
|
+
getAccessToken(params) {
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
64
|
+
const { directoryId, code } = params;
|
65
|
+
try {
|
66
|
+
const { data: directory, error } = yield this.directories.get(directoryId);
|
67
|
+
if (error) {
|
68
|
+
throw error;
|
69
|
+
}
|
70
|
+
const oauth2Client = this.createOAuth2Client(directory);
|
71
|
+
const { tokens } = yield oauth2Client.getToken(code);
|
72
|
+
return { data: tokens, error: null };
|
73
|
+
}
|
74
|
+
catch (error) {
|
75
|
+
return apiError(error);
|
76
|
+
}
|
77
|
+
});
|
78
|
+
}
|
79
|
+
// Set the Google API access token and refresh token for the directory
|
80
|
+
setToken(params) {
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
82
|
+
const { directoryId, accessToken, refreshToken } = params;
|
83
|
+
try {
|
84
|
+
if (!accessToken) {
|
85
|
+
throw new JacksonError(`Access token is required`, 400);
|
86
|
+
}
|
87
|
+
if (!refreshToken) {
|
88
|
+
throw new JacksonError(`Refresh token is required`, 400);
|
89
|
+
}
|
90
|
+
const { data } = yield this.directories.update(directoryId, {
|
91
|
+
google_access_token: accessToken,
|
92
|
+
google_refresh_token: refreshToken,
|
93
|
+
});
|
94
|
+
if (!data) {
|
95
|
+
throw new JacksonError('Failed to update directory', 400);
|
96
|
+
}
|
97
|
+
return { data, error: null };
|
98
|
+
}
|
99
|
+
catch (error) {
|
100
|
+
return apiError(error);
|
101
|
+
}
|
102
|
+
});
|
103
|
+
}
|
104
|
+
}
|
105
|
+
//# 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,24 @@
|
|
1
|
+
import type { IDirectoryConfig, IUsers, IGroups, IRequestHandler, JacksonOption, EventCallback, CronLock } from '../../typings';
|
2
|
+
interface SyncParams {
|
3
|
+
userController: IUsers;
|
4
|
+
groupController: IGroups;
|
5
|
+
opts: JacksonOption;
|
6
|
+
directories: IDirectoryConfig;
|
7
|
+
requestHandler: IRequestHandler;
|
8
|
+
eventCallback: EventCallback;
|
9
|
+
eventLock: CronLock;
|
10
|
+
}
|
11
|
+
export declare class SyncProviders {
|
12
|
+
private userController;
|
13
|
+
private groupController;
|
14
|
+
private directories;
|
15
|
+
private requestHandler;
|
16
|
+
private opts;
|
17
|
+
private cronInterval;
|
18
|
+
private eventCallback;
|
19
|
+
private eventLock;
|
20
|
+
constructor({ userController, groupController, opts, directories, requestHandler, eventCallback, eventLock, }: SyncParams);
|
21
|
+
startSync(): Promise<void>;
|
22
|
+
private scheduleSync;
|
23
|
+
}
|
24
|
+
export {};
|
@@ -0,0 +1,85 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import { newGoogleProvider } from './google';
|
11
|
+
import { SyncUsers } from './syncUsers';
|
12
|
+
import { SyncGroups } from './syncGroups';
|
13
|
+
import { SyncGroupMembers } from './syncGroupMembers';
|
14
|
+
let isJobRunning = false;
|
15
|
+
let intervalId;
|
16
|
+
export class SyncProviders {
|
17
|
+
constructor({ userController, groupController, opts, directories, requestHandler, eventCallback, eventLock, }) {
|
18
|
+
var _a, _b;
|
19
|
+
this.userController = userController;
|
20
|
+
this.groupController = groupController;
|
21
|
+
this.directories = directories;
|
22
|
+
this.requestHandler = requestHandler;
|
23
|
+
this.eventCallback = eventCallback;
|
24
|
+
this.opts = opts;
|
25
|
+
this.cronInterval = (_b = (_a = this.opts.dsync) === null || _a === void 0 ? void 0 : _a.providers) === null || _b === void 0 ? void 0 : _b.google.cronInterval;
|
26
|
+
this.eventLock = eventLock;
|
27
|
+
if (this.cronInterval) {
|
28
|
+
this.scheduleSync = this.scheduleSync.bind(this);
|
29
|
+
this.scheduleSync();
|
30
|
+
}
|
31
|
+
}
|
32
|
+
// Start the sync process
|
33
|
+
startSync() {
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
35
|
+
if (isJobRunning) {
|
36
|
+
console.info('A sync process is already running, skipping.');
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
if (!(yield this.eventLock.acquire())) {
|
40
|
+
return;
|
41
|
+
}
|
42
|
+
isJobRunning = true;
|
43
|
+
const { directory: provider } = newGoogleProvider({ directories: this.directories, opts: this.opts });
|
44
|
+
const startTime = Date.now();
|
45
|
+
try {
|
46
|
+
const allDirectories = yield provider.getDirectories();
|
47
|
+
console.info(`Starting the sync process for ${allDirectories.length} directories`);
|
48
|
+
for (const directory of allDirectories) {
|
49
|
+
const params = {
|
50
|
+
directory,
|
51
|
+
provider,
|
52
|
+
userController: this.userController,
|
53
|
+
groupController: this.groupController,
|
54
|
+
requestHandler: this.requestHandler,
|
55
|
+
callback: this.eventCallback,
|
56
|
+
};
|
57
|
+
yield new SyncUsers(params).sync();
|
58
|
+
yield new SyncGroups(params).sync();
|
59
|
+
yield new SyncGroupMembers(params).sync();
|
60
|
+
}
|
61
|
+
}
|
62
|
+
catch (e) {
|
63
|
+
console.error(' Error processing Google sync:', e);
|
64
|
+
}
|
65
|
+
yield this.eventLock.release();
|
66
|
+
const endTime = Date.now();
|
67
|
+
console.info(`Sync process completed in ${(endTime - startTime) / 1000} seconds`);
|
68
|
+
isJobRunning = false;
|
69
|
+
if (this.cronInterval) {
|
70
|
+
this.scheduleSync();
|
71
|
+
}
|
72
|
+
});
|
73
|
+
}
|
74
|
+
// Schedule the next sync process
|
75
|
+
scheduleSync() {
|
76
|
+
if (!this.cronInterval) {
|
77
|
+
return;
|
78
|
+
}
|
79
|
+
if (intervalId) {
|
80
|
+
clearInterval(intervalId);
|
81
|
+
}
|
82
|
+
intervalId = setInterval(() => this.startSync(), this.cronInterval * 1000);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/index.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import type { Directory, IGroups, Group, IRequestHandler, DirectorySyncRequest, EventCallback, IDirectoryProvider, GroupMembership } from '../../typings';
|
2
|
+
interface SyncGroupMembersParams {
|
3
|
+
groupController: IGroups;
|
4
|
+
provider: IDirectoryProvider;
|
5
|
+
requestHandler: IRequestHandler;
|
6
|
+
callback: EventCallback;
|
7
|
+
directory: Directory;
|
8
|
+
}
|
9
|
+
type HandleRequestParams = Pick<DirectorySyncRequest, 'method' | 'body' | 'resourceId'>;
|
10
|
+
export declare class SyncGroupMembers {
|
11
|
+
private groupController;
|
12
|
+
private provider;
|
13
|
+
private requestHandler;
|
14
|
+
private callback;
|
15
|
+
private directory;
|
16
|
+
constructor({ directory, groupController, requestHandler, provider, callback }: SyncGroupMembersParams);
|
17
|
+
sync(): Promise<void>;
|
18
|
+
getAllExistingMembers(group: Group): Promise<Pick<GroupMembership, "user_id">[]>;
|
19
|
+
addMembers(group: Group, memberIds: string[]): Promise<void>;
|
20
|
+
deleteMembers(group: Group, memberIds: string[]): Promise<void>;
|
21
|
+
handleRequest(payload: HandleRequestParams): Promise<void>;
|
22
|
+
}
|
23
|
+
export {};
|
@@ -0,0 +1,105 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import _ from 'lodash';
|
11
|
+
import { compareAndFindDeletedMembers, compareAndFindNewMembers, toGroupMembershipSCIMPayload, } from './utils';
|
12
|
+
export class SyncGroupMembers {
|
13
|
+
constructor({ directory, groupController, requestHandler, provider, callback }) {
|
14
|
+
this.groupController = groupController;
|
15
|
+
this.provider = provider;
|
16
|
+
this.requestHandler = requestHandler;
|
17
|
+
this.callback = callback;
|
18
|
+
this.directory = directory;
|
19
|
+
}
|
20
|
+
sync() {
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
22
|
+
let nextPageOption = null;
|
23
|
+
do {
|
24
|
+
const { data: groups, metadata } = yield this.provider.getGroups(this.directory, nextPageOption);
|
25
|
+
if (!groups || groups.length === 0) {
|
26
|
+
break;
|
27
|
+
}
|
28
|
+
for (const group of groups) {
|
29
|
+
const membersFromDB = yield this.getAllExistingMembers(group);
|
30
|
+
const membersFromProvider = yield this.provider.getGroupMembers(this.directory, group);
|
31
|
+
const idsFromDB = _.map(membersFromDB, 'user_id');
|
32
|
+
const idsFromProvider = _.map(membersFromProvider, 'id');
|
33
|
+
const deletedMembers = compareAndFindDeletedMembers(idsFromDB, idsFromProvider);
|
34
|
+
const newMembers = compareAndFindNewMembers(idsFromDB, idsFromProvider);
|
35
|
+
if (deletedMembers && deletedMembers.length > 0) {
|
36
|
+
yield this.deleteMembers(group, deletedMembers);
|
37
|
+
}
|
38
|
+
if (newMembers && newMembers.length > 0) {
|
39
|
+
yield this.addMembers(group, newMembers);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
nextPageOption = metadata;
|
43
|
+
} while (nextPageOption && nextPageOption.hasNextPage);
|
44
|
+
});
|
45
|
+
}
|
46
|
+
// Get all existing members for a group from the Jackson store
|
47
|
+
getAllExistingMembers(group) {
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
49
|
+
const existingMembers = [];
|
50
|
+
const pageLimit = 500;
|
51
|
+
let pageOffset = 0;
|
52
|
+
while (true) {
|
53
|
+
const { data: members } = yield this.groupController
|
54
|
+
.setTenantAndProduct(this.directory.tenant, this.directory.product)
|
55
|
+
.getGroupMembers({
|
56
|
+
groupId: group.id,
|
57
|
+
pageOffset,
|
58
|
+
pageLimit,
|
59
|
+
});
|
60
|
+
if (!members || members.length === 0) {
|
61
|
+
break;
|
62
|
+
}
|
63
|
+
existingMembers.push(...members);
|
64
|
+
if (members.length < pageLimit) {
|
65
|
+
break;
|
66
|
+
}
|
67
|
+
pageOffset += pageLimit;
|
68
|
+
}
|
69
|
+
return existingMembers;
|
70
|
+
});
|
71
|
+
}
|
72
|
+
addMembers(group, memberIds) {
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
74
|
+
yield this.handleRequest({
|
75
|
+
method: 'PATCH',
|
76
|
+
body: toGroupMembershipSCIMPayload(memberIds, 'add'),
|
77
|
+
resourceId: group.id,
|
78
|
+
});
|
79
|
+
});
|
80
|
+
}
|
81
|
+
deleteMembers(group, memberIds) {
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
83
|
+
yield this.handleRequest({
|
84
|
+
method: 'PATCH',
|
85
|
+
body: toGroupMembershipSCIMPayload(memberIds, 'remove'),
|
86
|
+
resourceId: group.id,
|
87
|
+
});
|
88
|
+
});
|
89
|
+
}
|
90
|
+
handleRequest(payload) {
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
92
|
+
const request = {
|
93
|
+
query: {},
|
94
|
+
body: payload.body,
|
95
|
+
resourceType: 'groups',
|
96
|
+
method: payload.method,
|
97
|
+
directoryId: this.directory.id,
|
98
|
+
apiSecret: this.directory.scim.secret,
|
99
|
+
resourceId: payload.resourceId,
|
100
|
+
};
|
101
|
+
yield this.requestHandler.handle(request, this.callback);
|
102
|
+
});
|
103
|
+
}
|
104
|
+
}
|
105
|
+
//# sourceMappingURL=syncGroupMembers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"syncGroupMembers.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/syncGroupMembers.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import type { Directory, IGroups, Group, IRequestHandler, DirectorySyncRequest, EventCallback, IDirectoryProvider } from '../../typings';
|
2
|
+
interface SyncGroupsParams {
|
3
|
+
groupController: IGroups;
|
4
|
+
provider: IDirectoryProvider;
|
5
|
+
requestHandler: IRequestHandler;
|
6
|
+
callback: EventCallback;
|
7
|
+
directory: Directory;
|
8
|
+
}
|
9
|
+
type HandleRequestParams = Pick<DirectorySyncRequest, 'method' | 'body' | 'resourceId'>;
|
10
|
+
export declare class SyncGroups {
|
11
|
+
private groupController;
|
12
|
+
private provider;
|
13
|
+
private requestHandler;
|
14
|
+
private callback;
|
15
|
+
private directory;
|
16
|
+
constructor({ directory, groupController, callback, requestHandler, provider }: SyncGroupsParams);
|
17
|
+
sync(): Promise<void>;
|
18
|
+
getAllExistingGroups(): Promise<Group[]>;
|
19
|
+
createGroup(group: Group): Promise<void>;
|
20
|
+
updateGroup(group: Group): Promise<void>;
|
21
|
+
deleteGroups(groups: Group[]): Promise<void>;
|
22
|
+
handleRequest(payload: HandleRequestParams): Promise<void>;
|
23
|
+
}
|
24
|
+
export {};
|
@@ -0,0 +1,120 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import { compareAndFindDeletedGroups, isGroupUpdated, toGroupSCIMPayload } from './utils';
|
11
|
+
export class SyncGroups {
|
12
|
+
constructor({ directory, groupController, callback, requestHandler, provider }) {
|
13
|
+
this.groupController = groupController;
|
14
|
+
this.provider = provider;
|
15
|
+
this.requestHandler = requestHandler;
|
16
|
+
this.callback = callback;
|
17
|
+
this.directory = directory;
|
18
|
+
}
|
19
|
+
sync() {
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
21
|
+
const groupsFromProvider = [];
|
22
|
+
let nextPageOption = null;
|
23
|
+
do {
|
24
|
+
const { data: groups, metadata } = yield this.provider.getGroups(this.directory, nextPageOption);
|
25
|
+
if (!groups || groups.length === 0) {
|
26
|
+
break;
|
27
|
+
}
|
28
|
+
// Create or update groups
|
29
|
+
for (const group of groups) {
|
30
|
+
const { data: existingGroup } = yield this.groupController
|
31
|
+
.setTenantAndProduct(this.directory.tenant, this.directory.product)
|
32
|
+
.get(group.id);
|
33
|
+
if (!existingGroup) {
|
34
|
+
yield this.createGroup(group);
|
35
|
+
}
|
36
|
+
else if (isGroupUpdated(existingGroup, group, this.provider.groupFieldsToExcludeWhenCompare)) {
|
37
|
+
yield this.updateGroup(group);
|
38
|
+
}
|
39
|
+
}
|
40
|
+
// Store groups to compare and delete later
|
41
|
+
groupsFromProvider.push(...groups);
|
42
|
+
nextPageOption = metadata;
|
43
|
+
} while (nextPageOption && nextPageOption.hasNextPage);
|
44
|
+
// Delete users that are not in the directory anymore
|
45
|
+
const existingGroups = yield this.getAllExistingGroups();
|
46
|
+
const groupsToDelete = compareAndFindDeletedGroups(existingGroups, groupsFromProvider);
|
47
|
+
yield this.deleteGroups(groupsToDelete);
|
48
|
+
});
|
49
|
+
}
|
50
|
+
// Get all the existing groups from the Jackson store
|
51
|
+
getAllExistingGroups() {
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
53
|
+
const existingGroups = [];
|
54
|
+
const pageLimit = 500;
|
55
|
+
let pageOffset = 0;
|
56
|
+
while (true) {
|
57
|
+
const { data: groups } = yield this.groupController
|
58
|
+
.setTenantAndProduct(this.directory.tenant, this.directory.product)
|
59
|
+
.getAll({
|
60
|
+
directoryId: this.directory.id,
|
61
|
+
pageOffset,
|
62
|
+
pageLimit,
|
63
|
+
});
|
64
|
+
if (!groups || groups.length === 0) {
|
65
|
+
break;
|
66
|
+
}
|
67
|
+
existingGroups.push(...groups);
|
68
|
+
if (groups.length < pageLimit) {
|
69
|
+
break;
|
70
|
+
}
|
71
|
+
pageOffset += pageLimit;
|
72
|
+
}
|
73
|
+
return existingGroups;
|
74
|
+
});
|
75
|
+
}
|
76
|
+
createGroup(group) {
|
77
|
+
return __awaiter(this, void 0, void 0, function* () {
|
78
|
+
yield this.handleRequest({
|
79
|
+
method: 'POST',
|
80
|
+
body: toGroupSCIMPayload(group),
|
81
|
+
resourceId: undefined,
|
82
|
+
});
|
83
|
+
});
|
84
|
+
}
|
85
|
+
updateGroup(group) {
|
86
|
+
return __awaiter(this, void 0, void 0, function* () {
|
87
|
+
yield this.handleRequest({
|
88
|
+
method: 'PUT',
|
89
|
+
body: toGroupSCIMPayload(group),
|
90
|
+
resourceId: group.id,
|
91
|
+
});
|
92
|
+
});
|
93
|
+
}
|
94
|
+
deleteGroups(groups) {
|
95
|
+
return __awaiter(this, void 0, void 0, function* () {
|
96
|
+
for (const group of groups) {
|
97
|
+
yield this.handleRequest({
|
98
|
+
method: 'DELETE',
|
99
|
+
body: toGroupSCIMPayload(group),
|
100
|
+
resourceId: group.id,
|
101
|
+
});
|
102
|
+
}
|
103
|
+
});
|
104
|
+
}
|
105
|
+
handleRequest(payload) {
|
106
|
+
return __awaiter(this, void 0, void 0, function* () {
|
107
|
+
const request = {
|
108
|
+
query: {},
|
109
|
+
body: payload.body,
|
110
|
+
resourceType: 'groups',
|
111
|
+
method: payload.method,
|
112
|
+
directoryId: this.directory.id,
|
113
|
+
apiSecret: this.directory.scim.secret,
|
114
|
+
resourceId: payload.resourceId,
|
115
|
+
};
|
116
|
+
yield this.requestHandler.handle(request, this.callback);
|
117
|
+
});
|
118
|
+
}
|
119
|
+
}
|
120
|
+
//# sourceMappingURL=syncGroups.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"syncGroups.js","sourceRoot":"","sources":["../../../../src/directory-sync/non-scim/syncGroups.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import type { Directory, User, IUsers, IRequestHandler, DirectorySyncRequest, EventCallback, IDirectoryProvider } from '../../typings';
|
2
|
+
interface SyncUserParams {
|
3
|
+
directory: Directory;
|
4
|
+
userController: IUsers;
|
5
|
+
callback: EventCallback;
|
6
|
+
provider: IDirectoryProvider;
|
7
|
+
requestHandler: IRequestHandler;
|
8
|
+
}
|
9
|
+
type HandleRequestParams = Pick<DirectorySyncRequest, 'method' | 'body' | 'resourceId'>;
|
10
|
+
export declare class SyncUsers {
|
11
|
+
private directory;
|
12
|
+
private userController;
|
13
|
+
private callback;
|
14
|
+
private provider;
|
15
|
+
private requestHandler;
|
16
|
+
constructor({ directory, userController, callback, provider, requestHandler }: SyncUserParams);
|
17
|
+
sync(): Promise<void>;
|
18
|
+
getAllExistingUsers(): Promise<User[]>;
|
19
|
+
createUser(user: User): Promise<void>;
|
20
|
+
updateUser(user: User): Promise<void>;
|
21
|
+
deleteUsers(users: User[]): Promise<void>;
|
22
|
+
handleRequest(payload: HandleRequestParams): Promise<void>;
|
23
|
+
}
|
24
|
+
export {};
|