@webda/core 2.0.0-beta.0 → 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.
Files changed (229) hide show
  1. package/lib/application.d.ts +40 -18
  2. package/lib/application.js +20 -6
  3. package/lib/application.js.map +1 -1
  4. package/lib/application.spec.js +12 -0
  5. package/lib/application.spec.js.map +1 -1
  6. package/lib/core.d.ts +69 -19
  7. package/lib/core.js +90 -38
  8. package/lib/core.js.map +1 -1
  9. package/lib/core.spec.js +42 -35
  10. package/lib/core.spec.js.map +1 -1
  11. package/lib/index.d.ts +4 -0
  12. package/lib/index.js +5 -0
  13. package/lib/index.js.map +1 -1
  14. package/lib/models/aclmodel.js +3 -2
  15. package/lib/models/aclmodel.js.map +1 -1
  16. package/lib/models/aclmodel.spec.js +7 -4
  17. package/lib/models/aclmodel.spec.js.map +1 -1
  18. package/lib/models/coremodel.d.ts +82 -9
  19. package/lib/models/coremodel.js +49 -0
  20. package/lib/models/coremodel.js.map +1 -1
  21. package/lib/models/coremodel.spec.js +21 -2
  22. package/lib/models/coremodel.spec.js.map +1 -1
  23. package/lib/models/ident.d.ts +4 -2
  24. package/lib/models/ident.js.map +1 -1
  25. package/lib/models/ident.spec.js +1 -1
  26. package/lib/models/ident.spec.js.map +1 -1
  27. package/lib/models/ownermodel.d.ts +11 -1
  28. package/lib/models/ownermodel.js +16 -1
  29. package/lib/models/ownermodel.js.map +1 -1
  30. package/lib/models/ownermodel.spec.js +32 -13
  31. package/lib/models/ownermodel.spec.js.map +1 -1
  32. package/lib/models/rolemodel.d.ts +1 -1
  33. package/lib/models/rolemodel.spec.js +3 -1
  34. package/lib/models/rolemodel.spec.js.map +1 -1
  35. package/lib/models/user.d.ts +3 -3
  36. package/lib/models/user.js.map +1 -1
  37. package/lib/models/user.spec.js +1 -1
  38. package/lib/models/user.spec.js.map +1 -1
  39. package/lib/queues/filequeue.js +2 -2
  40. package/lib/queues/filequeue.js.map +1 -1
  41. package/lib/queues/filequeue.spec.js +2 -2
  42. package/lib/queues/filequeue.spec.js.map +1 -1
  43. package/lib/queues/memoryqueue.spec.js +1 -1
  44. package/lib/queues/memoryqueue.spec.js.map +1 -1
  45. package/lib/queues/queue.spec.js +1 -1
  46. package/lib/queues/queue.spec.js.map +1 -1
  47. package/lib/queues/queueservice.d.ts +2 -2
  48. package/lib/queues/queueservice.js +1 -0
  49. package/lib/queues/queueservice.js.map +1 -1
  50. package/lib/router.d.ts +6 -1
  51. package/lib/router.js +3 -12
  52. package/lib/router.js.map +1 -1
  53. package/lib/router.spec.js +5 -5
  54. package/lib/router.spec.js.map +1 -1
  55. package/lib/services/asyncevents.spec.js +2 -2
  56. package/lib/services/asyncevents.spec.js.map +1 -1
  57. package/lib/services/authentication.d.ts +33 -14
  58. package/lib/services/authentication.js +24 -36
  59. package/lib/services/authentication.js.map +1 -1
  60. package/lib/services/authentication.spec.js +16 -16
  61. package/lib/services/authentication.spec.js.map +1 -1
  62. package/lib/services/binary.d.ts +3 -3
  63. package/lib/services/binary.js +24 -17
  64. package/lib/services/binary.js.map +1 -1
  65. package/lib/services/binary.spec.d.ts +1 -1
  66. package/lib/services/binary.spec.js +5 -5
  67. package/lib/services/binary.spec.js.map +1 -1
  68. package/lib/services/cloudbinary.d.ts +2 -2
  69. package/lib/services/cloudbinary.js +3 -3
  70. package/lib/services/cloudbinary.js.map +1 -1
  71. package/lib/services/cloudbinary.spec.js +8 -1
  72. package/lib/services/cloudbinary.spec.js.map +1 -1
  73. package/lib/services/configuration.d.ts +5 -2
  74. package/lib/services/configuration.js +4 -2
  75. package/lib/services/configuration.js.map +1 -1
  76. package/lib/services/configuration.spec.js +2 -2
  77. package/lib/services/configuration.spec.js.map +1 -1
  78. package/lib/services/cron.d.ts +1 -1
  79. package/lib/services/cron.js +1 -1
  80. package/lib/services/cron.js.map +1 -1
  81. package/lib/services/cron.spec.js +3 -3
  82. package/lib/services/cron.spec.js.map +1 -1
  83. package/lib/services/cryptoservice.d.ts +253 -0
  84. package/lib/services/cryptoservice.js +346 -0
  85. package/lib/services/cryptoservice.js.map +1 -0
  86. package/lib/services/cryptoservice.spec.d.ts +1 -0
  87. package/lib/services/cryptoservice.spec.js +164 -0
  88. package/lib/services/cryptoservice.spec.js.map +1 -0
  89. package/lib/services/debugmailer.spec.js +1 -1
  90. package/lib/services/debugmailer.spec.js.map +1 -1
  91. package/lib/services/echo.d.ts +1 -1
  92. package/lib/services/echo.spec.js +3 -3
  93. package/lib/services/echo.spec.js.map +1 -1
  94. package/lib/services/filebinary.d.ts +16 -6
  95. package/lib/services/filebinary.js +45 -22
  96. package/lib/services/filebinary.js.map +1 -1
  97. package/lib/services/filebinary.spec.js +7 -11
  98. package/lib/services/filebinary.spec.js.map +1 -1
  99. package/lib/services/fileconfiguration.d.ts +1 -1
  100. package/lib/services/fileconfiguration.js +3 -2
  101. package/lib/services/fileconfiguration.js.map +1 -1
  102. package/lib/services/fileconfiguration.spec.js +2 -2
  103. package/lib/services/fileconfiguration.spec.js.map +1 -1
  104. package/lib/services/invitationservice.d.ts +28 -6
  105. package/lib/services/invitationservice.js +8 -5
  106. package/lib/services/invitationservice.js.map +1 -1
  107. package/lib/services/invitationservice.spec.js +4 -4
  108. package/lib/services/invitationservice.spec.js.map +1 -1
  109. package/lib/services/kubernetesconfiguration.d.ts +1 -1
  110. package/lib/services/kubernetesconfiguration.js +3 -2
  111. package/lib/services/kubernetesconfiguration.js.map +1 -1
  112. package/lib/services/kubernetesconfiguration.spec.js +4 -4
  113. package/lib/services/kubernetesconfiguration.spec.js.map +1 -1
  114. package/lib/services/mailer.js.map +1 -1
  115. package/lib/services/mailer.spec.js +3 -3
  116. package/lib/services/mailer.spec.js.map +1 -1
  117. package/lib/services/notificationservice.d.ts +1 -1
  118. package/lib/services/notificationservice.js +2 -0
  119. package/lib/services/notificationservice.js.map +1 -1
  120. package/lib/services/notificationservice.spec.js +2 -2
  121. package/lib/services/notificationservice.spec.js.map +1 -1
  122. package/lib/services/oauth.d.ts +30 -4
  123. package/lib/services/oauth.js +19 -10
  124. package/lib/services/oauth.js.map +1 -1
  125. package/lib/services/oauth.spec.js +30 -23
  126. package/lib/services/oauth.spec.js.map +1 -1
  127. package/lib/services/proxy.d.ts +78 -0
  128. package/lib/services/proxy.js +139 -0
  129. package/lib/services/proxy.js.map +1 -0
  130. package/lib/services/proxy.spec.d.ts +1 -0
  131. package/lib/services/proxy.spec.js +78 -0
  132. package/lib/services/proxy.spec.js.map +1 -0
  133. package/lib/services/resource.d.ts +17 -0
  134. package/lib/services/resource.js +20 -6
  135. package/lib/services/resource.js.map +1 -1
  136. package/lib/services/resource.spec.js +4 -3
  137. package/lib/services/resource.spec.js.map +1 -1
  138. package/lib/services/service.d.ts +10 -7
  139. package/lib/services/service.js +7 -3
  140. package/lib/services/service.js.map +1 -1
  141. package/lib/services/service.spec.js +2 -2
  142. package/lib/services/service.spec.js.map +1 -1
  143. package/lib/services/version.d.ts +1 -1
  144. package/lib/services/version.spec.js +1 -1
  145. package/lib/services/version.spec.js.map +1 -1
  146. package/lib/stores/aggregator.d.ts +1 -1
  147. package/lib/stores/aggregator.js +1 -0
  148. package/lib/stores/aggregator.js.map +1 -1
  149. package/lib/stores/file.d.ts +9 -1
  150. package/lib/stores/file.js +7 -4
  151. package/lib/stores/file.js.map +1 -1
  152. package/lib/stores/file.spec.d.ts +3 -1
  153. package/lib/stores/file.spec.js +30 -7
  154. package/lib/stores/file.spec.js.map +1 -1
  155. package/lib/stores/mapper.d.ts +1 -1
  156. package/lib/stores/mapper.js +2 -0
  157. package/lib/stores/mapper.js.map +1 -1
  158. package/lib/stores/mapper.spec.js +1 -1
  159. package/lib/stores/mapper.spec.js.map +1 -1
  160. package/lib/stores/memory.d.ts +65 -4
  161. package/lib/stores/memory.js +85 -1
  162. package/lib/stores/memory.js.map +1 -1
  163. package/lib/stores/memory.spec.d.ts +2 -1
  164. package/lib/stores/memory.spec.js +47 -4
  165. package/lib/stores/memory.spec.js.map +1 -1
  166. package/lib/stores/store.d.ts +27 -5
  167. package/lib/stores/store.js +107 -22
  168. package/lib/stores/store.js.map +1 -1
  169. package/lib/stores/store.spec.d.ts +4 -3
  170. package/lib/stores/store.spec.js +37 -14
  171. package/lib/stores/store.spec.js.map +1 -1
  172. package/lib/stores/webdaql/WebdaQLLexer.js +2 -2
  173. package/lib/stores/webdaql/WebdaQLLexer.js.map +1 -1
  174. package/lib/stores/webdaql/WebdaQLParserLexer.js +2 -2
  175. package/lib/stores/webdaql/WebdaQLParserLexer.js.map +1 -1
  176. package/lib/stores/webdaql/WebdaQLParserListener.d.ts +1 -25
  177. package/lib/stores/webdaql/WebdaQLParserParser.d.ts +1 -1
  178. package/lib/stores/webdaql/WebdaQLParserParser.js +2 -2
  179. package/lib/stores/webdaql/WebdaQLParserParser.js.map +1 -1
  180. package/lib/stores/webdaql/WebdaQLParserVisitor.d.ts +1 -25
  181. package/lib/stores/webdaql/query.d.ts +3 -3
  182. package/lib/stores/webdaql/query.js +4 -4
  183. package/lib/stores/webdaql/query.js.map +1 -1
  184. package/lib/stores/webdaql/query.spec.js +1 -1
  185. package/lib/stores/webdaql/query.spec.js.map +1 -1
  186. package/lib/test.d.ts +6 -8
  187. package/lib/test.js +12 -18
  188. package/lib/test.js.map +1 -1
  189. package/lib/unpackedapplication.js +24 -7
  190. package/lib/unpackedapplication.js.map +1 -1
  191. package/lib/utils/abstractdeployer.spec.js +1 -1
  192. package/lib/utils/abstractdeployer.spec.js.map +1 -1
  193. package/lib/utils/context.d.ts +61 -73
  194. package/lib/utils/context.js +81 -159
  195. package/lib/utils/context.js.map +1 -1
  196. package/lib/utils/context.spec.js +79 -40
  197. package/lib/utils/context.spec.js.map +1 -1
  198. package/lib/utils/cookie.d.ts +65 -44
  199. package/lib/utils/cookie.js +75 -145
  200. package/lib/utils/cookie.js.map +1 -1
  201. package/lib/utils/cookie.spec.js +203 -199
  202. package/lib/utils/cookie.spec.js.map +1 -1
  203. package/lib/utils/httpcontext.d.ts +182 -0
  204. package/lib/utils/httpcontext.js +325 -0
  205. package/lib/utils/httpcontext.js.map +1 -0
  206. package/lib/utils/httpcontext.spec.d.ts +5 -0
  207. package/lib/utils/httpcontext.spec.js +90 -0
  208. package/lib/utils/httpcontext.spec.js.map +1 -0
  209. package/lib/utils/logger.d.ts +2 -2
  210. package/lib/utils/logger.js +1 -1
  211. package/lib/utils/logger.js.map +1 -1
  212. package/lib/utils/logger.spec.js.map +1 -1
  213. package/lib/utils/serializers.js +1 -1
  214. package/lib/utils/serializers.js.map +1 -1
  215. package/lib/utils/serializers.spec.js +3 -3
  216. package/lib/utils/serializers.spec.js.map +1 -1
  217. package/lib/utils/session.d.ts +120 -0
  218. package/lib/utils/session.js +177 -0
  219. package/lib/utils/session.js.map +1 -0
  220. package/lib/utils/session.spec.d.ts +1 -0
  221. package/lib/utils/session.spec.js +79 -0
  222. package/lib/utils/session.spec.js.map +1 -0
  223. package/lib/utils/waiter.js.map +1 -1
  224. package/lib/utils/waiter.spec.js +2 -2
  225. package/lib/utils/waiter.spec.js.map +1 -1
  226. package/package.json +10 -7
  227. package/test/config.json +4 -2
  228. package/test/models/task.js +0 -1
  229. 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"}
