@sipgate/integration-bridge 0.22.2 → 0.22.5
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/cache/storage/memory-storage-adapter.d.ts +1 -1
- package/dist/cache/storage/memory-storage-adapter.js +2 -2
- package/dist/cache/storage/memory-storage-adapter.js.map +1 -1
- package/dist/cache/storage-cache.d.ts +12 -0
- package/dist/cache/storage-cache.js +67 -19
- package/dist/cache/storage-cache.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/models/controller.model.js +2 -2
- package/dist/models/controller.model.js.map +1 -1
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.js +1 -0
- package/dist/models/index.js.map +1 -1
- package/dist/models/token-cache.model.d.ts +6 -0
- package/dist/models/token-cache.model.js +3 -0
- package/dist/models/token-cache.model.js.map +1 -0
- package/dist/models/token.model.d.ts +7 -0
- package/dist/models/token.model.js +3 -0
- package/dist/models/token.model.js.map +1 -0
- package/dist/util/call-comment.js.map +1 -1
- package/dist/util/callEventHelper.d.ts +7 -0
- package/dist/util/callEventHelper.js +37 -0
- package/dist/util/callEventHelper.js.map +1 -0
- package/dist/util/env.d.ts +14 -0
- package/dist/util/env.js +73 -1
- package/dist/util/env.js.map +1 -1
- package/dist/util/gdpr/gdprSlackNotification.d.ts +4 -0
- package/dist/util/gdpr/gdprSlackNotification.js +79 -0
- package/dist/util/gdpr/gdprSlackNotification.js.map +1 -0
- package/dist/util/gdpr/index.d.ts +3 -0
- package/dist/util/gdpr/index.js +33 -0
- package/dist/util/gdpr/index.js.map +1 -0
- package/dist/util/http/index.d.ts +7 -0
- package/dist/util/http/index.js +39 -0
- package/dist/util/http/index.js.map +1 -0
- package/dist/util/http/pagination.d.ts +7 -0
- package/dist/util/http/pagination.js +56 -0
- package/dist/util/http/pagination.js.map +1 -0
- package/dist/util/http/rate-limited-axios.d.ts +13 -0
- package/dist/util/http/rate-limited-axios.js +79 -0
- package/dist/util/http/rate-limited-axios.js.map +1 -0
- package/dist/util/http/url.d.ts +1 -0
- package/dist/util/http/url.js +14 -0
- package/dist/util/http/url.js.map +1 -0
- package/dist/util/index.d.ts +14 -0
- package/dist/util/index.js +32 -0
- package/dist/util/index.js.map +1 -1
- package/dist/util/lang/diff.d.ts +8 -0
- package/dist/util/lang/diff.js +80 -0
- package/dist/util/lang/diff.js.map +1 -0
- package/dist/util/lang/index.d.ts +2 -0
- package/dist/util/lang/index.js +6 -0
- package/dist/util/lang/index.js.map +1 -0
- package/dist/util/oauth.d.ts +32 -0
- package/dist/util/oauth.js +167 -0
- package/dist/util/oauth.js.map +1 -0
- package/dist/util/security/index.d.ts +3 -0
- package/dist/util/security/index.js +33 -0
- package/dist/util/security/index.js.map +1 -0
- package/dist/util/security/nonce.d.ts +5 -0
- package/dist/util/security/nonce.js +49 -0
- package/dist/util/security/nonce.js.map +1 -0
- package/dist/util/token-util.d.ts +6 -0
- package/dist/util/token-util.js +66 -0
- package/dist/util/token-util.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/util/lang/diff.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAgC;AAUhC,SAAS,IAAI,CAAI,IAAa,EAAE,EAAO;IACrC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,iCAAM,KAAK,KAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAgB,UAAU,CACxB,KAAc,EACd,KAAc,EACd,EAAO,EACP,EAAO;IAEP,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3D,OAAO,EAAE,CAAC,MAAM,CACd,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAc,EAAE,EAAE,EAAE,EAAE;QACjE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1B,IAAI,GAAG,IAAI,GAAG,EAAE;YACd,OAAO;gBACL,UAAU;gBACV,UAAU;gBACV,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACpC,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;aACrC,CAAC;SACH;aAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;YACtB,OAAO;gBACL,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACxC,UAAU;gBACV,QAAQ;gBACR,QAAQ;aACT,CAAC;SACH;aAAM,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;YACtB,OAAO;gBACL,UAAU;gBACV,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACxC,QAAQ;gBACR,QAAQ;aACT,CAAC;SACH;aAAM;YACL,OAAO;gBACL,UAAU;gBACV,UAAU;gBACV,QAAQ;gBACR,QAAQ;aACT,CAAC;SACH;IACH,CAAC,EACD;QACE,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;KACb,EACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CACnB,CAAC;AACJ,CAAC;AAxDD,gCAwDC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.diffArrays = void 0;
|
|
4
|
+
const diff_1 = require("./diff");
|
|
5
|
+
Object.defineProperty(exports, "diffArrays", { enumerable: true, get: function () { return diff_1.diffArrays; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/lang/index.ts"],"names":[],"mappings":";;;AAAA,iCAAoC;AAE3B,2FAFA,iBAAU,OAEA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Request, Response } from "express";
|
|
2
|
+
import { AxiosResponse } from "axios";
|
|
3
|
+
export type ExtractTokenFromResponseFn<T> = (response: AxiosResponse) => T;
|
|
4
|
+
export interface OAuthParams {
|
|
5
|
+
accesTokenUrl: string;
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
redirect_uri: string;
|
|
8
|
+
cookieName: string;
|
|
9
|
+
client_id: string;
|
|
10
|
+
client_secret: string;
|
|
11
|
+
authorizeUrl: string;
|
|
12
|
+
}
|
|
13
|
+
export interface OAuthCallbackParams {
|
|
14
|
+
cookieName: string;
|
|
15
|
+
client_id: string;
|
|
16
|
+
client_secret: string;
|
|
17
|
+
redirect_uri: string;
|
|
18
|
+
extractToken: ExtractTokenFromResponseFn<any>;
|
|
19
|
+
}
|
|
20
|
+
export declare function getOAuth2RedirectUrl(config: OAuthParams, req: Request, res: Response): Promise<string>;
|
|
21
|
+
export declare function handleOAuth2Callback(config: OAuthCallbackParams, req: Request, res: Response, checkNonceCookie?: boolean, paramCommunication?: GetAccessTokenParamCommunication): Promise<{
|
|
22
|
+
apiKey: string;
|
|
23
|
+
apiUrl: string;
|
|
24
|
+
query_params: any;
|
|
25
|
+
}>;
|
|
26
|
+
export declare enum GetAccessTokenParamCommunication {
|
|
27
|
+
QUERY_PARAM = 0,
|
|
28
|
+
X_WWW_FORM_URL_ENCODED = 1,
|
|
29
|
+
BODY = 2
|
|
30
|
+
}
|
|
31
|
+
export declare function getAccessToken(accessTokenURL: string, authorizationCode: string, clientId: string, clientSecret: string, redirect_uri: string, paramCommunication?: GetAccessTokenParamCommunication): Promise<AxiosResponse<any, any>>;
|
|
32
|
+
export declare function refreshToken(accessTokenURL: string, refresh_token: string, clientId: string, clientSecret: string, paramCommunication?: GetAccessTokenParamCommunication): Promise<AxiosResponse<any, any>>;
|
|
@@ -0,0 +1,167 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.refreshToken = exports.getAccessToken = exports.GetAccessTokenParamCommunication = exports.handleOAuth2Callback = exports.getOAuth2RedirectUrl = void 0;
|
|
39
|
+
const _1 = require(".");
|
|
40
|
+
const util = __importStar(require("util"));
|
|
41
|
+
const axios_1 = __importDefault(require("axios"));
|
|
42
|
+
const models_1 = require("../models");
|
|
43
|
+
function getOAuth2RedirectUrl(config, req, res) {
|
|
44
|
+
var _a;
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
try {
|
|
47
|
+
const nonce_string = _1.Security.Nonce.nonce();
|
|
48
|
+
const state = JSON.stringify({
|
|
49
|
+
nonce: nonce_string,
|
|
50
|
+
accessTokenUrl: config.accesTokenUrl,
|
|
51
|
+
apiUrl: config.apiUrl,
|
|
52
|
+
});
|
|
53
|
+
const searchParamsAuth = new URLSearchParams({
|
|
54
|
+
response_type: "code",
|
|
55
|
+
redirect_uri: config.redirect_uri,
|
|
56
|
+
client_id: config.client_id,
|
|
57
|
+
state,
|
|
58
|
+
});
|
|
59
|
+
_1.Security.Nonce.setNonceCookie(req, res, config.cookieName, config.client_secret, nonce_string);
|
|
60
|
+
const url = new URL(config.authorizeUrl);
|
|
61
|
+
url.search = searchParamsAuth.toString();
|
|
62
|
+
return url.toString();
|
|
63
|
+
}
|
|
64
|
+
catch (exception) {
|
|
65
|
+
const errorMessage = `Error in getOAuth2RedirectUrl: ${JSON.stringify(exception, Object.getOwnPropertyNames(exception))} ${util.inspect((_a = exception === null || exception === void 0 ? void 0 : exception.response) === null || _a === void 0 ? void 0 : _a.data, { depth: 3 })}`;
|
|
66
|
+
console.error(errorMessage);
|
|
67
|
+
throw new models_1.ServerError(500, errorMessage);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
exports.getOAuth2RedirectUrl = getOAuth2RedirectUrl;
|
|
72
|
+
function handleOAuth2Callback(config, req, res, checkNonceCookie = false, paramCommunication = GetAccessTokenParamCommunication.BODY) {
|
|
73
|
+
var _a, _b, _c, _d;
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
try {
|
|
76
|
+
if (req.query.error)
|
|
77
|
+
throw `Error in handleOAuth2Callback flow: ${req.query.error} ${(_a = req === null || req === void 0 ? void 0 : req.query) === null || _a === void 0 ? void 0 : _a.error_description}`;
|
|
78
|
+
if (!((_b = req === null || req === void 0 ? void 0 : req.query) === null || _b === void 0 ? void 0 : _b.state))
|
|
79
|
+
throw 'Unexpected: request has not query param "state"';
|
|
80
|
+
if (!((_c = req === null || req === void 0 ? void 0 : req.query) === null || _c === void 0 ? void 0 : _c.code))
|
|
81
|
+
throw 'Unexpected: request has not query param "code"';
|
|
82
|
+
const nonce_cookie = _1.Security.Nonce.getNonceFromCookie(req, res, config.cookieName, config.client_secret);
|
|
83
|
+
const state = JSON.parse(req.query.state.toString());
|
|
84
|
+
if (checkNonceCookie) {
|
|
85
|
+
if (!nonce_cookie)
|
|
86
|
+
throw `Unexpected: cookie ${config.cookieName} not found`;
|
|
87
|
+
const nonce_request = state.nonce;
|
|
88
|
+
if (nonce_request !== nonce_cookie)
|
|
89
|
+
if (nonce_request !== nonce_cookie)
|
|
90
|
+
throw `Unexpected: nonce parameter from request and from cookie are different. Possible CSFR attack!`;
|
|
91
|
+
_1.Security.Nonce.deleteNonceCookie(req, res, config.cookieName, config.client_secret);
|
|
92
|
+
}
|
|
93
|
+
const response = yield getAccessToken(state.accessTokenUrl, req.query.code.toString(), config.client_id, config.client_secret, config.redirect_uri, paramCommunication);
|
|
94
|
+
return {
|
|
95
|
+
apiKey: config.extractToken(response),
|
|
96
|
+
apiUrl: state.apiUrl,
|
|
97
|
+
query_params: req.query,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (exception) {
|
|
101
|
+
const errorMessage = `Error in handleOAuth2Callback: ${JSON.stringify(exception, Object.getOwnPropertyNames(exception))} ${util.inspect((_d = exception === null || exception === void 0 ? void 0 : exception.response) === null || _d === void 0 ? void 0 : _d.data, { depth: 3 })}`;
|
|
102
|
+
console.error(errorMessage);
|
|
103
|
+
throw new models_1.ServerError(500, errorMessage);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
exports.handleOAuth2Callback = handleOAuth2Callback;
|
|
108
|
+
var GetAccessTokenParamCommunication;
|
|
109
|
+
(function (GetAccessTokenParamCommunication) {
|
|
110
|
+
GetAccessTokenParamCommunication[GetAccessTokenParamCommunication["QUERY_PARAM"] = 0] = "QUERY_PARAM";
|
|
111
|
+
GetAccessTokenParamCommunication[GetAccessTokenParamCommunication["X_WWW_FORM_URL_ENCODED"] = 1] = "X_WWW_FORM_URL_ENCODED";
|
|
112
|
+
GetAccessTokenParamCommunication[GetAccessTokenParamCommunication["BODY"] = 2] = "BODY";
|
|
113
|
+
})(GetAccessTokenParamCommunication = exports.GetAccessTokenParamCommunication || (exports.GetAccessTokenParamCommunication = {}));
|
|
114
|
+
function getAccessToken(accessTokenURL, authorizationCode, clientId, clientSecret, redirect_uri, paramCommunication = GetAccessTokenParamCommunication.BODY) {
|
|
115
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
console.log(`Start: fetching access tokens`);
|
|
117
|
+
const params = {
|
|
118
|
+
grant_type: "authorization_code",
|
|
119
|
+
code: authorizationCode,
|
|
120
|
+
client_id: clientId,
|
|
121
|
+
client_secret: clientSecret,
|
|
122
|
+
redirect_uri: redirect_uri,
|
|
123
|
+
};
|
|
124
|
+
switch (paramCommunication) {
|
|
125
|
+
case GetAccessTokenParamCommunication.QUERY_PARAM:
|
|
126
|
+
return yield axios_1.default.post(accessTokenURL, {}, { params: params });
|
|
127
|
+
case GetAccessTokenParamCommunication.X_WWW_FORM_URL_ENCODED:
|
|
128
|
+
return yield axios_1.default.post(accessTokenURL, new URLSearchParams(params), {
|
|
129
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
130
|
+
});
|
|
131
|
+
case GetAccessTokenParamCommunication.BODY:
|
|
132
|
+
return yield axios_1.default.post(accessTokenURL, params);
|
|
133
|
+
default:
|
|
134
|
+
throw Error("Unexpected parameter communication type");
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
console.log(`End: fetching access tokens`);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
exports.getAccessToken = getAccessToken;
|
|
141
|
+
function refreshToken(accessTokenURL, refresh_token, clientId, clientSecret, paramCommunication = GetAccessTokenParamCommunication.BODY) {
|
|
142
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
143
|
+
console.log(`Start: refreshing access tokens`);
|
|
144
|
+
const params = {
|
|
145
|
+
grant_type: "refresh_token",
|
|
146
|
+
refresh_token: refresh_token,
|
|
147
|
+
client_id: clientId,
|
|
148
|
+
client_secret: clientSecret,
|
|
149
|
+
};
|
|
150
|
+
switch (paramCommunication) {
|
|
151
|
+
case GetAccessTokenParamCommunication.QUERY_PARAM:
|
|
152
|
+
return yield axios_1.default.post(accessTokenURL, {}, { params: params });
|
|
153
|
+
case GetAccessTokenParamCommunication.X_WWW_FORM_URL_ENCODED:
|
|
154
|
+
return yield axios_1.default.post(accessTokenURL, new URLSearchParams(params), {
|
|
155
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
156
|
+
});
|
|
157
|
+
case GetAccessTokenParamCommunication.BODY:
|
|
158
|
+
return yield axios_1.default.post(accessTokenURL, params);
|
|
159
|
+
default:
|
|
160
|
+
throw Error("Unexpected parameter communication type");
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
console.log(`End: refreshing access tokens`);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
exports.refreshToken = refreshToken;
|
|
167
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/util/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
26
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Nonce = void 0;
|
|
30
|
+
const Nonce = __importStar(require("./nonce"));
|
|
31
|
+
exports.Nonce = Nonce;
|
|
32
|
+
__exportStar(require("./nonce"), exports);
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/security/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAExB,sBAAK;AAEd,0CAAwB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Request, Response } from "express";
|
|
2
|
+
export declare function nonce(): string;
|
|
3
|
+
export declare function getNonceFromCookie(request: Request, response: Response, name: string, secret: string): string | undefined;
|
|
4
|
+
export declare function setNonceCookie(req: Request, res: Response, cookieName: string, secret: string, state: string): void;
|
|
5
|
+
export declare function deleteNonceCookie(req: Request, res: Response, cookieName: string, secret: string): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deleteNonceCookie = exports.setNonceCookie = exports.getNonceFromCookie = exports.nonce = void 0;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const cookies_1 = __importDefault(require("cookies"));
|
|
9
|
+
function nonce() {
|
|
10
|
+
const length = 15;
|
|
11
|
+
const bytes = (0, crypto_1.randomBytes)(length);
|
|
12
|
+
const nonce = bytes
|
|
13
|
+
.map((byte) => {
|
|
14
|
+
return byte % 10;
|
|
15
|
+
})
|
|
16
|
+
.join("");
|
|
17
|
+
return nonce;
|
|
18
|
+
}
|
|
19
|
+
exports.nonce = nonce;
|
|
20
|
+
function getNonceFromCookie(request, response, name, secret) {
|
|
21
|
+
const cookies = new cookies_1.default(request, response, {
|
|
22
|
+
secure: true,
|
|
23
|
+
keys: [secret],
|
|
24
|
+
});
|
|
25
|
+
return cookies.get(name, { signed: true });
|
|
26
|
+
}
|
|
27
|
+
exports.getNonceFromCookie = getNonceFromCookie;
|
|
28
|
+
function setNonceCookie(req, res, cookieName, secret, state) {
|
|
29
|
+
const cookies = new cookies_1.default(req, res, {
|
|
30
|
+
keys: [secret],
|
|
31
|
+
secure: true,
|
|
32
|
+
});
|
|
33
|
+
cookies.set(cookieName, state, {
|
|
34
|
+
signed: true,
|
|
35
|
+
expires: new Date(Date.now() + 60000),
|
|
36
|
+
sameSite: "none",
|
|
37
|
+
secure: true,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
exports.setNonceCookie = setNonceCookie;
|
|
41
|
+
function deleteNonceCookie(req, res, cookieName, secret) {
|
|
42
|
+
const cookies = new cookies_1.default(req, res, {
|
|
43
|
+
keys: [secret],
|
|
44
|
+
secure: true,
|
|
45
|
+
});
|
|
46
|
+
cookies.set(cookieName);
|
|
47
|
+
}
|
|
48
|
+
exports.deleteNonceCookie = deleteNonceCookie;
|
|
49
|
+
//# sourceMappingURL=nonce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../../src/util/security/nonce.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAqC;AAErC,sDAA8B;AAE9B,SAAgB,KAAK;IACnB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,KAAK,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAElC,MAAM,KAAK,GAAG,KAAK;SAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,KAAK,CAAC;AACf,CAAC;AAXD,sBAWC;AAED,SAAgB,kBAAkB,CAChC,OAAgB,EAChB,QAAkB,EAClB,IAAY,EACZ,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,OAAO,EAAE,QAAQ,EAAE;QAC7C,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,CAAC,MAAM,CAAC;KACf,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;AAXD,gDAWC;AAED,SAAgB,cAAc,CAC5B,GAAY,EACZ,GAAa,EACb,UAAkB,EAClB,MAAc,EACd,KAAa;IAEb,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,GAAG,EAAE,GAAG,EAAE;QACpC,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE;QAC7B,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACrC,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;AACL,CAAC;AAjBD,wCAiBC;AAED,SAAgB,iBAAiB,CAC/B,GAAY,EACZ,GAAa,EACb,UAAkB,EAClB,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,GAAG,EAAE,GAAG,EAAE;QACpC,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC1B,CAAC;AAXD,8CAWC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TokenStorageCache } from "../cache";
|
|
2
|
+
import { Config } from "../models";
|
|
3
|
+
import { Token } from "../models/token.model";
|
|
4
|
+
export type TokenRefreshFn = (config: Config) => Promise<Token>;
|
|
5
|
+
export declare function getTokenCache(): TokenStorageCache;
|
|
6
|
+
export declare function getFreshAccessToken(config: Config, refreshFn: TokenRefreshFn, force?: boolean): Promise<string>;
|
|
@@ -0,0 +1,66 @@
|
|
|
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.getFreshAccessToken = exports.getTokenCache = void 0;
|
|
13
|
+
const cache_1 = require("../cache");
|
|
14
|
+
const storage_1 = require("../cache/storage");
|
|
15
|
+
const __1 = require("..");
|
|
16
|
+
const REFRESH_MARKER_TTL = 5;
|
|
17
|
+
function useCollection(value) {
|
|
18
|
+
const { INTEGRATION_NAME } = process.env;
|
|
19
|
+
if (!INTEGRATION_NAME) {
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
return `${INTEGRATION_NAME}:${value.replace(/:/g, "_")}`;
|
|
23
|
+
}
|
|
24
|
+
function getTokenCache() {
|
|
25
|
+
const { REDIS_URL } = process.env;
|
|
26
|
+
if (REDIS_URL) {
|
|
27
|
+
console.log("[TOKEN CACHE] Using Redis cache");
|
|
28
|
+
return new cache_1.TokenStorageCache(new storage_1.RedisStorageAdapter(REDIS_URL));
|
|
29
|
+
}
|
|
30
|
+
console.log("[TOKEN CACHE] Using memory cache");
|
|
31
|
+
const { TOKEN_CACHE_TTL } = process.env;
|
|
32
|
+
return new cache_1.TokenStorageCache(new storage_1.MemoryStorageAdapter(parseInt(TOKEN_CACHE_TTL || "60") * 1000));
|
|
33
|
+
}
|
|
34
|
+
exports.getTokenCache = getTokenCache;
|
|
35
|
+
function getFreshAccessToken(config, refreshFn, force = false) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
38
|
+
if (force) {
|
|
39
|
+
const newToken = yield getNewToken(config, refreshFn);
|
|
40
|
+
return newToken.access_token;
|
|
41
|
+
}
|
|
42
|
+
const token = yield __1.tokenCache.get(useCollection(config.apiKey));
|
|
43
|
+
if (token === null || token === void 0 ? void 0 : token.access_token)
|
|
44
|
+
return token.access_token;
|
|
45
|
+
if (token === null || token === void 0 ? void 0 : token.isPending) {
|
|
46
|
+
yield sleep(5000);
|
|
47
|
+
return yield getFreshAccessToken(config, refreshFn);
|
|
48
|
+
}
|
|
49
|
+
const newToken = yield getNewToken(config, refreshFn);
|
|
50
|
+
return newToken.access_token;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
exports.getFreshAccessToken = getFreshAccessToken;
|
|
54
|
+
function getNewToken(config, refreshFn) {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
yield __1.tokenCache.set(useCollection(config.apiKey), {
|
|
57
|
+
refresh_token: "",
|
|
58
|
+
access_token: "",
|
|
59
|
+
isPending: true,
|
|
60
|
+
}, REFRESH_MARKER_TTL);
|
|
61
|
+
const newToken = Object.assign(Object.assign({}, (yield refreshFn(config))), { isPending: false });
|
|
62
|
+
yield __1.tokenCache.set(useCollection(config.apiKey), newToken, parseInt(process.env.TOKEN_CACHE_TTL || "60"));
|
|
63
|
+
return newToken;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=token-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-util.js","sourceRoot":"","sources":["../../src/util/token-util.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAA6C;AAC7C,8CAA6E;AAI7E,0BAAgC;AAEhC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAEzC,IAAI,CAAC,gBAAgB,EAAE;QACrB,OAAO,KAAK,CAAC;KACd;IAED,OAAO,GAAG,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AAC3D,CAAC;AAID,SAAgB,aAAa;IAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAElC,IAAI,SAAS,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,IAAI,yBAAiB,CAAC,IAAI,6BAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;KAClE;IAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IACxC,OAAO,IAAI,yBAAiB,CAC1B,IAAI,8BAAoB,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CACnE,CAAC;AACJ,CAAC;AAbD,sCAaC;AAED,SAAsB,mBAAmB,CACvC,MAAc,EACd,SAAyB,EACzB,KAAK,GAAG,KAAK;;QAEb,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAC3B,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAEpD,IAAI,KAAK,EAAE;YACT,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAEtD,OAAO,QAAQ,CAAC,YAAY,CAAC;SAC9B;QAED,MAAM,KAAK,GAAG,MAAM,cAAU,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEjE,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY;YAAE,OAAO,KAAK,CAAC,YAAY,CAAC;QAEnD,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE;YACpB,MAAM,KAAK,CAAC,IAAK,CAAC,CAAC;YACnB,OAAO,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SACrD;QAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEtD,OAAO,QAAQ,CAAC,YAAY,CAAC;IAC/B,CAAC;CAAA;AA1BD,kDA0BC;AAED,SAAe,WAAW,CACxB,MAAc,EACd,SAAyB;;QAEzB,MAAM,cAAU,CAAC,GAAG,CAClB,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAC5B;YACE,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,IAAI;SAChB,EACD,kBAAkB,CACnB,CAAC;QAEF,MAAM,QAAQ,mCAAQ,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,KAAE,SAAS,EAAE,KAAK,GAAE,CAAC;QAEpE,MAAM,cAAU,CAAC,GAAG,CAClB,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAC5B,QAAQ,EACR,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,CAC9C,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sipgate/integration-bridge",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.5",
|
|
4
4
|
"description": "sipgate Integration Bridge Framework",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -54,6 +54,8 @@
|
|
|
54
54
|
"@types/lru-cache": "7.10.9",
|
|
55
55
|
"@types/node": "18.16.5",
|
|
56
56
|
"@types/redis": "4.0.10",
|
|
57
|
+
"@types/cookies": "^0.7.7",
|
|
58
|
+
"@types/lodash": "^4.14.191",
|
|
57
59
|
"husky": "8.0.3",
|
|
58
60
|
"jest": "^29.4.0",
|
|
59
61
|
"lint-staged": "13.2.2",
|
|
@@ -74,6 +76,11 @@
|
|
|
74
76
|
"express": "^4.18.1",
|
|
75
77
|
"lru-cache": "^7.13.1",
|
|
76
78
|
"moment": "^2.29.4",
|
|
77
|
-
"redis": "^4.2.0"
|
|
79
|
+
"redis": "^4.2.0",
|
|
80
|
+
"@slack/webhook": "^6.1.0",
|
|
81
|
+
"cookies": "^0.8.0",
|
|
82
|
+
"dotenv": "^16.0.3",
|
|
83
|
+
"lodash": "^4.17.21",
|
|
84
|
+
"rate-limiter-flexible": "^2.3.11"
|
|
78
85
|
}
|
|
79
86
|
}
|