@webda/core 2.0.0-beta.2 → 2.0.0-beta.3
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/lib/application.d.ts +0 -16
- package/lib/application.js.map +1 -1
- package/lib/core.d.ts +26 -23
- package/lib/core.js +51 -39
- package/lib/core.js.map +1 -1
- package/lib/core.spec.js +21 -12
- package/lib/core.spec.js.map +1 -1
- package/lib/index.d.ts +3 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/models/aclmodel.spec.js +1 -0
- package/lib/models/aclmodel.spec.js.map +1 -1
- package/lib/models/coremodel.d.ts +6 -3
- package/lib/models/coremodel.js.map +1 -1
- package/lib/models/ownermodel.js +1 -1
- package/lib/models/ownermodel.js.map +1 -1
- package/lib/models/ownermodel.spec.js +15 -13
- package/lib/models/ownermodel.spec.js.map +1 -1
- package/lib/models/rolemodel.d.ts +1 -1
- package/lib/models/rolemodel.spec.js +2 -0
- package/lib/models/rolemodel.spec.js.map +1 -1
- package/lib/queues/queueservice.d.ts +1 -1
- package/lib/queues/queueservice.js +1 -0
- package/lib/queues/queueservice.js.map +1 -1
- package/lib/services/authentication.d.ts +6 -7
- package/lib/services/authentication.js +12 -18
- package/lib/services/authentication.js.map +1 -1
- package/lib/services/authentication.spec.js +15 -15
- package/lib/services/authentication.spec.js.map +1 -1
- package/lib/services/binary.d.ts +1 -1
- package/lib/services/binary.js +1 -0
- package/lib/services/binary.js.map +1 -1
- package/lib/services/configuration.d.ts +5 -2
- package/lib/services/configuration.js +2 -0
- package/lib/services/configuration.js.map +1 -1
- package/lib/services/cryptoservice.d.ts +253 -0
- package/lib/services/cryptoservice.js +346 -0
- package/lib/services/cryptoservice.js.map +1 -0
- package/lib/services/cryptoservice.spec.d.ts +1 -0
- package/lib/services/cryptoservice.spec.js +164 -0
- package/lib/services/cryptoservice.spec.js.map +1 -0
- package/lib/services/filebinary.d.ts +6 -1
- package/lib/services/filebinary.js +18 -7
- package/lib/services/filebinary.js.map +1 -1
- package/lib/services/filebinary.spec.js +3 -4
- package/lib/services/filebinary.spec.js.map +1 -1
- package/lib/services/fileconfiguration.d.ts +1 -1
- package/lib/services/fileconfiguration.js +1 -0
- package/lib/services/fileconfiguration.js.map +1 -1
- package/lib/services/invitationservice.d.ts +2 -2
- package/lib/services/invitationservice.js +2 -0
- package/lib/services/invitationservice.js.map +1 -1
- package/lib/services/invitationservice.spec.js +1 -1
- package/lib/services/invitationservice.spec.js.map +1 -1
- package/lib/services/kubernetesconfiguration.d.ts +1 -1
- package/lib/services/kubernetesconfiguration.js +1 -0
- package/lib/services/kubernetesconfiguration.js.map +1 -1
- package/lib/services/notificationservice.d.ts +1 -1
- package/lib/services/notificationservice.js +2 -0
- package/lib/services/notificationservice.js.map +1 -1
- package/lib/services/oauth.d.ts +28 -2
- package/lib/services/oauth.js +18 -8
- package/lib/services/oauth.js.map +1 -1
- package/lib/services/oauth.spec.js +19 -13
- package/lib/services/oauth.spec.js.map +1 -1
- package/lib/services/proxy.d.ts +78 -0
- package/lib/services/proxy.js +139 -0
- package/lib/services/proxy.js.map +1 -0
- package/lib/services/proxy.spec.d.ts +1 -0
- package/lib/services/proxy.spec.js +78 -0
- package/lib/services/proxy.spec.js.map +1 -0
- package/lib/services/service.d.ts +3 -3
- package/lib/services/service.js +2 -0
- package/lib/services/service.js.map +1 -1
- package/lib/stores/aggregator.d.ts +1 -1
- package/lib/stores/aggregator.js +1 -0
- package/lib/stores/aggregator.js.map +1 -1
- package/lib/stores/mapper.d.ts +1 -1
- package/lib/stores/mapper.js +1 -0
- package/lib/stores/mapper.js.map +1 -1
- package/lib/stores/memory.d.ts +64 -3
- package/lib/stores/memory.js +85 -1
- package/lib/stores/memory.js.map +1 -1
- package/lib/stores/memory.spec.d.ts +1 -0
- package/lib/stores/memory.spec.js +43 -0
- package/lib/stores/memory.spec.js.map +1 -1
- package/lib/stores/store.d.ts +14 -0
- package/lib/stores/store.js +33 -0
- package/lib/stores/store.js.map +1 -1
- package/lib/stores/store.spec.d.ts +1 -0
- package/lib/stores/store.spec.js +25 -0
- package/lib/stores/store.spec.js.map +1 -1
- package/lib/test.js +8 -1
- package/lib/test.js.map +1 -1
- package/lib/unpackedapplication.js +2 -2
- package/lib/unpackedapplication.js.map +1 -1
- package/lib/utils/context.d.ts +55 -25
- package/lib/utils/context.js +54 -40
- package/lib/utils/context.js.map +1 -1
- package/lib/utils/context.spec.js +27 -12
- package/lib/utils/context.spec.js.map +1 -1
- package/lib/utils/cookie.d.ts +65 -44
- package/lib/utils/cookie.js +75 -145
- package/lib/utils/cookie.js.map +1 -1
- package/lib/utils/cookie.spec.js +199 -195
- package/lib/utils/cookie.spec.js.map +1 -1
- package/lib/utils/httpcontext.js +2 -2
- package/lib/utils/httpcontext.js.map +1 -1
- package/lib/utils/session.d.ts +120 -0
- package/lib/utils/session.js +177 -0
- package/lib/utils/session.js.map +1 -0
- package/lib/utils/session.spec.d.ts +1 -0
- package/lib/utils/session.spec.js +79 -0
- package/lib/utils/session.spec.js.map +1 -0
- package/package.json +9 -6
- package/test/config.json +2 -1
- package/webda.module.json +3 -2
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.CryptoService = exports.CryptoServiceParameters = void 0;
|
|
19
|
+
const crypto_1 = require("crypto");
|
|
20
|
+
const jwt = require("jsonwebtoken");
|
|
21
|
+
const pem_jwk_1 = require("pem-jwk");
|
|
22
|
+
const serializers_1 = require("../utils/serializers");
|
|
23
|
+
const service_1 = require("./service");
|
|
24
|
+
class CryptoServiceParameters extends service_1.ServiceParameters {
|
|
25
|
+
constructor(params) {
|
|
26
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
27
|
+
var _p, _q, _r, _s, _t, _u, _v, _w;
|
|
28
|
+
super(params);
|
|
29
|
+
(_a = this.symetricKeyLength) !== null && _a !== void 0 ? _a : (this.symetricKeyLength = 256);
|
|
30
|
+
(_b = this.symetricCipher) !== null && _b !== void 0 ? _b : (this.symetricCipher = "aes-256-ctr");
|
|
31
|
+
(_c = this.asymetricType) !== null && _c !== void 0 ? _c : (this.asymetricType = "rsa");
|
|
32
|
+
(_d = this.asymetricOptions) !== null && _d !== void 0 ? _d : (this.asymetricOptions = {});
|
|
33
|
+
(_e = (_p = this.asymetricOptions).modulusLength) !== null && _e !== void 0 ? _e : (_p.modulusLength = 2048);
|
|
34
|
+
(_f = (_q = this.asymetricOptions).privateKeyEncoding) !== null && _f !== void 0 ? _f : (_q.privateKeyEncoding = {});
|
|
35
|
+
(_g = (_r = this.asymetricOptions.privateKeyEncoding).format) !== null && _g !== void 0 ? _g : (_r.format = "pem");
|
|
36
|
+
(_h = (_s = this.asymetricOptions.privateKeyEncoding).type) !== null && _h !== void 0 ? _h : (_s.type = "pkcs8");
|
|
37
|
+
(_j = (_t = this.asymetricOptions).publicKeyEncoding) !== null && _j !== void 0 ? _j : (_t.publicKeyEncoding = {});
|
|
38
|
+
(_k = (_u = this.asymetricOptions.publicKeyEncoding).format) !== null && _k !== void 0 ? _k : (_u.format = "pem");
|
|
39
|
+
(_l = (_v = this.asymetricOptions.publicKeyEncoding).type) !== null && _l !== void 0 ? _l : (_v.type = "spki");
|
|
40
|
+
(_m = this.jwt) !== null && _m !== void 0 ? _m : (this.jwt = {});
|
|
41
|
+
(_o = (_w = this.jwt).algorithm) !== null && _o !== void 0 ? _o : (_w.algorithm = "HS256");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.CryptoServiceParameters = CryptoServiceParameters;
|
|
45
|
+
/**
|
|
46
|
+
* @WebdaModda
|
|
47
|
+
*/
|
|
48
|
+
class CryptoService extends service_1.Service {
|
|
49
|
+
constructor() {
|
|
50
|
+
super(...arguments);
|
|
51
|
+
/**
|
|
52
|
+
* JWKS cache
|
|
53
|
+
*/
|
|
54
|
+
this.jwks = {};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @override
|
|
58
|
+
*/
|
|
59
|
+
loadParameters(params) {
|
|
60
|
+
return new CryptoServiceParameters(params);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* @override
|
|
64
|
+
*/
|
|
65
|
+
init() {
|
|
66
|
+
const _super = Object.create(null, {
|
|
67
|
+
init: { get: () => super.init }
|
|
68
|
+
});
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
yield _super.init.call(this);
|
|
71
|
+
// Load keys
|
|
72
|
+
if (!(yield this.load()) && this.parameters.autoRotate) {
|
|
73
|
+
yield this.rotate();
|
|
74
|
+
}
|
|
75
|
+
if (this.parameters.expose) {
|
|
76
|
+
this.addRoute(this.parameters.expose, ["GET"], this.serveJWKS);
|
|
77
|
+
}
|
|
78
|
+
return this;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
*
|
|
83
|
+
*/
|
|
84
|
+
serveJWKS(context) {
|
|
85
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
context.write({
|
|
87
|
+
keys: Object.keys(this.keys).map(k => {
|
|
88
|
+
if (!this.jwks[k]) {
|
|
89
|
+
/*
|
|
90
|
+
when Node >= 16
|
|
91
|
+
this.jwks[k] = createPublicKey(this.keys[k].publicKey).export({ format: "jwk" });
|
|
92
|
+
and remove pem-jwk
|
|
93
|
+
*/
|
|
94
|
+
this.jwks[k] = (0, pem_jwk_1.pem2jwk)(this.keys[k].publicKey);
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
kty: "RSA",
|
|
98
|
+
kid: k,
|
|
99
|
+
n: this.jwks[k].n,
|
|
100
|
+
e: this.jwks[k].e
|
|
101
|
+
};
|
|
102
|
+
})
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Load keys from registry
|
|
108
|
+
*/
|
|
109
|
+
load() {
|
|
110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
let load = yield this.registry.get("keys");
|
|
112
|
+
if (!load) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
this.keys = {};
|
|
116
|
+
Object.keys(load)
|
|
117
|
+
.filter(k => k.startsWith("key_"))
|
|
118
|
+
.forEach(k => {
|
|
119
|
+
this.keys[k.substring(4)] = load[k];
|
|
120
|
+
});
|
|
121
|
+
this.current = load.current.startsWith("init-") ? undefined : load.current;
|
|
122
|
+
this.age = parseInt(this.current, 36);
|
|
123
|
+
return true;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Generate asymetric key
|
|
128
|
+
* @returns
|
|
129
|
+
*/
|
|
130
|
+
generateAsymetricKeys() {
|
|
131
|
+
const { publicKey, privateKey } = (0, crypto_1.generateKeyPairSync)(
|
|
132
|
+
// @ts-ignore
|
|
133
|
+
this.parameters.asymetricType, this.parameters.asymetricOptions);
|
|
134
|
+
return { publicKey, privateKey };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Generate symetric key
|
|
138
|
+
* @returns
|
|
139
|
+
*/
|
|
140
|
+
generateSymetricKey() {
|
|
141
|
+
return (0, crypto_1.randomBytes)(this.parameters.symetricKeyLength / 8).toString("base64");
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Return current key set
|
|
145
|
+
*/
|
|
146
|
+
getCurrentKeys() {
|
|
147
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
if (!this.keys || !this.current || !this.keys[this.current]) {
|
|
149
|
+
throw new Error("CryptoService not initialized");
|
|
150
|
+
}
|
|
151
|
+
return { keys: this.keys[this.current], id: this.current };
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Retrieve a HMAC for a string
|
|
156
|
+
* @param data
|
|
157
|
+
* @param keyId to use
|
|
158
|
+
* @returns
|
|
159
|
+
*/
|
|
160
|
+
hmac(data, keyId) {
|
|
161
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
+
if (typeof data !== "string") {
|
|
163
|
+
data = serializers_1.JSONUtils.stringify(data);
|
|
164
|
+
}
|
|
165
|
+
let key = keyId ? { id: keyId, keys: this.keys[keyId] } : yield this.getCurrentKeys();
|
|
166
|
+
return key.id + "." + (0, crypto_1.createHmac)("sha256", key.keys.symetric).update(data).digest("hex");
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Verify a HMAC for a string
|
|
171
|
+
* @param data
|
|
172
|
+
* @returns
|
|
173
|
+
*/
|
|
174
|
+
hmacVerify(data, hmac) {
|
|
175
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
176
|
+
if (typeof data !== "string") {
|
|
177
|
+
data = serializers_1.JSONUtils.stringify(data);
|
|
178
|
+
}
|
|
179
|
+
let [keyId, mac] = hmac.split(".");
|
|
180
|
+
if (!(yield this.checkKey(keyId))) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
return (0, crypto_1.createHmac)("sha256", this.keys[keyId].symetric).update(data).digest("hex") === mac;
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* JWT token generation
|
|
188
|
+
*/
|
|
189
|
+
jwtSign(data, options) {
|
|
190
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
191
|
+
let res = Object.assign(Object.assign({}, this.parameters.jwt), options);
|
|
192
|
+
let key = res.secretOrPublicKey;
|
|
193
|
+
// Default to our current private key
|
|
194
|
+
if (!res.secretOrPublicKey) {
|
|
195
|
+
let keyInfo = yield this.getCurrentKeys();
|
|
196
|
+
// Depending on the algo fallback to the right key
|
|
197
|
+
if (res.algorithm.startsWith("HS")) {
|
|
198
|
+
key = keyInfo.keys.symetric;
|
|
199
|
+
res.keyid = "S" + keyInfo.id;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
key = keyInfo.keys.privateKey;
|
|
203
|
+
res.keyid = "A" + keyInfo.id;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
delete res.secretOrPublicKey;
|
|
207
|
+
return jwt.sign(data, key, res);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
*
|
|
212
|
+
* @param keyId
|
|
213
|
+
* @returns
|
|
214
|
+
*/
|
|
215
|
+
checkKey(keyId) {
|
|
216
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
217
|
+
if (!this.keys[keyId]) {
|
|
218
|
+
// Key is more recent than current one so try to reload
|
|
219
|
+
if (parseInt(keyId, 36) > this.age) {
|
|
220
|
+
yield this.load();
|
|
221
|
+
}
|
|
222
|
+
// Key is still not found
|
|
223
|
+
if (!this.keys[keyId]) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return true;
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get JWT key based on kid
|
|
232
|
+
*/
|
|
233
|
+
getJWTKey(header, callback) {
|
|
234
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
235
|
+
if (!header.kid) {
|
|
236
|
+
callback(new Error("Unknown key"));
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
let keyId = header.kid.substring(1);
|
|
240
|
+
if (!(yield this.checkKey(keyId))) {
|
|
241
|
+
callback(new Error("Unknown key"));
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// Check first letter that define Symetric or Asymetric
|
|
245
|
+
if (header.kid.startsWith("S")) {
|
|
246
|
+
callback(null, this.keys[keyId].symetric);
|
|
247
|
+
}
|
|
248
|
+
else if (header.kid.startsWith("A")) {
|
|
249
|
+
callback(null, this.keys[keyId].publicKey);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
callback(new Error("Unknown key"));
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* JWT token verification
|
|
258
|
+
*/
|
|
259
|
+
jwtVerify(token, options) {
|
|
260
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
261
|
+
return new Promise((resolve, reject) => {
|
|
262
|
+
jwt.verify(token, (options === null || options === void 0 ? void 0 : options.secretOrPublicKey) || this.getJWTKey.bind(this), Object.assign(Object.assign({}, options), { secretOrPublicKey: undefined }), (err, result) => {
|
|
263
|
+
if (err) {
|
|
264
|
+
reject(err);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
resolve(result);
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Encrypt data
|
|
275
|
+
*/
|
|
276
|
+
encrypt(data) {
|
|
277
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
278
|
+
let key = yield this.getCurrentKeys();
|
|
279
|
+
// Initialization Vector
|
|
280
|
+
let iv = (0, crypto_1.randomBytes)(16);
|
|
281
|
+
let cipher = (0, crypto_1.createCipheriv)(this.parameters.symetricCipher, Buffer.from(key.keys.symetric, "base64"), iv);
|
|
282
|
+
let encrypted = Buffer.concat([iv, cipher.update(Buffer.from(JSON.stringify(data))), cipher.final()]).toString("base64");
|
|
283
|
+
return this.jwtSign(encrypted, { keyid: `S${key.id}`, secretOrPublicKey: key.keys.symetric });
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Parse the JWT header section
|
|
288
|
+
*/
|
|
289
|
+
getJWTHeader(token) {
|
|
290
|
+
return JSON.parse(Buffer.from(token.split(".")[0], "base64").toString());
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Decrypt data
|
|
294
|
+
*/
|
|
295
|
+
decrypt(token) {
|
|
296
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
297
|
+
let input = Buffer.from(yield this.jwtVerify(token), "base64");
|
|
298
|
+
let header = this.getJWTHeader(token);
|
|
299
|
+
let iv = input.slice(0, 16);
|
|
300
|
+
let decipher = (0, crypto_1.createDecipheriv)(this.parameters.symetricCipher, Buffer.from(this.keys[header.kid.substring(1)].symetric, "base64"), iv);
|
|
301
|
+
return JSON.parse(decipher.update(input.slice(16)).toString() + decipher.final().toString());
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get next id
|
|
306
|
+
*/
|
|
307
|
+
getNextId() {
|
|
308
|
+
// Should be good for years as 8char
|
|
309
|
+
let age = Math.floor(Date.now() / 1000);
|
|
310
|
+
return { age, id: age.toString(36) };
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Rotate keys
|
|
314
|
+
*/
|
|
315
|
+
rotate() {
|
|
316
|
+
var _a;
|
|
317
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
318
|
+
const { age, id } = this.getNextId();
|
|
319
|
+
let next = {
|
|
320
|
+
current: id,
|
|
321
|
+
rotationInstance: this.getWebda().getInstanceId()
|
|
322
|
+
};
|
|
323
|
+
next[`key_${id}`] = Object.assign(Object.assign({}, this.generateAsymetricKeys()), { symetric: this.generateSymetricKey() });
|
|
324
|
+
if (!(yield this.registry.exists("keys"))) {
|
|
325
|
+
this.current = `init-${this.getWebda().getInstanceId()}`;
|
|
326
|
+
yield this.registry.put("keys", { current: this.current });
|
|
327
|
+
}
|
|
328
|
+
if (yield this.registry.conditionalPatch("keys", next, "current", this.current)) {
|
|
329
|
+
(_a = this.keys) !== null && _a !== void 0 ? _a : (this.keys = {});
|
|
330
|
+
this.keys[id] = next[`key_${id}`];
|
|
331
|
+
this.current = id;
|
|
332
|
+
this.age = age;
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
// Reload as something else has modified
|
|
336
|
+
yield this.load();
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
__decorate([
|
|
342
|
+
(0, service_1.Inject)("Registry")
|
|
343
|
+
], CryptoService.prototype, "registry", void 0);
|
|
344
|
+
exports.default = CryptoService;
|
|
345
|
+
exports.CryptoService = CryptoService;
|
|
346
|
+
//# sourceMappingURL=cryptoservice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptoservice.js","sourceRoot":"","sources":["../../src/services/cryptoservice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const mocha_1 = require("@testdeck/mocha");
|
|
19
|
+
const assert = require("assert");
|
|
20
|
+
const jwt = require("jsonwebtoken");
|
|
21
|
+
const sinon = require("sinon");
|
|
22
|
+
const test_1 = require("../test");
|
|
23
|
+
const serializers_1 = require("../utils/serializers");
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
let CryptoServiceTest = class CryptoServiceTest extends test_1.WebdaTest {
|
|
28
|
+
hmac() {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
let hmac = yield this.webda.getCrypto().hmac({ test: "plop" });
|
|
31
|
+
let hmacString = yield this.webda.getCrypto().hmac(serializers_1.JSONUtils.stringify({ test: "plop" }));
|
|
32
|
+
assert.strictEqual(hmac, hmacString);
|
|
33
|
+
yield this.webda.getCrypto().hmacVerify({ test: "plop" }, hmac);
|
|
34
|
+
yield this.webda.getCrypto().hmacVerify(serializers_1.JSONUtils.stringify({ test: "plop" }), hmac);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
encryption() {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
let encrypted = yield this.webda.getCrypto().encrypt({ test: "plop" });
|
|
40
|
+
let decrypted = yield this.webda.getCrypto().decrypt(encrypted);
|
|
41
|
+
assert.strictEqual(decrypted.test, "plop");
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
rotate() {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const crypto = this.webda.getCrypto();
|
|
47
|
+
let encrypted = yield crypto.encrypt({ test: "plop" });
|
|
48
|
+
let oldKey = crypto.current;
|
|
49
|
+
let hmac = yield crypto.hmac({ test: "plop" });
|
|
50
|
+
sinon.stub(crypto, "getNextId").callsFake(this.nextIdStub(crypto));
|
|
51
|
+
yield crypto.rotate();
|
|
52
|
+
let decrypted = yield crypto.decrypt(encrypted);
|
|
53
|
+
assert.strictEqual(decrypted.test, "plop");
|
|
54
|
+
yield crypto.hmacVerify({ test: "plop" }, hmac);
|
|
55
|
+
assert.strictEqual(yield crypto.hmac({ test: "plop" }, oldKey), hmac);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
failedRotation() {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
// Check failed rotate
|
|
61
|
+
yield this.webda.getRegistry().patch({ uuid: "keys", current: "123" });
|
|
62
|
+
yield this.webda.getCrypto().rotate();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Increment by one every time
|
|
67
|
+
*/
|
|
68
|
+
nextIdStub(crypto) {
|
|
69
|
+
return () => {
|
|
70
|
+
let age = parseInt(crypto.current, 36) + 10;
|
|
71
|
+
return {
|
|
72
|
+
id: age.toString(36),
|
|
73
|
+
age
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
jwks() {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
const crypto = this.webda.getCrypto();
|
|
80
|
+
crypto.getParameters().expose = "/jwk";
|
|
81
|
+
yield crypto.init();
|
|
82
|
+
let ctx = yield this.newContext();
|
|
83
|
+
yield this.execute(ctx, "test.webda.io", "GET", "/jwk");
|
|
84
|
+
let body = JSON.parse(ctx.getResponseBody());
|
|
85
|
+
sinon.stub(crypto, "getNextId").callsFake(this.nextIdStub(crypto));
|
|
86
|
+
assert.strictEqual(body.keys.length, 1);
|
|
87
|
+
yield crypto.rotate();
|
|
88
|
+
yield this.execute(ctx, "test.webda.io", "GET", "/jwk");
|
|
89
|
+
body = JSON.parse(ctx.getResponseBody());
|
|
90
|
+
assert.strictEqual(body.keys.length, 2);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
unknownKeys() {
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
const crypto = this.webda.getCrypto();
|
|
96
|
+
// Custom made JWT
|
|
97
|
+
let jwtToken = jwt.sign("TEST", "test");
|
|
98
|
+
yield assert.rejects(() => crypto.jwtVerify(jwtToken), /Unknown key/);
|
|
99
|
+
jwtToken = jwt.sign("TEST", "test", { keyid: "B" + crypto.current });
|
|
100
|
+
yield assert.rejects(() => crypto.jwtVerify(jwtToken), /Unknown key/);
|
|
101
|
+
assert.ok(!(yield crypto.hmacVerify("mydata", "md.ss")));
|
|
102
|
+
let oldKey = crypto.current;
|
|
103
|
+
sinon.stub(crypto, "getNextId").callsFake(this.nextIdStub(crypto));
|
|
104
|
+
yield crypto.rotate();
|
|
105
|
+
let encrypted = yield this.webda.getCrypto().encrypt({ test: "plop" });
|
|
106
|
+
delete crypto.keys[crypto.current];
|
|
107
|
+
crypto.current = oldKey;
|
|
108
|
+
crypto.age = parseInt(oldKey, 36); // It should be reloaded
|
|
109
|
+
assert.strictEqual((yield this.webda.getCrypto().decrypt(encrypted)).test, "plop");
|
|
110
|
+
// Remove again but remove it from the registry now
|
|
111
|
+
yield this.webda.getRegistry().removeAttribute("keys", `key_${crypto.current}`);
|
|
112
|
+
delete crypto.keys[crypto.current];
|
|
113
|
+
crypto.current = oldKey;
|
|
114
|
+
crypto.age = parseInt(oldKey, 36);
|
|
115
|
+
yield assert.rejects(() => this.webda.getCrypto().decrypt(encrypted), /err/);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
jwt() {
|
|
119
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
120
|
+
// Test asymetric JWT
|
|
121
|
+
const crypto = this.webda.getCrypto();
|
|
122
|
+
let token = yield crypto.jwtSign("plop", { algorithm: "PS256" });
|
|
123
|
+
assert.strictEqual(yield crypto.jwtVerify(token), "plop");
|
|
124
|
+
token = yield crypto.jwtSign("plop");
|
|
125
|
+
assert.strictEqual(yield crypto.jwtVerify(token), "plop");
|
|
126
|
+
token = yield crypto.jwtSign("plop", { algorithm: "HS256" });
|
|
127
|
+
assert.strictEqual(yield crypto.jwtVerify(token), "plop");
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
cov() {
|
|
131
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
132
|
+
this.webda.getCrypto().keys = undefined;
|
|
133
|
+
yield assert.rejects(() => this.webda.getCrypto().getCurrentKeys(), /not initialized/);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
__decorate([
|
|
138
|
+
mocha_1.test
|
|
139
|
+
], CryptoServiceTest.prototype, "hmac", null);
|
|
140
|
+
__decorate([
|
|
141
|
+
mocha_1.test
|
|
142
|
+
], CryptoServiceTest.prototype, "encryption", null);
|
|
143
|
+
__decorate([
|
|
144
|
+
mocha_1.test
|
|
145
|
+
], CryptoServiceTest.prototype, "rotate", null);
|
|
146
|
+
__decorate([
|
|
147
|
+
mocha_1.test
|
|
148
|
+
], CryptoServiceTest.prototype, "failedRotation", null);
|
|
149
|
+
__decorate([
|
|
150
|
+
mocha_1.test
|
|
151
|
+
], CryptoServiceTest.prototype, "jwks", null);
|
|
152
|
+
__decorate([
|
|
153
|
+
mocha_1.test
|
|
154
|
+
], CryptoServiceTest.prototype, "unknownKeys", null);
|
|
155
|
+
__decorate([
|
|
156
|
+
mocha_1.test
|
|
157
|
+
], CryptoServiceTest.prototype, "jwt", null);
|
|
158
|
+
__decorate([
|
|
159
|
+
mocha_1.test
|
|
160
|
+
], CryptoServiceTest.prototype, "cov", null);
|
|
161
|
+
CryptoServiceTest = __decorate([
|
|
162
|
+
mocha_1.suite
|
|
163
|
+
], CryptoServiceTest);
|
|
164
|
+
//# sourceMappingURL=cryptoservice.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptoservice.spec.js","sourceRoot":"","sources":["../../src/services/cryptoservice.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAA8C;AAC9C,iCAAiC;AACjC,oCAAoC;AACpC,+BAA+B;AAC/B,kCAAoC;AACpC,sDAAiD;AAGjD;;GAEG;AAEH,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,gBAAS;IAEjC,IAAI;;YACR,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,uBAAS,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1F,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACrC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,uBAAS,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACvF,CAAC;KAAA;IAGK,UAAU;;YACd,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;KAAA;IAGK,MAAM;;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACvD,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,IAAI,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QACxE,CAAC;KAAA;IAGK,cAAc;;YAClB,sBAAsB;YACtB,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACvE,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC;QACxC,CAAC;KAAA;IAED;;OAEG;IACH,UAAU,CAAC,MAAqB;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YAC5C,OAAO;gBACL,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpB,GAAG;aACJ,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAGK,IAAI;;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;YACvC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;KAAA;IAGK,WAAW;;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAEtC,kBAAkB;YAClB,IAAI,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;YACtE,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;YAEtE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAEzD,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB;YAE3D,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnF,mDAAmD;YACnD,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/E,CAAC;KAAA;IAGK,GAAG;;YACP,qBAAqB;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YAC1D,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YAC1D,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;KAAA;IAGK,GAAG;;YACP,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC;YACxC,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACzF,CAAC;KAAA;CACF,CAAA;AA/GC;IADC,YAAI;6CAOJ;AAGD;IADC,YAAI;mDAKJ;AAGD;IADC,YAAI;+CAYJ;AAGD;IADC,YAAI;uDAKJ;AAgBD;IADC,YAAI;6CAcJ;AAGD;IADC,YAAI;oDA2BJ;AAGD;IADC,YAAI;4CAUJ;AAGD;IADC,YAAI;4CAIJ;AAhHG,iBAAiB;IADtB,aAAK;GACA,iBAAiB,CAiHtB"}
|
|
@@ -3,6 +3,7 @@ import { Readable } from "stream";
|
|
|
3
3
|
import { CloudBinary, CloudBinaryParameters, CoreModel } from "..";
|
|
4
4
|
import { Context } from "../utils/context";
|
|
5
5
|
import { Binary, BinaryFile, BinaryMap } from "./binary";
|
|
6
|
+
import CryptoService from "./cryptoservice";
|
|
6
7
|
import { ServiceParameters } from "./service";
|
|
7
8
|
export declare class FileBinaryParameters extends CloudBinaryParameters {
|
|
8
9
|
/**
|
|
@@ -32,6 +33,10 @@ export declare class FileBinaryParameters extends CloudBinaryParameters {
|
|
|
32
33
|
* @WebdaModda
|
|
33
34
|
*/
|
|
34
35
|
export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParameters> extends CloudBinary<T> {
|
|
36
|
+
/**
|
|
37
|
+
* Used for hmac
|
|
38
|
+
*/
|
|
39
|
+
cryptoService: CryptoService;
|
|
35
40
|
/**
|
|
36
41
|
* Load parameters
|
|
37
42
|
*
|
|
@@ -69,7 +74,7 @@ export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParam
|
|
|
69
74
|
* @param ctx
|
|
70
75
|
* @param expiresIn
|
|
71
76
|
*/
|
|
72
|
-
getToken(hash: string, method: "PUT" | "GET", expiresIn?: number):
|
|
77
|
+
getToken(hash: string, method: "PUT" | "GET", expiresIn?: number): Promise<string>;
|
|
73
78
|
/**
|
|
74
79
|
* Get put URL
|
|
75
80
|
* @param ctx
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
2
8
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
9
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
10
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -11,10 +17,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
18
|
exports.FileBinary = exports.FileBinaryParameters = void 0;
|
|
13
19
|
const fs = require("fs");
|
|
14
|
-
const jwt = require("jsonwebtoken");
|
|
15
20
|
const path_1 = require("path");
|
|
16
21
|
const __1 = require("..");
|
|
17
22
|
const binary_1 = require("./binary");
|
|
23
|
+
const service_1 = require("./service");
|
|
18
24
|
class FileBinaryParameters extends __1.CloudBinaryParameters {
|
|
19
25
|
constructor(params, service) {
|
|
20
26
|
var _a;
|
|
@@ -114,7 +120,7 @@ class FileBinary extends __1.CloudBinary {
|
|
|
114
120
|
const { hash } = ctx.getPathParameters();
|
|
115
121
|
// Verify token
|
|
116
122
|
try {
|
|
117
|
-
let dt =
|
|
123
|
+
let dt = yield this.cryptoService.jwtVerify(ctx.parameter("token"));
|
|
118
124
|
if (dt.hash !== hash) {
|
|
119
125
|
throw 403;
|
|
120
126
|
}
|
|
@@ -153,7 +159,7 @@ class FileBinary extends __1.CloudBinary {
|
|
|
153
159
|
return __awaiter(this, void 0, void 0, function* () {
|
|
154
160
|
return `${context
|
|
155
161
|
.getHttpContext()
|
|
156
|
-
.getAbsoluteUrl(this.parameters.expose.url + "/download/data/" + map.hash)}?token=${this.getToken(map.hash, "GET", expires)}&content-type=${map.mimetype}&content-disposition=attachment`;
|
|
162
|
+
.getAbsoluteUrl(this.parameters.expose.url + "/download/data/" + map.hash)}?token=${yield this.getToken(map.hash, "GET", expires)}&content-type=${map.mimetype}&content-disposition=attachment`;
|
|
157
163
|
});
|
|
158
164
|
}
|
|
159
165
|
/**
|
|
@@ -184,8 +190,10 @@ class FileBinary extends __1.CloudBinary {
|
|
|
184
190
|
* @param expiresIn
|
|
185
191
|
*/
|
|
186
192
|
getToken(hash, method, expiresIn = 60) {
|
|
187
|
-
return
|
|
188
|
-
|
|
193
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
194
|
+
return this.cryptoService.jwtSign({ hash, method }, {
|
|
195
|
+
expiresIn
|
|
196
|
+
});
|
|
189
197
|
});
|
|
190
198
|
}
|
|
191
199
|
/**
|
|
@@ -198,7 +206,7 @@ class FileBinary extends __1.CloudBinary {
|
|
|
198
206
|
let body = yield ctx.getRequestBody();
|
|
199
207
|
// Get a full URL, this method should be in a Route Object
|
|
200
208
|
// Add a JWT token for 60s
|
|
201
|
-
let token = this.getToken(body.hash, "PUT");
|
|
209
|
+
let token = yield this.getToken(body.hash, "PUT");
|
|
202
210
|
return ctx
|
|
203
211
|
.getHttpContext()
|
|
204
212
|
.getAbsoluteUrl(this.parameters.expose.url + "/upload/data/" + body.hash + `?token=${token}`);
|
|
@@ -262,7 +270,7 @@ class FileBinary extends __1.CloudBinary {
|
|
|
262
270
|
}
|
|
263
271
|
// Verify token
|
|
264
272
|
try {
|
|
265
|
-
let dt =
|
|
273
|
+
let dt = yield this.cryptoService.jwtVerify(ctx.parameter("token"));
|
|
266
274
|
if (dt.hash !== result.hash) {
|
|
267
275
|
this.log("WARN", "JWT hash differ", ctx.parameter("hash"), "!==", result.hash);
|
|
268
276
|
throw 403;
|
|
@@ -395,5 +403,8 @@ class FileBinary extends __1.CloudBinary {
|
|
|
395
403
|
});
|
|
396
404
|
}
|
|
397
405
|
}
|
|
406
|
+
__decorate([
|
|
407
|
+
(0, service_1.Inject)("CryptoService")
|
|
408
|
+
], FileBinary.prototype, "cryptoService", void 0);
|
|
398
409
|
exports.FileBinary = FileBinary;
|
|
399
410
|
//# sourceMappingURL=filebinary.js.map
|