@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,43 @@
|
|
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 { SSO } from './sso';
|
11
|
+
import { App } from './app';
|
12
|
+
import { SSOHandler } from '../../controller/sso-handler';
|
13
|
+
import { IdPLogin } from './idp-login';
|
14
|
+
// This is the main entry point for the Identity Federation module
|
15
|
+
const IdentityFederation = (_a) => __awaiter(void 0, [_a], void 0, function* ({ db, opts, ssoTraces, }) {
|
16
|
+
const appStore = db.store('samlfed:apps');
|
17
|
+
const sessionStore = db.store('oauth:session', opts.db.ttl);
|
18
|
+
const connectionStore = db.store('saml:config');
|
19
|
+
const ssoHandler = new SSOHandler({
|
20
|
+
connection: connectionStore,
|
21
|
+
session: sessionStore,
|
22
|
+
opts,
|
23
|
+
});
|
24
|
+
const app = new App({ store: appStore, opts });
|
25
|
+
const sso = new SSO({ app, ssoHandler, ssoTraces, opts });
|
26
|
+
const idpLogin = new IdPLogin({ app, ssoHandler, ssoTraces, opts });
|
27
|
+
const response = {
|
28
|
+
app,
|
29
|
+
sso,
|
30
|
+
idpLogin,
|
31
|
+
};
|
32
|
+
return response;
|
33
|
+
});
|
34
|
+
export default IdentityFederation;
|
35
|
+
export * from './types';
|
36
|
+
// SAML Federation flow:
|
37
|
+
// SP (Eg: Twilio Flex) --> SAML Jackson --> IdP (Eg: Okta) --> SAML Jackson --> SP (Eg: Twilio Flex)
|
38
|
+
// 1. SP send SAML Request to Jackson's SSO endpoint
|
39
|
+
// 2. Jackson process SAML Request and create a new session to store SP request information
|
40
|
+
// 3. Jackson create a new SAML Request and send it to chosen IdP
|
41
|
+
// 4. After successful authentication, IdP send (POST) SAML Response to Jackson's ACS endpoint
|
42
|
+
// 5. Jackson process SAML Response from the IdP and create a new SAML Response to send (POST) back to the SP's ACS endpoint
|
43
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ee/identity-federation/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,kEAAkE;AAClE,MAAM,kBAAkB,GAAG,KAQxB,EAAE,4CAR6B,EAChC,EAAE,EACF,IAAI,EACJ,SAAS,GAKV;IACC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEhD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;QAChC,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,YAAY;QACrB,IAAI;KACL,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG;QACf,GAAG;QACH,GAAG;QACH,QAAQ;KACT,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA,CAAC;AAEF,eAAe,kBAAkB,CAAC;AAElC,cAAc,SAAS,CAAC;AAExB,wBAAwB;AACxB,qGAAqG;AACrG,oDAAoD;AACpD,2FAA2F;AAC3F,iEAAiE;AACjE,8FAA8F;AAC9F,4HAA4H"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { App } from './app';
|
2
|
+
import { SSOHandler } from '../../controller/sso-handler';
|
3
|
+
import type { JacksonOption, SSOTracesInstance } from '../../typings';
|
4
|
+
export declare class SSO {
|
5
|
+
private app;
|
6
|
+
private ssoHandler;
|
7
|
+
private ssoTraces;
|
8
|
+
private opts;
|
9
|
+
constructor({ app, ssoHandler, ssoTraces, opts, }: {
|
10
|
+
app: App;
|
11
|
+
ssoHandler: SSOHandler;
|
12
|
+
ssoTraces: SSOTracesInstance;
|
13
|
+
opts: JacksonOption;
|
14
|
+
});
|
15
|
+
getAuthorizeUrl: ({ request, relayState, idp_hint, samlBinding, }: {
|
16
|
+
request: string;
|
17
|
+
relayState: string;
|
18
|
+
samlBinding: "HTTP-POST" | "HTTP-Redirect";
|
19
|
+
idp_hint?: string;
|
20
|
+
}) => Promise<{
|
21
|
+
redirect_url: any;
|
22
|
+
authorize_form: any;
|
23
|
+
}>;
|
24
|
+
}
|
@@ -0,0 +1,124 @@
|
|
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 saml from '@boxyhq/saml20';
|
11
|
+
import { JacksonError } from '../../controller/error';
|
12
|
+
import { getErrorMessage, isConnectionActive } from '../../controller/utils';
|
13
|
+
import { throwIfInvalidLicense } from '../common/checkLicense';
|
14
|
+
const isSAMLConnection = (connection) => {
|
15
|
+
return 'idpMetadata' in connection;
|
16
|
+
};
|
17
|
+
export class SSO {
|
18
|
+
constructor({ app, ssoHandler, ssoTraces, opts, }) {
|
19
|
+
// Accept the SAML Request from Service Provider, and create a new SAML Request to be sent to Identity Provider
|
20
|
+
this.getAuthorizeUrl = (_a) => __awaiter(this, [_a], void 0, function* ({ request, relayState, idp_hint, samlBinding, }) {
|
21
|
+
yield throwIfInvalidLicense(this.opts.boxyhqLicenseKey);
|
22
|
+
const isPostBinding = samlBinding === 'HTTP-POST';
|
23
|
+
let connection;
|
24
|
+
let app;
|
25
|
+
let id, acsUrl, entityId, publicKey, providerName, decodedRequest;
|
26
|
+
const context = {
|
27
|
+
isSAMLFederated: true,
|
28
|
+
relayState,
|
29
|
+
};
|
30
|
+
try {
|
31
|
+
decodedRequest = yield saml.decodeBase64(request, !isPostBinding);
|
32
|
+
context.samlRequest = decodedRequest || request;
|
33
|
+
const parsedSAMLRequest = yield saml.parseSAMLRequest(decodedRequest, isPostBinding);
|
34
|
+
id = parsedSAMLRequest.id;
|
35
|
+
entityId = parsedSAMLRequest.audience;
|
36
|
+
publicKey = parsedSAMLRequest.publicKey;
|
37
|
+
providerName = parsedSAMLRequest.providerName;
|
38
|
+
context.entityId = entityId;
|
39
|
+
context.providerName = providerName;
|
40
|
+
// Verify the request if it is signed
|
41
|
+
if (publicKey && !saml.hasValidSignature(decodedRequest, publicKey, null)) {
|
42
|
+
throw new JacksonError('Invalid SAML Request signature.', 400);
|
43
|
+
}
|
44
|
+
app = yield this.app.getByEntityId(entityId);
|
45
|
+
acsUrl = parsedSAMLRequest.acsUrl || app.acsUrl; // acsUrl is optional in the SAMLRequest
|
46
|
+
context.tenant = app.tenant;
|
47
|
+
context.product = app.product;
|
48
|
+
context.acsUrl = acsUrl;
|
49
|
+
if (app.acsUrl !== acsUrl) {
|
50
|
+
throw new JacksonError("Assertion Consumer Service URL doesn't match.", 400);
|
51
|
+
}
|
52
|
+
const response = yield this.ssoHandler.resolveConnection({
|
53
|
+
tenant: app.tenant,
|
54
|
+
product: app.product,
|
55
|
+
idp_hint,
|
56
|
+
authFlow: 'saml',
|
57
|
+
idFedAppId: app.id,
|
58
|
+
originalParams: {
|
59
|
+
RelayState: relayState,
|
60
|
+
SAMLRequest: request,
|
61
|
+
samlBinding,
|
62
|
+
},
|
63
|
+
tenants: app.tenants,
|
64
|
+
});
|
65
|
+
// If there is a redirect URL, then we need to redirect to that URL
|
66
|
+
if ('redirectUrl' in response) {
|
67
|
+
return {
|
68
|
+
redirect_url: response.redirectUrl,
|
69
|
+
authorize_form: null,
|
70
|
+
};
|
71
|
+
}
|
72
|
+
// If there is a connection, use that connection
|
73
|
+
if ('connection' in response) {
|
74
|
+
connection = response.connection;
|
75
|
+
}
|
76
|
+
if (!connection) {
|
77
|
+
throw new JacksonError('No SSO connection found.', 404);
|
78
|
+
}
|
79
|
+
context.clientID = connection.clientID;
|
80
|
+
if (!isConnectionActive(connection)) {
|
81
|
+
throw new JacksonError('SSO connection is deactivated. Please contact your administrator.', 403);
|
82
|
+
}
|
83
|
+
const requestParams = {
|
84
|
+
id,
|
85
|
+
acsUrl,
|
86
|
+
entityId,
|
87
|
+
publicKey,
|
88
|
+
providerName,
|
89
|
+
relayState,
|
90
|
+
tenant: app.tenant,
|
91
|
+
product: app.product,
|
92
|
+
};
|
93
|
+
return isSAMLConnection(connection)
|
94
|
+
? yield this.ssoHandler.createSAMLRequest({
|
95
|
+
connection,
|
96
|
+
requestParams,
|
97
|
+
mappings: app.mappings,
|
98
|
+
})
|
99
|
+
: yield this.ssoHandler.createOIDCRequest({
|
100
|
+
connection,
|
101
|
+
requestParams,
|
102
|
+
mappings: app.mappings,
|
103
|
+
ssoTraces: {
|
104
|
+
instance: this.ssoTraces,
|
105
|
+
context,
|
106
|
+
},
|
107
|
+
});
|
108
|
+
}
|
109
|
+
catch (err) {
|
110
|
+
const error_description = getErrorMessage(err);
|
111
|
+
this.ssoTraces.saveTrace({
|
112
|
+
error: error_description,
|
113
|
+
context,
|
114
|
+
});
|
115
|
+
throw err;
|
116
|
+
}
|
117
|
+
});
|
118
|
+
this.app = app;
|
119
|
+
this.ssoHandler = ssoHandler;
|
120
|
+
this.ssoTraces = ssoTraces;
|
121
|
+
this.opts = opts;
|
122
|
+
}
|
123
|
+
}
|
124
|
+
//# sourceMappingURL=sso.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sso.js","sourceRoot":"","sources":["../../../../src/ee/identity-federation/sso.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import IdentityFederation from '.';
|
2
|
+
export type IIdentityFederationController = Awaited<ReturnType<typeof IdentityFederation>>;
|
3
|
+
export type AttributeMapping = {
|
4
|
+
key: string;
|
5
|
+
value: string;
|
6
|
+
};
|
7
|
+
export type IdentityFederationApp = {
|
8
|
+
id: string;
|
9
|
+
type?: string;
|
10
|
+
clientID?: string;
|
11
|
+
clientSecret?: string;
|
12
|
+
redirectUrl?: string[] | string;
|
13
|
+
name: string;
|
14
|
+
tenant: string;
|
15
|
+
product: string;
|
16
|
+
acsUrl: string;
|
17
|
+
entityId: string;
|
18
|
+
logoUrl: string | null;
|
19
|
+
faviconUrl: string | null;
|
20
|
+
primaryColor: string | null;
|
21
|
+
tenants?: string[];
|
22
|
+
mappings?: AttributeMapping[] | null;
|
23
|
+
};
|
24
|
+
export type IdentityFederationAppWithMetadata = IdentityFederationApp & {
|
25
|
+
metadata: {
|
26
|
+
entityId: string;
|
27
|
+
ssoUrl: string;
|
28
|
+
x509cert: string;
|
29
|
+
xml: string;
|
30
|
+
};
|
31
|
+
};
|
32
|
+
export type AppRequestParams = {
|
33
|
+
id: string;
|
34
|
+
} | {
|
35
|
+
tenant: string;
|
36
|
+
product: string;
|
37
|
+
type?: string;
|
38
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ee/identity-federation/types.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { JacksonOption, OryConfig, OryRes } from '../../typings';
|
2
|
+
import { ProductController } from '../product';
|
3
|
+
export declare class OryController {
|
4
|
+
private opts;
|
5
|
+
private productController;
|
6
|
+
constructor({ opts, productController }: {
|
7
|
+
opts: JacksonOption;
|
8
|
+
productController: ProductController;
|
9
|
+
});
|
10
|
+
private getOrgName;
|
11
|
+
private getIssuerUrl;
|
12
|
+
private addOrUpdateConnection;
|
13
|
+
private createOrganization;
|
14
|
+
private sanitizeConfig;
|
15
|
+
createConnection(config: OryConfig, tenant: string, product: string): Promise<OryRes | null>;
|
16
|
+
updateConnection(config: OryConfig, tenant: string, product: string): Promise<OryRes | null>;
|
17
|
+
private isEnabled;
|
18
|
+
}
|
@@ -0,0 +1,195 @@
|
|
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 axios from 'axios';
|
11
|
+
import { throwIfInvalidLicense } from '../common/checkLicense';
|
12
|
+
const basePath = 'https://api.console.ory.sh';
|
13
|
+
const providerId = 'sso_boxyhq';
|
14
|
+
const dataMapping = 'base64://bG9jYWwgY2xhaW1zID0gewogIGVtYWlsX3ZlcmlmaWVkOiB0cnVlLAp9ICsgc3RkLmV4dFZhcignY2xhaW1zJyk7Cgp7CiAgaWRlbnRpdHk6IHsKICAgIHRyYWl0czogewogICAgICBbaWYgJ2VtYWlsJyBpbiBjbGFpbXMgJiYgY2xhaW1zLmVtYWlsX3ZlcmlmaWVkIHRoZW4gJ2VtYWlsJyBlbHNlIG51bGxdOiBjbGFpbXMuZW1haWwsCiAgICB9LAogIH0sCn0=';
|
15
|
+
const issuerUrl = 'https://sso.eu.boxyhq.com';
|
16
|
+
export class OryController {
|
17
|
+
constructor({ opts, productController }) {
|
18
|
+
this.opts = opts;
|
19
|
+
this.productController = productController;
|
20
|
+
}
|
21
|
+
getOrgName(tenant, product) {
|
22
|
+
return this.opts.boxyhqHosted ? tenant : `${tenant}:${product}`;
|
23
|
+
}
|
24
|
+
getIssuerUrl() {
|
25
|
+
if (this.opts.boxyhqHosted) {
|
26
|
+
return issuerUrl;
|
27
|
+
}
|
28
|
+
else {
|
29
|
+
return this.opts.externalUrl;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
addOrUpdateConnection(config, tenant, product) {
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
34
|
+
const project = yield axios.get(`${basePath}/projects/${config.projectId}`, {
|
35
|
+
headers: {
|
36
|
+
Authorization: `Bearer ${config.sdkToken}`,
|
37
|
+
},
|
38
|
+
});
|
39
|
+
let index = '-';
|
40
|
+
try {
|
41
|
+
for (const idx in project.data.services.identity.config.selfservice.methods.oidc.config.providers) {
|
42
|
+
const provider = project.data.services.identity.config.selfservice.methods.oidc.config.providers[idx];
|
43
|
+
if (provider.id === providerId && provider.organization_id === config.organizationId) {
|
44
|
+
index = idx;
|
45
|
+
break;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
49
|
+
}
|
50
|
+
catch (err) {
|
51
|
+
// empty
|
52
|
+
}
|
53
|
+
const op = index === '-' ? 'add' : 'replace';
|
54
|
+
yield axios.patch(`${basePath}/normalized/projects/${config.projectId}/revision/${project.data.revision_id}`, [
|
55
|
+
{ op: 'replace', path: '/kratos_selfservice_methods_oidc_enabled', value: true },
|
56
|
+
{
|
57
|
+
op,
|
58
|
+
path: `/kratos_selfservice_methods_oidc_config_providers/${index}`,
|
59
|
+
value: {
|
60
|
+
provider_id: providerId,
|
61
|
+
provider: 'generic',
|
62
|
+
label: 'SSO',
|
63
|
+
client_id: `tenant=${tenant}&product=${product}`,
|
64
|
+
client_secret: this.opts.clientSecretVerifier,
|
65
|
+
organization_id: config.organizationId,
|
66
|
+
scope: [],
|
67
|
+
mapper_url: dataMapping,
|
68
|
+
additional_id_token_audiences: [],
|
69
|
+
issuer_url: this.getIssuerUrl(),
|
70
|
+
},
|
71
|
+
},
|
72
|
+
], {
|
73
|
+
headers: {
|
74
|
+
Authorization: `Bearer ${config.sdkToken}`,
|
75
|
+
},
|
76
|
+
});
|
77
|
+
});
|
78
|
+
}
|
79
|
+
createOrganization(config, label) {
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
81
|
+
var _a;
|
82
|
+
if (!config.sdkToken || !config.projectId) {
|
83
|
+
throw new Error('Ory SDK Token or Project ID not set');
|
84
|
+
}
|
85
|
+
if (config && config.organizationId) {
|
86
|
+
try {
|
87
|
+
const res = yield axios.get(`${basePath}/projects/${config.projectId}/organizations/${config.organizationId}`, {
|
88
|
+
headers: {
|
89
|
+
Authorization: `Bearer ${config.sdkToken}`,
|
90
|
+
},
|
91
|
+
});
|
92
|
+
return res.data.organization.id;
|
93
|
+
}
|
94
|
+
catch (err) {
|
95
|
+
// if org doesn't exist fall through to section that creates it below
|
96
|
+
if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) !== 404) {
|
97
|
+
throw err;
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
const res = yield axios.post(`${basePath}/projects/${config.projectId}/organizations`, {
|
102
|
+
label,
|
103
|
+
domains: config.domains,
|
104
|
+
}, {
|
105
|
+
headers: {
|
106
|
+
Authorization: `Bearer ${config.sdkToken}`,
|
107
|
+
},
|
108
|
+
});
|
109
|
+
return res.data.id;
|
110
|
+
});
|
111
|
+
}
|
112
|
+
sanitizeConfig(config, tenant) {
|
113
|
+
return __awaiter(this, void 0, void 0, function* () {
|
114
|
+
var _a, _b;
|
115
|
+
if (!config.sdkToken) {
|
116
|
+
config.sdkToken = (_a = this.opts.ory) === null || _a === void 0 ? void 0 : _a.sdkToken;
|
117
|
+
}
|
118
|
+
if (!config.projectId) {
|
119
|
+
config.projectId = (_b = this.opts.ory) === null || _b === void 0 ? void 0 : _b.projectId;
|
120
|
+
}
|
121
|
+
config.domains = config.domains || [];
|
122
|
+
if (!config.domains.includes(tenant)) {
|
123
|
+
config.domains.push(tenant);
|
124
|
+
}
|
125
|
+
return config;
|
126
|
+
});
|
127
|
+
}
|
128
|
+
createConnection(config, tenant, product) {
|
129
|
+
return __awaiter(this, void 0, void 0, function* () {
|
130
|
+
if (!(yield this.isEnabled(config, tenant, product))) {
|
131
|
+
return null;
|
132
|
+
}
|
133
|
+
const organizationId = yield this.createOrganization(config, this.getOrgName(tenant, product));
|
134
|
+
config.organizationId = organizationId;
|
135
|
+
let error;
|
136
|
+
try {
|
137
|
+
yield this.addOrUpdateConnection(config, tenant, product);
|
138
|
+
}
|
139
|
+
catch (err) {
|
140
|
+
error = err;
|
141
|
+
}
|
142
|
+
return { projectId: config.projectId, domains: config.domains, organizationId, error };
|
143
|
+
});
|
144
|
+
}
|
145
|
+
updateConnection(config, tenant, product) {
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
147
|
+
if (!(yield this.isEnabled(config, tenant, product))) {
|
148
|
+
return null;
|
149
|
+
}
|
150
|
+
const organizationId = yield this.createOrganization(config, this.getOrgName(tenant, product));
|
151
|
+
let error;
|
152
|
+
try {
|
153
|
+
yield this.addOrUpdateConnection(config, tenant, product);
|
154
|
+
}
|
155
|
+
catch (err) {
|
156
|
+
error = err;
|
157
|
+
}
|
158
|
+
return { projectId: config.projectId, domains: config.domains, organizationId, error };
|
159
|
+
});
|
160
|
+
}
|
161
|
+
isEnabled(config, tenant, product) {
|
162
|
+
return __awaiter(this, void 0, void 0, function* () {
|
163
|
+
var _a, _b;
|
164
|
+
if (this.opts.boxyhqHosted) {
|
165
|
+
const productConfig = yield this.productController.get(product);
|
166
|
+
if (!productConfig ||
|
167
|
+
!productConfig.ory ||
|
168
|
+
!productConfig.ory.sdkToken ||
|
169
|
+
!productConfig.ory.projectId) {
|
170
|
+
return false;
|
171
|
+
}
|
172
|
+
config.sdkToken = productConfig.ory.sdkToken;
|
173
|
+
config.projectId = productConfig.ory.projectId;
|
174
|
+
this.sanitizeConfig(config, tenant);
|
175
|
+
return true;
|
176
|
+
}
|
177
|
+
else {
|
178
|
+
if (!((_a = this.opts.ory) === null || _a === void 0 ? void 0 : _a.sdkToken) || !((_b = this.opts.ory) === null || _b === void 0 ? void 0 : _b.projectId)) {
|
179
|
+
return false;
|
180
|
+
}
|
181
|
+
try {
|
182
|
+
yield throwIfInvalidLicense(this.opts.boxyhqLicenseKey);
|
183
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
184
|
+
}
|
185
|
+
catch (err) {
|
186
|
+
console.error('Ory is not enabled because of invalid license');
|
187
|
+
return false;
|
188
|
+
}
|
189
|
+
this.sanitizeConfig(config, tenant);
|
190
|
+
return true;
|
191
|
+
}
|
192
|
+
});
|
193
|
+
}
|
194
|
+
}
|
195
|
+
//# sourceMappingURL=ory.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ory.js","sourceRoot":"","sources":["../../../../src/ee/ory/ory.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import type { Storable, JacksonOption, ProductConfig } from '../../typings';
|
2
|
+
export declare class ProductController {
|
3
|
+
private productStore;
|
4
|
+
private opts;
|
5
|
+
constructor({ productStore, opts }: {
|
6
|
+
productStore: Storable;
|
7
|
+
opts: JacksonOption;
|
8
|
+
});
|
9
|
+
get(productId: string): Promise<ProductConfig>;
|
10
|
+
upsert(params: Partial<ProductConfig> & {
|
11
|
+
id: string;
|
12
|
+
}): Promise<void>;
|
13
|
+
delete(productId: string): Promise<void>;
|
14
|
+
}
|
@@ -0,0 +1,45 @@
|
|
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 { JacksonError } from '../../controller/error';
|
11
|
+
import { throwIfInvalidLicense } from '../common/checkLicense';
|
12
|
+
export class ProductController {
|
13
|
+
constructor({ productStore, opts }) {
|
14
|
+
this.productStore = productStore;
|
15
|
+
this.opts = opts;
|
16
|
+
}
|
17
|
+
get(productId) {
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
19
|
+
yield throwIfInvalidLicense(this.opts.boxyhqLicenseKey);
|
20
|
+
const productConfig = (yield this.productStore.get(productId));
|
21
|
+
// if (!productConfig) {
|
22
|
+
// console.error(`Product config not found for ${productId}`);
|
23
|
+
// }
|
24
|
+
return Object.assign(Object.assign({}, productConfig), { id: productId, name: (productConfig === null || productConfig === void 0 ? void 0 : productConfig.name) || null, teamId: (productConfig === null || productConfig === void 0 ? void 0 : productConfig.teamId) || null, teamName: (productConfig === null || productConfig === void 0 ? void 0 : productConfig.teamName) || null, logoUrl: (productConfig === null || productConfig === void 0 ? void 0 : productConfig.logoUrl) || null, faviconUrl: (productConfig === null || productConfig === void 0 ? void 0 : productConfig.faviconUrl) || null, companyName: (productConfig === null || productConfig === void 0 ? void 0 : productConfig.companyName) || null, primaryColor: (productConfig === null || productConfig === void 0 ? void 0 : productConfig.primaryColor) || '#25c2a0' });
|
25
|
+
});
|
26
|
+
}
|
27
|
+
upsert(params) {
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
29
|
+
yield throwIfInvalidLicense(this.opts.boxyhqLicenseKey);
|
30
|
+
if (!('id' in params)) {
|
31
|
+
throw new JacksonError('Provide a product id', 400);
|
32
|
+
}
|
33
|
+
const productConfig = (yield this.productStore.get(params.id));
|
34
|
+
const toUpdate = productConfig ? Object.assign(Object.assign({}, productConfig), params) : params;
|
35
|
+
yield this.productStore.put(params.id, toUpdate);
|
36
|
+
});
|
37
|
+
}
|
38
|
+
delete(productId) {
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
40
|
+
yield throwIfInvalidLicense(this.opts.boxyhqLicenseKey);
|
41
|
+
yield this.productStore.delete(productId);
|
42
|
+
});
|
43
|
+
}
|
44
|
+
}
|
45
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ee/product/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,MAAM,OAAO,iBAAiB;IAI5B,YAAY,EAAE,YAAY,EAAE,IAAI,EAAmD;QACjF,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEY,GAAG,CAAC,SAAiB;;YAChC,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAExD,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAkB,CAAC;YAEhF,wBAAwB;YACxB,gEAAgE;YAChE,IAAI;YAEJ,uCACK,aAAa,KAChB,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,KAAI,IAAI,EACjC,MAAM,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,KAAI,IAAI,EACrC,QAAQ,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,KAAI,IAAI,EACzC,OAAO,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,KAAI,IAAI,EACvC,UAAU,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,KAAI,IAAI,EAC7C,WAAW,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,KAAI,IAAI,EAC/C,YAAY,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY,KAAI,SAAS,IACtD;QACJ,CAAC;KAAA;IAEY,MAAM,CAAC,MAA+C;;YACjE,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAExD,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAkB,CAAC;YAEhF,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,iCAAM,aAAa,GAAK,MAAM,EAAG,CAAC,CAAC,MAAM,CAAC;YAE1E,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC;KAAA;IAEY,MAAM,CAAC,SAAiB;;YACnC,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAExD,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;KAAA;CACF"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import axios from 'axios';
|
2
|
+
const retry = 3;
|
3
|
+
const retryDelay = 3000;
|
4
|
+
const axiosInstance = axios.create();
|
5
|
+
// Axios interceptors to handle the Webhook retries
|
6
|
+
axiosInstance.interceptors.response.use(undefined, (err) => {
|
7
|
+
const config = err.config;
|
8
|
+
if (!config) {
|
9
|
+
return Promise.reject(err);
|
10
|
+
}
|
11
|
+
config.__retryCount = config.__retryCount || 0;
|
12
|
+
if (config.__retryCount >= retry) {
|
13
|
+
return Promise.reject(err);
|
14
|
+
}
|
15
|
+
config.__retryCount += 1;
|
16
|
+
const backoff = new Promise(function (resolve) {
|
17
|
+
setTimeout(function () {
|
18
|
+
resolve(1);
|
19
|
+
}, retryDelay);
|
20
|
+
});
|
21
|
+
return backoff.then(function () {
|
22
|
+
console.info(`Retrying sending webhook event to ${config.url}... Attempt ${config.__retryCount}`);
|
23
|
+
return axiosInstance(config);
|
24
|
+
});
|
25
|
+
});
|
26
|
+
export default axiosInstance;
|
27
|
+
//# sourceMappingURL=axios.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/event/axios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,KAAK,GAAG,CAAC,CAAC;AAChB,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AAErC,mDAAmD;AACnD,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAQ,EAAE,EAAE;IAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAE/C,IAAI,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,OAAO;QAC3C,UAAU,CAAC;YACT,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,GAAG,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import type { Directory, JacksonOption, SAMLSSORecord, EventType, SSOConnectionEventType, Webhook, EventPayloadSchema, OIDCSSORecord } from '../typings';
|
2
|
+
export default class Event {
|
3
|
+
private webhook;
|
4
|
+
private dsync;
|
5
|
+
constructor({ opts }: {
|
6
|
+
opts: JacksonOption;
|
7
|
+
});
|
8
|
+
notify<T extends EventType>(event: T, data: T extends SSOConnectionEventType ? SAMLSSORecord | OIDCSSORecord : Directory): Promise<any>;
|
9
|
+
private constructPayload;
|
10
|
+
sendWebhookEvent(webhook: Webhook | undefined, payload: EventPayloadSchema): Promise<any>;
|
11
|
+
}
|
@@ -0,0 +1,53 @@
|
|
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 { sendPayloadToWebhook } from './webhook';
|
11
|
+
import { transformSAMLSSOConnection, transformDirectoryConnection, transformOIDCSSOConnection, } from './utils';
|
12
|
+
export default class Event {
|
13
|
+
constructor({ opts }) {
|
14
|
+
this.webhook = opts.webhook;
|
15
|
+
this.dsync = opts.dsync;
|
16
|
+
}
|
17
|
+
notify(event, data) {
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
19
|
+
const payload = this.constructPayload(event, data);
|
20
|
+
return this.sendWebhookEvent(this.webhook, payload);
|
21
|
+
});
|
22
|
+
}
|
23
|
+
constructPayload(event, data) {
|
24
|
+
let transformedData;
|
25
|
+
if ('idpMetadata' in data) {
|
26
|
+
transformedData = transformSAMLSSOConnection(data);
|
27
|
+
}
|
28
|
+
else if ('oidcProvider' in data) {
|
29
|
+
transformedData = transformOIDCSSOConnection(data);
|
30
|
+
}
|
31
|
+
else {
|
32
|
+
transformedData = transformDirectoryConnection(data);
|
33
|
+
}
|
34
|
+
const { tenant, product } = data;
|
35
|
+
const payload = {
|
36
|
+
event,
|
37
|
+
tenant,
|
38
|
+
product,
|
39
|
+
data: transformedData,
|
40
|
+
};
|
41
|
+
return payload;
|
42
|
+
}
|
43
|
+
sendWebhookEvent(webhook, payload) {
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
45
|
+
var _a;
|
46
|
+
if (!(webhook === null || webhook === void 0 ? void 0 : webhook.endpoint) || !webhook.secret) {
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
return yield sendPayloadToWebhook(webhook, payload, (_a = this.dsync) === null || _a === void 0 ? void 0 : _a.debugWebhooks);
|
50
|
+
});
|
51
|
+
}
|
52
|
+
}
|
53
|
+
//# sourceMappingURL=index.js.map
|