@boxyhq/saml-jackson 1.4.0 → 1.5.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.
Files changed (66) hide show
  1. package/dist/controller/analytics.d.ts +12 -0
  2. package/dist/controller/analytics.js +66 -0
  3. package/dist/controller/analytics.js.map +1 -0
  4. package/dist/controller/api.js +12 -1
  5. package/dist/controller/api.js.map +1 -1
  6. package/dist/controller/oauth.d.ts +3 -2
  7. package/dist/controller/oauth.js +132 -280
  8. package/dist/controller/oauth.js.map +1 -1
  9. package/dist/controller/saml-handler.d.ts +38 -0
  10. package/dist/controller/saml-handler.js +166 -0
  11. package/dist/controller/saml-handler.js.map +1 -0
  12. package/dist/controller/setup-link.d.ts +7 -7
  13. package/dist/controller/setup-link.js +56 -67
  14. package/dist/controller/setup-link.js.map +1 -1
  15. package/dist/controller/utils.d.ts +13 -1
  16. package/dist/controller/utils.js +45 -3
  17. package/dist/controller/utils.js.map +1 -1
  18. package/dist/db/db.d.ts +1 -1
  19. package/dist/db/db.js +2 -2
  20. package/dist/db/db.js.map +1 -1
  21. package/dist/db/mem.d.ts +2 -2
  22. package/dist/db/mem.js +27 -6
  23. package/dist/db/mem.js.map +1 -1
  24. package/dist/db/mongo.d.ts +2 -2
  25. package/dist/db/mongo.js +14 -8
  26. package/dist/db/mongo.js.map +1 -1
  27. package/dist/db/redis.d.ts +2 -2
  28. package/dist/db/redis.js +57 -5
  29. package/dist/db/redis.js.map +1 -1
  30. package/dist/db/sql/sql.d.ts +2 -2
  31. package/dist/db/sql/sql.js +19 -9
  32. package/dist/db/sql/sql.js.map +1 -1
  33. package/dist/db/store.js +2 -2
  34. package/dist/db/store.js.map +1 -1
  35. package/dist/db/utils.js +0 -1
  36. package/dist/db/utils.js.map +1 -1
  37. package/dist/directory-sync/Base.js +2 -2
  38. package/dist/directory-sync/Base.js.map +1 -1
  39. package/dist/directory-sync/WebhookEventsLogger.d.ts +4 -1
  40. package/dist/directory-sync/WebhookEventsLogger.js +3 -3
  41. package/dist/directory-sync/WebhookEventsLogger.js.map +1 -1
  42. package/dist/ee/common/checkLicense.d.ts +2 -0
  43. package/dist/ee/common/checkLicense.js +19 -0
  44. package/dist/ee/common/checkLicense.js.map +1 -0
  45. package/dist/ee/federated-saml/app.d.ts +19 -0
  46. package/dist/ee/federated-saml/app.js +126 -0
  47. package/dist/ee/federated-saml/app.js.map +1 -0
  48. package/dist/ee/federated-saml/index.d.ts +12 -0
  49. package/dist/ee/federated-saml/index.js +56 -0
  50. package/dist/ee/federated-saml/index.js.map +1 -0
  51. package/dist/ee/federated-saml/sso.d.ts +17 -0
  52. package/dist/ee/federated-saml/sso.js +76 -0
  53. package/dist/ee/federated-saml/sso.js.map +1 -0
  54. package/dist/ee/federated-saml/types.d.ts +18 -0
  55. package/dist/ee/federated-saml/types.js +3 -0
  56. package/dist/ee/federated-saml/types.js.map +1 -0
  57. package/dist/index.d.ts +7 -0
  58. package/dist/index.js +18 -2
  59. package/dist/index.js.map +1 -1
  60. package/dist/saml/lib.d.ts +31 -0
  61. package/dist/saml/lib.js +217 -0
  62. package/dist/saml/lib.js.map +1 -0
  63. package/dist/typings.d.ts +28 -21
  64. package/dist/typings.js +15 -0
  65. package/dist/typings.js.map +1 -1
  66. package/package.json +12 -16