@@ -15,8 +15,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
15
15
  });
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- const assert = require("assert");
19
18
  const mocha_1 = require("@testdeck/mocha");
19
+ const assert = require("assert");
20
20
  const test_1 = require("../test");
21
21
  const debugmailer_1 = require("./debugmailer");
22
22
  let DebugMailerTest = class DebugMailerTest extends test_1.WebdaTest {
@@ -1 +1 @@
1
- {"version":3,"file":"debugmailer.spec.js","sourceRoot":"","sources":["../../src/services/debugmailer.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iCAAiC;AACjC,2CAA8C;AAC9C,kCAAoC;AACpC,+CAA4C;AAG5C,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,gBAAS;IAE/B,QAAQ;;YACZ,IAAI,MAAM,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;YACjD,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC,CAAC;YAC7D,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,CAAC;KAAA;CACF,CAAA;AAVC;IADC,YAAI;+CAUJ;AAXG,eAAe;IADpB,aAAK;GACA,eAAe,CAYpB"}
1
+ {"version":3,"file":"debugmailer.spec.js","sourceRoot":"","sources":["../../src/services/debugmailer.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAA8C;AAC9C,iCAAiC;AACjC,kCAAoC;AACpC,+CAA4C;AAG5C,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,gBAAS;IAE/B,QAAQ;;YACZ,IAAI,MAAM,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;YACjD,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC,CAAC;YAC7D,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,CAAC;KAAA;CACF,CAAA;AAVC;IADC,YAAI;+CAUJ;AAXG,eAAe;IADpB,aAAK;GACA,eAAe,CAYpB"}
@@ -1,5 +1,5 @@
1
1
  import { Context } from "../index";
2
- import { ServiceParameters, Service } from "./service";
2
+ import { Service, ServiceParameters } from "./service";
3
3
  export declare class EchoServiceParameters extends ServiceParameters {
4
4
  /**
5
5
  * Mime of the result
@@ -15,11 +15,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
15
15
  });
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- const test_1 = require("../test");
19
- const assert = require("assert");
20
- const echo_1 = require("./echo");
21
18
  const mocha_1 = require("@testdeck/mocha");
19
+ const assert = require("assert");
22
20
  const sinon = require("sinon");
21
+ const test_1 = require("../test");
22
+ const echo_1 = require("./echo");
23
23
  let EchoTest = class EchoTest extends test_1.WebdaTest {
24
24
  cov() {
25
25
  return __awaiter(this, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"echo.spec.js","sourceRoot":"","sources":["../../src/services/echo.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kCAAoC;AACpC,iCAAiC;AACjC,iCAAqC;AACrC,2CAA8C;AAC9C,+BAA+B;AAG/B,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,gBAAS;IAExB,GAAG;;YACP,IAAI,OAAO,GAAG,IAAI,kBAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACvF,aAAa;YACb,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC1C,IAAI;gBACF,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aACvC;oBAAS;gBACR,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;YACD,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;YAClD,OAAO,GAAG,IAAI,kBAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/G,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;YAC1E,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAC9D,CAAC;KAAA;CACF,CAAA;AAnBC;IADC,YAAI;mCAmBJ;AApBG,QAAQ;IADb,aAAK;GACA,QAAQ,CAqBb"}
1
+ {"version":3,"file":"echo.spec.js","sourceRoot":"","sources":["../../src/services/echo.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAA8C;AAC9C,iCAAiC;AACjC,+BAA+B;AAC/B,kCAAoC;AACpC,iCAAqC;AAGrC,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,gBAAS;IAExB,GAAG;;YACP,IAAI,OAAO,GAAG,IAAI,kBAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACvF,aAAa;YACb,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC1C,IAAI;gBACF,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aACvC;oBAAS;gBACR,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;YACD,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;YAClD,OAAO,GAAG,IAAI,kBAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/G,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;YAC1E,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAC9D,CAAC;KAAA;CACF,CAAA;AAnBC;IADC,YAAI;mCAmBJ;AApBG,QAAQ;IADb,aAAK;GACA,QAAQ,CAqBb"}
@@ -1,14 +1,20 @@
1
1
  /// <reference types="node" />
2
+ import { Readable } from "stream";
3
+ import { CloudBinary, CloudBinaryParameters, CoreModel } from "..";
2
4
  import { Context } from "../utils/context";
3
5
  import { Binary, BinaryFile, BinaryMap } from "./binary";
6
+ import CryptoService from "./cryptoservice";
4
7
  import { ServiceParameters } from "./service";
5
- import { CloudBinary, CloudBinaryParameters, CoreModel } from "..";
6
- import { Readable } from "stream";
7
8
  export declare class FileBinaryParameters extends CloudBinaryParameters {
8
9
  /**
9
10
  * Define the folder to store objects in
10
11
  */
11
12
  folder: string;
13
+ /**
14
+ * Maximum size to handle
15
+ * @default 10Mb
16
+ */
17
+ maxSize?: number;
12
18
  constructor(params: any, service: Binary);
13
19
  }
14
20
  /**
@@ -27,6 +33,10 @@ export declare class FileBinaryParameters extends CloudBinaryParameters {
27
33
  * @WebdaModda
28
34
  */
29
35
  export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParameters> extends CloudBinary<T> {
36
+ /**
37
+ * Used for hmac
38
+ */
39
+ cryptoService: CryptoService;
30
40
  /**
31
41
  * Load parameters
32
42
  *
@@ -57,26 +67,26 @@ export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParam
57
67
  * @returns
58
68
  */
59
69
  _getPath(hash: string, postfix?: string): string;
60
- _touch(path: any): void;
70
+ _touch(filePath: any, mode?: number): void;
61
71
  /**
62
72
  * Get token for action
63
73
  *
64
74
  * @param ctx
65
75
  * @param expiresIn
66
76
  */
67
- getToken(hash: string, method: "PUT" | "GET", expiresIn?: number): any;
77
+ getToken(hash: string, method: "PUT" | "GET", expiresIn?: number): Promise<string>;
68
78
  /**
69
79
  * Get put URL
70
80
  * @param ctx
71
81
  * @returns
72
82
  */
73
- getPutUrl(ctx: Context): string;
83
+ getPutUrl(ctx: Context<BinaryFile>): Promise<string>;
74
84
  /**
75
85
  * Will give you the redirect url
76
86
  *
77
87
  * @ignore
78
88
  */
79
- putRedirectUrl(ctx: Context): Promise<{
89
+ putRedirectUrl(ctx: Context<BinaryFile>): Promise<{
80
90
  url: string;
81
91
  method: string;
82
92
  }>;