@@ -0,0 +1,19 @@
1
+ import type { Storable, JacksonOption, SAMLFederationAppWithMetadata, SAMLFederationApp } from '../../typings';
2
+ export declare class App {
3
+ protected store: Storable;
4
+ private opts;
5
+ constructor({ store, opts }: {
6
+ store: Storable;
7
+ opts: JacksonOption;
8
+ });
9
+ create({ name, tenant, product, acsUrl, entityId, }: Omit<SAMLFederationApp, 'id'>): Promise<SAMLFederationApp>;
10
+ get(id: string): Promise<SAMLFederationApp>;
11
+ getByEntityId(entityId: string): Promise<SAMLFederationApp>;
12
+ update(id: string, { acsUrl, entityId, name }: Partial<Omit<SAMLFederationApp, 'id'>>): Promise<SAMLFederationApp>;
13
+ getAll({ pageOffset, pageLimit, }: {
14
+ pageOffset?: number;
15
+ pageLimit?: number;
16
+ }): Promise<SAMLFederationApp[]>;
17
+ delete(id: string): Promise<void>;
18
+ getMetadata(): Promise<Pick<SAMLFederationAppWithMetadata, 'metadata'>['metadata']>;
19
+ }
@@ -0,0 +1,126 @@
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.App = void 0;
13
+ const utils_1 = require("../../controller/utils");
14
+ const lib_1 = require("../../saml/lib");
15
+ const error_1 = require("../../controller/error");
16
+ const x509_1 = require("../../saml/x509");
17
+ const utils_2 = require("../../controller/utils");
18
+ class App {
19
+ constructor({ store, opts }) {
20
+ this.store = store;
21
+ this.opts = opts;
22
+ }
23
+ // Create a new SAML Federation app for the tenant and product
24
+ create({ name, tenant, product, acsUrl, entityId, }) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ if (!tenant || !product || !acsUrl || !entityId || !name) {
27
+ throw new error_1.JacksonError('Missing required parameters. Required parameters are: name, tenant, product, acsUrl, entityId', 400);
28
+ }
29
+ (0, utils_2.validateTenantAndProduct)(tenant, product);
30
+ const id = (0, utils_1.appID)(tenant, product);
31
+ const app = {
32
+ id,
33
+ name,
34
+ tenant,
35
+ product,
36
+ acsUrl,
37
+ entityId,
38
+ };
39
+ yield this.store.put(id, app, {
40
+ name: utils_2.IndexNames.EntityID,
41
+ value: entityId,
42
+ });
43
+ return Object.assign({}, app);
44
+ });
45
+ }
46
+ // Get an app by tenant and product
47
+ get(id) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ if (!id) {
50
+ throw new error_1.JacksonError('Missing required parameters. Required parameters are: id', 400);
51
+ }
52
+ const app = yield this.store.get(id);
53
+ if (!app) {
54
+ throw new error_1.JacksonError('SAML Federation app not found', 404);
55
+ }
56
+ return Object.assign({}, app);
57
+ });
58
+ }
59
+ // Get the app by SP EntityId
60
+ getByEntityId(entityId) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ if (!entityId) {
63
+ throw new error_1.JacksonError('Missing required parameters. Required parameters are: entityId', 400);
64
+ }
65
+ const apps = yield this.store.getByIndex({
66
+ name: utils_2.IndexNames.EntityID,
67
+ value: entityId,
68
+ });
69
+ if (!apps || apps.length === 0) {
70
+ throw new error_1.JacksonError('SAML Federation app not found', 404);
71
+ }
72
+ return Object.assign({}, apps[0]);
73
+ });
74
+ }
75
+ // Update the app
76
+ update(id, { acsUrl, entityId, name }) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ if (!id && (!acsUrl || !entityId || !name)) {
79
+ throw new error_1.JacksonError("Missing required parameters. Required parameters are: id, acsUrl, entityId, name'", 400);
80
+ }
81
+ const app = yield this.get(id);
82
+ const updatedApp = Object.assign(Object.assign({}, app), { name: name || app.name, acsUrl: acsUrl || app.acsUrl, entityId: entityId || app.entityId });
83
+ yield this.store.put(id, updatedApp);
84
+ return Object.assign({}, updatedApp);
85
+ });
86
+ }
87
+ // Get all apps
88
+ getAll({ pageOffset, pageLimit, }) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const apps = (yield this.store.getAll(pageOffset, pageLimit));
91
+ return apps.map((app) => (Object.assign({}, app)));
92
+ });
93
+ }
94
+ // Delete the app
95
+ delete(id) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ if (!id) {
98
+ throw new error_1.JacksonError('Missing required parameters. Required parameters are: id', 400);
99
+ }
100
+ yield this.get(id);
101
+ yield this.store.delete(id);
102
+ return;
103
+ });
104
+ }
105
+ // Get the metadata for the app
106
+ getMetadata() {
107
+ return __awaiter(this, void 0, void 0, function* () {
108
+ const { publicKey } = yield (0, x509_1.getDefaultCertificate)();
109
+ const ssoUrl = `${this.opts.externalUrl}/api/federated-saml/sso`;
110
+ const entityId = `${this.opts.samlAudience}`;
111
+ const xml = yield (0, lib_1.createMetadataXML)({
112
+ entityId,
113
+ ssoUrl,
114
+ x509cert: publicKey,
115
+ });
116
+ return {
117
+ xml,
118
+ entityId,
119
+ ssoUrl,
120
+ x509cert: publicKey,
121
+ };
122
+ });
123
+ }
124
+ }
125
+ exports.App = App;
126
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ee/federated-saml/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { SSO } from './sso';
2
+ import { App } from './app';
3
+ import type { JacksonOption } from '../../typings';
4
+ declare const SAMLFederation: ({ db, opts }: {
5
+ db: any;
6
+ opts: JacksonOption;
7
+ }) => Promise<{
8
+ app: App;
9
+ sso: SSO;
10
+ }>;
11
+ export default SAMLFederation;
12
+ export * from './types';
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const sso_1 = require("./sso");
27
+ const app_1 = require("./app");
28
+ const saml_handler_1 = require("../../controller/saml-handler");
29
+ // This is the main entry point for the SAML Federation module
30
+ const SAMLFederation = ({ db, opts }) => __awaiter(void 0, void 0, void 0, function* () {
31
+ const appStore = db.store('samlfed:apps');
32
+ const sessionStore = db.store('oauth:session', opts.db.ttl);
33
+ const connectionStore = db.store('saml:config');
34
+ const samlHandler = new saml_handler_1.SAMLHandler({
35
+ connection: connectionStore,
36
+ session: sessionStore,
37
+ opts,
38
+ });
39
+ const app = new app_1.App({ store: appStore, opts });
40
+ const sso = new sso_1.SSO({ app, samlHandler });
41
+ const response = {
42
+ app,
43
+ sso,
44
+ };
45
+ return response;
46
+ });
47
+ exports.default = SAMLFederation;
48
+ __exportStar(require("./types"), exports);
49
+ // SAML Federation flow:
50
+ // SP (Eg: Twilio Flex) --> SAML Jackson --> IdP (Eg: Okta) --> SAML Jackson --> SP (Eg: Twilio Flex)
51
+ // 1. SP send SAML Request to Jackson's SSO endpoint
52
+ // 2. Jackson process SAML Request and create a new session to store SP request information
53
+ // 3. Jackson create a new SAML Request and send it to chosen IdP
54
+ // 4. After successful authentication, IdP send (POST) SAML Response to Jackson's ACS endpoint
55
+ // 5. Jackson process SAML Response from the IdP and create a new SAML Response to send (POST) back to the SP's ACS endpoint
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ee/federated-saml/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA4B;AAC5B,+BAA4B;AAE5B,gEAA4D;AAE5D,8DAA8D;AAC9D,MAAM,cAAc,GAAG,CAAO,EAAE,EAAE,EAAE,IAAI,EAA+B,EAAE,EAAE;IACzE,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,WAAW,GAAG,IAAI,0BAAW,CAAC;QAClC,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,YAAY;QACrB,IAAI;KACL,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG;QACf,GAAG;QACH,GAAG;KACJ,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA,CAAC;AAEF,kBAAe,cAAc,CAAC;AAE9B,0CAAwB;AAExB,wBAAwB;AACxB,qGAAqG;AACrG,oDAAoD;AACpD,2FAA2F;AAC3F,iEAAiE;AACjE,8FAA8F;AAC9F,4HAA4H"}
@@ -0,0 +1,17 @@
1
+ import { App } from './app';
2
+ import { SAMLHandler } from '../../controller/saml-handler';
3
+ export declare class SSO {
4
+ private app;
5
+ private samlHandler;
6
+ constructor({ app, samlHandler }: {
7
+ app: App;
8
+ samlHandler: SAMLHandler;
9
+ });
10
+ getAuthorizeUrl: ({ request, relayState, idp_hint, }: {
11
+ request: string;
12
+ relayState: string;
13
+ idp_hint?: string | undefined;
14
+ }) => Promise<{
15
+ redirectUrl: string;
16
+ }>;
17
+ }
@@ -0,0 +1,76 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SSO = void 0;
16
+ const saml20_1 = __importDefault(require("@boxyhq/saml20"));
17
+ const error_1 = require("../../controller/error");
18
+ const lib_1 = require("../../saml/lib");
19
+ class SSO {
20
+ constructor({ app, samlHandler }) {
21
+ // Accept the SAML Request from Service Provider, and create a new SAML Request to be sent to Identity Provider
22
+ this.getAuthorizeUrl = ({ request, relayState, idp_hint, }) => __awaiter(this, void 0, void 0, function* () {
23
+ const { id, acsUrl, entityId, publicKey, providerName } = yield (0, lib_1.extractSAMLRequestAttributes)(request);
24
+ // Verify the request if it is signed
25
+ if (publicKey && !saml20_1.default.hasValidSignature(request, publicKey, null)) {
26
+ throw new error_1.JacksonError('Invalid SAML Request signature.', 400);
27
+ }
28
+ const app = yield this.app.getByEntityId(entityId);
29
+ if (app.acsUrl !== acsUrl) {
30
+ throw new error_1.JacksonError("Assertion Consumer Service URL doesn't match.", 400);
31
+ }
32
+ const response = yield this.samlHandler.resolveConnection({
33
+ tenant: app.tenant,
34
+ product: app.product,
35
+ idp_hint,
36
+ authFlow: 'saml',
37
+ originalParams: {
38
+ RelayState: relayState,
39
+ SAMLRequest: request,
40
+ },
41
+ });
42
+ // If there is a redirect URL, then we need to redirect to that URL
43
+ if ('redirectUrl' in response) {
44
+ return {
45
+ redirectUrl: response.redirectUrl,
46
+ };
47
+ }
48
+ let connection;
49
+ // If there is a connection, use that connection
50
+ if ('connection' in response && 'idpMetadata' in response.connection) {
51
+ connection = response.connection;
52
+ }
53
+ if (!connection) {
54
+ throw new error_1.JacksonError('No SAML connection found.', 404);
55
+ }
56
+ const { redirectUrl } = yield this.samlHandler.createSAMLRequest({
57
+ connection,
58
+ requestParams: {
59
+ id,
60
+ acsUrl,
61
+ entityId,
62
+ publicKey,
63
+ providerName,
64
+ relayState,
65
+ },
66
+ });
67
+ return {
68
+ redirectUrl,
69
+ };
70
+ });
71
+ this.app = app;
72
+ this.samlHandler = samlHandler;
73
+ }
74
+ }
75
+ exports.SSO = SSO;
76
+ //# sourceMappingURL=sso.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sso.js","sourceRoot":"","sources":["../../../src/ee/federated-saml/sso.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4DAAkC;AAGlC,kDAAsD;AAGtD,wCAA8D;AAE9D,MAAa,GAAG;IAId,YAAY,EAAE,GAAG,EAAE,WAAW,EAA0C;QAKxE,+GAA+G;QACxG,oBAAe,GAAG,CAAO,EAC9B,OAAO,EACP,UAAU,EACV,QAAQ,GAKT,EAAE,EAAE;YACH,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,kCAA4B,EAAC,OAAO,CAAC,CAAC;YAEtG,qCAAqC;YACrC,IAAI,SAAS,IAAI,CAAC,gBAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;gBAClE,MAAM,IAAI,oBAAY,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;aAChE;YAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEnD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE;gBACzB,MAAM,IAAI,oBAAY,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;aAC9E;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;gBACxD,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,QAAQ;gBACR,QAAQ,EAAE,MAAM;gBAChB,cAAc,EAAE;oBACd,UAAU,EAAE,UAAU;oBACtB,WAAW,EAAE,OAAO;iBACrB;aACF,CAAC,CAAC;YAEH,mEAAmE;YACnE,IAAI,aAAa,IAAI,QAAQ,EAAE;gBAC7B,OAAO;oBACL,WAAW,EAAE,QAAQ,CAAC,WAAW;iBAClC,CAAC;aACH;YAED,IAAI,UAAqC,CAAC;YAE1C,gDAAgD;YAChD,IAAI,YAAY,IAAI,QAAQ,IAAI,aAAa,IAAI,QAAQ,CAAC,UAAU,EAAE;gBACpE,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;aAClC;YAED,IAAI,CAAC,UAAU,EAAE;gBACf,MAAM,IAAI,oBAAY,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;aAC1D;YAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;gBAC/D,UAAU;gBACV,aAAa,EAAE;oBACb,EAAE;oBACF,MAAM;oBACN,QAAQ;oBACR,SAAS;oBACT,YAAY;oBACZ,UAAU;iBACX;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,WAAW;aACZ,CAAC;QACJ,CAAC,CAAA,CAAC;QAvEA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CAsEF;AA7ED,kBA6EC"}
@@ -0,0 +1,18 @@
1
+ import SAMLFederation from '.';
2
+ export type ISAMLFederationController = Awaited<ReturnType<typeof SAMLFederation>>;
3
+ export type SAMLFederationApp = {
4
+ id: string;
5
+ name: string;
6
+ tenant: string;
7
+ product: string;
8
+ acsUrl: string;
9
+ entityId: string;
10
+ };
11
+ export type SAMLFederationAppWithMetadata = SAMLFederationApp & {
12
+ metadata: {
13
+ entityId: string;
14
+ ssoUrl: string;
15
+ x509cert: string;
16
+ xml: string;
17
+ };
18
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ee/federated-saml/types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,8 @@ import { LogoutController } from './controller/logout';
7
7
  import { OidcDiscoveryController } from './controller/oidc-discovery';
8
8
  import { SPSAMLConfig } from './controller/sp-config';
9
9
  import { SetupLinkController } from './controller/setup-link';
10
+ import { type ISAMLFederationController } from './ee/federated-saml';
11
+ import checkLicense from './ee/common/checkLicense';
10
12
  export declare const controllers: (opts: JacksonOption) => Promise<{
11
13
  apiController: ConnectionAPIController;
12
14
  connectionAPIController: ConnectionAPIController;
@@ -18,6 +20,11 @@ export declare const controllers: (opts: JacksonOption) => Promise<{
18
20
  directorySyncController: IDirectorySyncController;
19
21
  oidcDiscoveryController: OidcDiscoveryController;
20
22
  spConfig: SPSAMLConfig;
23
+ samlFederatedController: ISAMLFederationController;
24
+ checkLicense: () => Promise<boolean>;
21
25
  }>;
22
26
  export default controllers;
23
27
  export * from './typings';
28
+ export * from './ee/federated-saml/types';
29
+ export type SAMLJackson = Awaited<ReturnType<typeof controllers>>;
30
+ export type ISetupLinkController = InstanceType<typeof SetupLinkController>;
package/dist/index.js CHANGED
@@ -52,7 +52,10 @@ const directory_sync_1 = __importDefault(require("./directory-sync"));
52
52
  const oidc_discovery_1 = require("./controller/oidc-discovery");
53
53
  const sp_config_1 = require("./controller/sp-config");
54
54
  const setup_link_1 = require("./controller/setup-link");
55
+ const analytics_1 = require("./controller/analytics");
55
56
  const x509 = __importStar(require("./saml/x509"));
57
+ const federated_saml_1 = __importDefault(require("./ee/federated-saml"));
58
+ const checkLicense_1 = __importDefault(require("./ee/common/checkLicense"));
56
59
  const defaultOpts = (opts) => {
57
60
  const newOpts = Object.assign({}, opts);
58
61
  if (!newOpts.externalUrl) {
@@ -72,6 +75,7 @@ const defaultOpts = (opts) => {
72
75
  newOpts.db.pageLimit = newOpts.db.pageLimit || 50;
73
76
  newOpts.openid = newOpts.openid || {};
74
77
  newOpts.openid.jwsAlg = newOpts.openid.jwsAlg || 'RS256';
78
+ newOpts.boxyhqLicenseKey = newOpts.boxyhqLicenseKey || undefined;
75
79
  return newOpts;
76
80
  };
77
81
  const controllers = (opts) => __awaiter(void 0, void 0, void 0, function* () {
@@ -88,8 +92,14 @@ const controllers = (opts) => __awaiter(void 0, void 0, void 0, function* () {
88
92
  const connectionAPIController = new api_1.ConnectionAPIController({ connectionStore, opts });
89
93
  const adminController = new admin_1.AdminController({ connectionStore });
90
94
  const healthCheckController = new health_check_1.HealthCheckController({ healthCheckStore });
91
- const setupLinkController = new setup_link_1.SetupLinkController({ setupLinkStore });
92
95
  yield healthCheckController.init();
96
+ const setupLinkController = new setup_link_1.SetupLinkController({ setupLinkStore });
97
+ if (!opts.noAnalytics) {
98
+ console.info('Anonymous analytics enabled. You can disable this by setting the DO_NOT_TRACK=1 or BOXYHQ_NO_ANALYTICS=1 environment variables');
99
+ const analyticsStore = db.store('_analytics:events');
100
+ const analyticsController = new analytics_1.AnalyticsController({ analyticsStore });
101
+ yield analyticsController.init();
102
+ }
93
103
  // Create default certificate if it doesn't exist.
94
104
  yield x509.init(certificateStore, opts);
95
105
  const oauthController = new oauth_1.OAuthController({
@@ -104,9 +114,10 @@ const controllers = (opts) => __awaiter(void 0, void 0, void 0, function* () {
104
114
  sessionStore,
105
115
  opts,
106
116
  });
107
- const directorySyncController = yield (0, directory_sync_1.default)({ db, opts });
108
117
  const oidcDiscoveryController = new oidc_discovery_1.OidcDiscoveryController({ opts });
109
118
  const spConfig = new sp_config_1.SPSAMLConfig(opts);
119
+ const directorySyncController = yield (0, directory_sync_1.default)({ db, opts });
120
+ const samlFederatedController = yield (0, federated_saml_1.default)({ db, opts });
110
121
  // write pre-loaded connections if present
111
122
  const preLoadedConnection = opts.preLoadedConnection || opts.preLoadedConfig;
112
123
  if (preLoadedConnection && preLoadedConnection.length > 0) {
@@ -134,9 +145,14 @@ const controllers = (opts) => __awaiter(void 0, void 0, void 0, function* () {
134
145
  setupLinkController,
135
146
  directorySyncController,
136
147
  oidcDiscoveryController,
148
+ samlFederatedController,
149
+ checkLicense: () => {
150
+ return (0, checkLicense_1.default)(opts.boxyhqLicenseKey);
151
+ },
137
152
  };
138
153
  });
139
154
  exports.controllers = controllers;
140
155
  exports.default = exports.controllers;
141
156
  __exportStar(require("./typings"), exports);
157
+ __exportStar(require("./ee/federated-saml/types"), exports);
142
158
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,iDAAyB;AACzB,+DAAuC;AACvC,sEAA8C;AAC9C,qDAA8D;AAC9D,8CAAqD;AACrD,0CAA2D;AAC3D,8CAAqD;AACrD,4DAAkE;AAClE,gDAAuD;AACvD,sEAAiD;AACjD,gEAAsE;AACtE,sDAAsD;AACtD,wDAA8D;AAC9D,sDAA6D;AAC7D,kDAAoC;AACpC,yEAAwF;AACxF,4EAAoD;AAEpD,MAAM,WAAW,GAAG,CAAC,IAAmB,EAAiB,EAAE;IACzD,MAAM,OAAO,qBACR,IAAI,CACR,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACzC;IAED,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IAExD,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,yBAAyB,CAAC;IACzE,oMAAoM;IACpM,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAChE,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,8BAA8B;IAEvF,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC;IACjD,IAAA,mBAAS,EAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC;IACvE,OAAO,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;IAElD,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IACtC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC;IAEzD,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,SAAS,CAAC;IAEjE,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,WAAW,GAAG,CACzB,IAAmB,EAclB,EAAE;IACH,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAA,cAAW,GAAE,CAAC;IAEd,MAAM,EAAE,GAAG,MAAM,YAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEvD,MAAM,uBAAuB,GAAG,IAAI,6BAAuB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IACvF,MAAM,eAAe,GAAG,IAAI,uBAAe,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;IACjE,MAAM,qBAAqB,GAAG,IAAI,oCAAqB,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC9E,MAAM,qBAAqB,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,mBAAmB,GAAG,IAAI,gCAAmB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAExE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACrB,OAAO,CAAC,IAAI,CACV,gIAAgI,CACjI,CAAC;QACF,MAAM,cAAc,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACrD,MAAM,mBAAmB,GAAG,IAAI,+BAAmB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;QACxE,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC;KAClC;IAED,kDAAkD;IAClD,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAExC,MAAM,eAAe,GAAG,IAAI,uBAAe,CAAC;QAC1C,eAAe;QACf,YAAY;QACZ,SAAS;QACT,UAAU;QACV,IAAI;KACL,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAI,yBAAgB,CAAC;QAC5C,eAAe;QACf,YAAY;QACZ,IAAI;KACL,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,IAAI,wCAAuB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,wBAAY,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,uBAAuB,GAAG,MAAM,IAAA,wBAAiB,EAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,uBAAuB,GAAG,MAAM,IAAA,wBAAiB,EAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtE,0CAA0C;IAC1C,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,eAAe,CAAC;IAC7E,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;QACzD,MAAM,WAAW,GAAG,MAAM,IAAA,wBAAc,EAAC,mBAAmB,CAAC,CAAC;QAE9D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,IAAI,kBAAkB,IAAI,UAAU,EAAE;gBACpC,MAAM,uBAAuB,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;aAChE;iBAAM;gBACL,MAAM,uBAAuB,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;aAChE;YAED,OAAO,CAAC,IAAI,CAAC,iCAAiC,UAAU,CAAC,MAAM,kBAAkB,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;SACzG;KACF;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAExD,OAAO;QACL,QAAQ;QACR,aAAa,EAAE,uBAAuB;QACtC,uBAAuB;QACvB,eAAe;QACf,eAAe;QACf,gBAAgB;QAChB,qBAAqB;QACrB,mBAAmB;QACnB,uBAAuB;QACvB,uBAAuB;QACvB,uBAAuB;QACvB,YAAY,EAAE,GAAG,EAAE;YACjB,OAAO,IAAA,sBAAY,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;AACJ,CAAC,CAAA,CAAC;AAvGW,QAAA,WAAW,eAuGtB;AAEF,kBAAe,mBAAW,CAAC;AAE3B,4CAA0B;AAC1B,4DAA0C"}
@@ -0,0 +1,31 @@
1
+ import type { SAMLProfile } from '@boxyhq/saml20/dist/typings';
2
+ export declare const extractSAMLResponseAttributes: (decodedResponse: string, validateOpts: ValidateOption) => Promise<SAMLProfile>;
3
+ export declare const extractSAMLRequestAttributes: (samlRequest: string) => Promise<{
4
+ id: string;
5
+ acsUrl: string;
6
+ entityId: string;
7
+ publicKey: string;
8
+ providerName: string;
9
+ }>;
10
+ export declare const createMetadataXML: ({ ssoUrl, entityId, x509cert, }: {
11
+ ssoUrl: string;
12
+ entityId: string;
13
+ x509cert: string;
14
+ }) => Promise<string>;
15
+ export declare const decodeBase64: (string: string, isDeflated: boolean) => Promise<string>;
16
+ export declare const createSAMLResponse: ({ audience, issuer, acsUrl, profile, requestId, privateKey, publicKey, }: {
17
+ audience: string;
18
+ issuer: string;
19
+ acsUrl: string;
20
+ profile: SAMLProfile;
21
+ requestId: string;
22
+ privateKey: string;
23
+ publicKey: string;
24
+ }) => Promise<string>;
25
+ type ValidateOption = {
26
+ thumbprint: string;
27
+ audience: string;
28
+ privateKey: string;
29
+ inResponseTo?: string;
30
+ };
31
+ export {};