@webda/core 1.2.1 → 1.6.0-beta.0

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 (199) hide show
  1. package/lib/application.d.ts +3 -0
  2. package/lib/application.js +26 -22
  3. package/lib/application.js.map +1 -1
  4. package/lib/application.spec.js +185 -2
  5. package/lib/application.spec.js.map +1 -1
  6. package/lib/core.d.ts +62 -6
  7. package/lib/core.js +127 -86
  8. package/lib/core.js.map +1 -1
  9. package/lib/core.spec.js +151 -6
  10. package/lib/core.spec.js.map +1 -1
  11. package/lib/index.d.ts +4 -0
  12. package/lib/index.js +4 -0
  13. package/lib/index.js.map +1 -1
  14. package/lib/models/aclmodel.d.ts +42 -3
  15. package/lib/models/aclmodel.js +58 -3
  16. package/lib/models/aclmodel.js.map +1 -1
  17. package/lib/models/aclmodel.spec.js +46 -0
  18. package/lib/models/aclmodel.spec.js.map +1 -1
  19. package/lib/models/coremodel.d.ts +58 -10
  20. package/lib/models/coremodel.js +39 -32
  21. package/lib/models/coremodel.js.map +1 -1
  22. package/lib/models/coremodel.spec.js +68 -6
  23. package/lib/models/coremodel.spec.js.map +1 -1
  24. package/lib/models/ident.d.ts +8 -2
  25. package/lib/models/ident.js.map +1 -1
  26. package/lib/models/ident.spec.js +16 -0
  27. package/lib/models/ident.spec.js.map +1 -1
  28. package/lib/models/ownermodel.d.ts +1 -1
  29. package/lib/models/ownermodel.js.map +1 -1
  30. package/lib/models/ownermodel.spec.js +22 -19
  31. package/lib/models/ownermodel.spec.js.map +1 -1
  32. package/lib/models/user.d.ts +2 -0
  33. package/lib/models/user.js +4 -2
  34. package/lib/models/user.js.map +1 -1
  35. package/lib/models/user.spec.js +9 -2
  36. package/lib/models/user.spec.js.map +1 -1
  37. package/lib/queues/filequeue.d.ts +63 -0
  38. package/lib/queues/filequeue.js +161 -0
  39. package/lib/queues/filequeue.js.map +1 -0
  40. package/lib/queues/filequeue.spec.d.ts +1 -0
  41. package/lib/queues/filequeue.spec.js +90 -0
  42. package/lib/queues/filequeue.spec.js.map +1 -0
  43. package/lib/queues/memoryqueue.d.ts +18 -4
  44. package/lib/queues/memoryqueue.js +20 -13
  45. package/lib/queues/memoryqueue.js.map +1 -1
  46. package/lib/queues/memoryqueue.spec.js +142 -39
  47. package/lib/queues/memoryqueue.spec.js.map +1 -1
  48. package/lib/queues/pubsubservice.d.ts +27 -0
  49. package/lib/queues/pubsubservice.js +21 -0
  50. package/lib/queues/pubsubservice.js.map +1 -0
  51. package/lib/queues/queue.spec.js +16 -7
  52. package/lib/queues/queue.spec.js.map +1 -1
  53. package/lib/queues/queueservice.d.ts +108 -13
  54. package/lib/queues/queueservice.js +100 -36
  55. package/lib/queues/queueservice.js.map +1 -1
  56. package/lib/router.js +4 -6
  57. package/lib/router.js.map +1 -1
  58. package/lib/router.spec.js +27 -2
  59. package/lib/router.spec.js.map +1 -1
  60. package/lib/services/asyncevents.d.ts +110 -5
  61. package/lib/services/asyncevents.js +134 -39
  62. package/lib/services/asyncevents.js.map +1 -1
  63. package/lib/services/asyncevents.spec.js +58 -4
  64. package/lib/services/asyncevents.spec.js.map +1 -1
  65. package/lib/services/authentication.d.ts +57 -5
  66. package/lib/services/authentication.js +93 -84
  67. package/lib/services/authentication.js.map +1 -1
  68. package/lib/services/authentication.spec.js +118 -82
  69. package/lib/services/authentication.spec.js.map +1 -1
  70. package/lib/services/binary.d.ts +175 -48
  71. package/lib/services/binary.js +205 -170
  72. package/lib/services/binary.js.map +1 -1
  73. package/lib/services/binary.spec.d.ts +22 -3
  74. package/lib/services/binary.spec.js +327 -22
  75. package/lib/services/binary.spec.js.map +1 -1
  76. package/lib/services/configuration.d.ts +94 -13
  77. package/lib/services/configuration.js +98 -28
  78. package/lib/services/configuration.js.map +1 -1
  79. package/lib/services/configuration.spec.js +40 -1
  80. package/lib/services/configuration.spec.js.map +1 -1
  81. package/lib/services/cron.d.ts +4 -4
  82. package/lib/services/cron.js +37 -53
  83. package/lib/services/cron.js.map +1 -1
  84. package/lib/services/cron.spec.d.ts +1 -0
  85. package/lib/services/cron.spec.js +76 -0
  86. package/lib/services/cron.spec.js.map +1 -0
  87. package/lib/services/debugmailer.spec.js +18 -4
  88. package/lib/services/debugmailer.spec.js.map +1 -1
  89. package/lib/services/echo.js +22 -13
  90. package/lib/services/echo.js.map +1 -1
  91. package/lib/services/echo.spec.d.ts +1 -0
  92. package/lib/services/echo.spec.js +52 -0
  93. package/lib/services/echo.spec.js.map +1 -0
  94. package/lib/services/filebinary.d.ts +16 -9
  95. package/lib/services/filebinary.js +58 -73
  96. package/lib/services/filebinary.js.map +1 -1
  97. package/lib/services/filebinary.spec.d.ts +8 -1
  98. package/lib/services/filebinary.spec.js +133 -7
  99. package/lib/services/filebinary.spec.js.map +1 -1
  100. package/lib/services/fileconfiguration.d.ts +9 -3
  101. package/lib/services/fileconfiguration.js +13 -6
  102. package/lib/services/fileconfiguration.js.map +1 -1
  103. package/lib/services/fileconfiguration.spec.js +100 -5
  104. package/lib/services/fileconfiguration.spec.js.map +1 -1
  105. package/lib/services/kubernetesconfiguration.d.ts +8 -2
  106. package/lib/services/kubernetesconfiguration.js +16 -5
  107. package/lib/services/kubernetesconfiguration.js.map +1 -1
  108. package/lib/services/kubernetesconfiguration.spec.js +53 -16
  109. package/lib/services/kubernetesconfiguration.spec.js.map +1 -1
  110. package/lib/services/mailer.d.ts +11 -2
  111. package/lib/services/mailer.js +28 -34
  112. package/lib/services/mailer.js.map +1 -1
  113. package/lib/services/mailer.spec.js +69 -23
  114. package/lib/services/mailer.spec.js.map +1 -1
  115. package/lib/services/oauth.d.ts +5 -2
  116. package/lib/services/oauth.js +22 -8
  117. package/lib/services/oauth.js.map +1 -1
  118. package/lib/services/oauth.spec.js +33 -3
  119. package/lib/services/oauth.spec.js.map +1 -1
  120. package/lib/services/resource.spec.js +39 -2
  121. package/lib/services/resource.spec.js.map +1 -1
  122. package/lib/services/service.d.ts +16 -0
  123. package/lib/services/service.js +47 -6
  124. package/lib/services/service.js.map +1 -1
  125. package/lib/services/service.spec.d.ts +1 -0
  126. package/lib/services/service.spec.js +119 -0
  127. package/lib/services/service.spec.js.map +1 -0
  128. package/lib/stores/aggregator.d.ts +43 -0
  129. package/lib/stores/aggregator.js +106 -0
  130. package/lib/stores/aggregator.js.map +1 -0
  131. package/lib/stores/file.d.ts +49 -11
  132. package/lib/stores/file.js +84 -81
  133. package/lib/stores/file.js.map +1 -1
  134. package/lib/stores/file.spec.d.ts +6 -1
  135. package/lib/stores/file.spec.js +134 -9
  136. package/lib/stores/file.spec.js.map +1 -1
  137. package/lib/stores/mapper.d.ts +151 -0
  138. package/lib/stores/mapper.js +294 -0
  139. package/lib/stores/mapper.js.map +1 -0
  140. package/lib/stores/mapper.spec.d.ts +1 -0
  141. package/lib/stores/mapper.spec.js +55 -0
  142. package/lib/stores/mapper.spec.js.map +1 -0
  143. package/lib/stores/memory.d.ts +52 -7
  144. package/lib/stores/memory.js +71 -33
  145. package/lib/stores/memory.js.map +1 -1
  146. package/lib/stores/memory.spec.d.ts +6 -1
  147. package/lib/stores/memory.spec.js +65 -4
  148. package/lib/stores/memory.spec.js.map +1 -1
  149. package/lib/stores/store.d.ts +263 -126
  150. package/lib/stores/store.js +285 -493
  151. package/lib/stores/store.js.map +1 -1
  152. package/lib/stores/store.spec.d.ts +20 -0
  153. package/lib/stores/store.spec.js +242 -18
  154. package/lib/stores/store.spec.js.map +1 -1
  155. package/lib/test.d.ts +1 -7
  156. package/lib/test.js +3 -12
  157. package/lib/test.js.map +1 -1
  158. package/lib/utils/abstractdeployer.spec.d.ts +1 -0
  159. package/lib/utils/abstractdeployer.spec.js +23 -0
  160. package/lib/utils/abstractdeployer.spec.js.map +1 -0
  161. package/lib/utils/context.d.ts +25 -2
  162. package/lib/utils/context.js +33 -12
  163. package/lib/utils/context.js.map +1 -1
  164. package/lib/utils/context.spec.js +81 -11
  165. package/lib/utils/context.spec.js.map +1 -1
  166. package/lib/utils/cookie.d.ts +12 -0
  167. package/lib/utils/cookie.js +13 -1
  168. package/lib/utils/cookie.js.map +1 -1
  169. package/lib/utils/cookie.spec.js +42 -11
  170. package/lib/utils/cookie.spec.js.map +1 -1
  171. package/lib/utils/logger.d.ts +23 -4
  172. package/lib/utils/logger.js +29 -6
  173. package/lib/utils/logger.js.map +1 -1
  174. package/lib/utils/logger.spec.js +8 -0
  175. package/lib/utils/logger.spec.js.map +1 -1
  176. package/lib/utils/serializers.d.ts +5 -5
  177. package/lib/utils/serializers.js +10 -10
  178. package/lib/utils/serializers.js.map +1 -1
  179. package/lib/utils/serializers.spec.js +41 -16
  180. package/lib/utils/serializers.spec.js.map +1 -1
  181. package/lib/utils/waiter.d.ts +59 -1
  182. package/lib/utils/waiter.js +86 -3
  183. package/lib/utils/waiter.js.map +1 -1
  184. package/lib/utils/waiter.spec.js +48 -4
  185. package/lib/utils/waiter.spec.js.map +1 -1
  186. package/package.json +16 -11
  187. package/test/badapp/package.json +4 -0
  188. package/test/badapp/webda.config.json +1 -0
  189. package/test/cachedapp/webda.config.json +7 -0
  190. package/test/config-file-no-reload.json +70 -0
  191. package/test/config-file-reload.json +7 -1
  192. package/test/config-kube-reload.json +7 -1
  193. package/test/config.json +45 -21
  194. package/test/config.old-default.json +0 -16
  195. package/test/config.old.json +0 -16
  196. package/test/deployments/invalid.json +1 -0
  197. package/test/moddas/fakeservice.js +5 -0
  198. package/test/models/ident.js +10 -14
  199. package/test/models/task.js +2 -4
@@ -1,8 +1,12 @@
1
1
  import { WebdaTest } from "../test";
2
- import { Binary, Store } from "..";
3
- declare class BinaryTest extends WebdaTest {
2
+ import { Binary, Context, Store, User } from "..";
3
+ import { BinaryMap } from "./binary";
4
+ export declare class ImageUser extends User {
5
+ images: BinaryMap[];
6
+ }
7
+ declare class BinaryTest<T extends Binary = Binary> extends WebdaTest {
4
8
  getUserStore(): Store<any>;
5
- getBinary(): Binary;
9
+ getBinary(): T;
6
10
  getMap(): string;
7
11
  getExposePath(): string;
8
12
  getTestFile(): string;
@@ -10,5 +14,20 @@ declare class BinaryTest extends WebdaTest {
10
14
  normal(): Promise<void>;
11
15
  notMapped(): Promise<void>;
12
16
  update(): Promise<void>;
17
+ checkMap(): void;
18
+ httpCreate(): Promise<void>;
19
+ httpDelete(): Promise<void>;
20
+ getOperationName(): void;
21
+ httpGetError(): Promise<void>;
22
+ httpGet(): Promise<void>;
23
+ getNotFound(): Promise<void>;
24
+ setupDefault(withLogin?: boolean): Promise<{
25
+ userStore: Store;
26
+ binary: Binary;
27
+ user1: ImageUser;
28
+ ctx: Context;
29
+ }>;
30
+ testChallenge(remoteCheckHash?: boolean): Promise<void>;
31
+ sendChallengeData(info: any, data: string): Promise<import("axios").AxiosResponse<any, any>>;
13
32
  }
14
33
  export { BinaryTest };
@@ -15,11 +15,42 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
15
15
  });
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.BinaryTest = void 0;
18
+ exports.BinaryTest = exports.ImageUser = void 0;
19
19
  const test_1 = require("../test");
20
20
  const assert = require("assert");
21
21
  const fs = require("fs");
22
+ const __1 = require("..");
22
23
  const mocha_1 = require("@testdeck/mocha");
24
+ const sinon = require("sinon");
25
+ const binary_1 = require("./binary");
26
+ const axios_1 = require("axios");
27
+ const events_1 = require("events");
28
+ class ImageUser extends __1.User {
29
+ }
30
+ exports.ImageUser = ImageUser;
31
+ class TestBinaryService extends __1.Binary {
32
+ store(object, property, file, metadatas, index) {
33
+ throw new Error("Method not implemented.");
34
+ }
35
+ getUsageCount(hash) {
36
+ throw new Error("Method not implemented.");
37
+ }
38
+ update(object, property, index, file, metadatas) {
39
+ throw new Error("Method not implemented.");
40
+ }
41
+ delete(object, property, index) {
42
+ throw new Error("Method not implemented.");
43
+ }
44
+ challenge(hash, challenge) {
45
+ throw new Error("Method not implemented.");
46
+ }
47
+ _get() {
48
+ return null;
49
+ }
50
+ cascadeDelete() {
51
+ return __awaiter(this, void 0, void 0, function* () { });
52
+ }
53
+ }
23
54
  class BinaryTest extends test_1.WebdaTest {
24
55
  getUserStore() {
25
56
  return this.getService("Users");
@@ -75,7 +106,7 @@ class BinaryTest extends test_1.WebdaTest {
75
106
  user2 = yield userStore.save({
76
107
  test: "plop"
77
108
  });
78
- yield binary.store(userStore, user1, map, {
109
+ yield binary.store(user1, map, {
79
110
  path: this.getTestFile()
80
111
  }, {});
81
112
  user1 = yield userStore.get(user1.uuid);
@@ -84,7 +115,7 @@ class BinaryTest extends test_1.WebdaTest {
84
115
  hash = user1[map][0].hash;
85
116
  let value = yield binary.getUsageCount(hash);
86
117
  assert.strictEqual(value, 1);
87
- yield binary.store(userStore, user2, map, {
118
+ yield binary.store(user2, map, {
88
119
  path: this.getTestFile()
89
120
  }, {});
90
121
  user = yield userStore.get(user2.uuid);
@@ -94,7 +125,7 @@ class BinaryTest extends test_1.WebdaTest {
94
125
  hash = user[map][0].hash;
95
126
  value = yield binary.getUsageCount(hash);
96
127
  assert.strictEqual(value, 2);
97
- yield binary.delete(userStore, user, map, 0);
128
+ yield binary.delete(user, map, 0);
98
129
  user = yield userStore.get(user2.uuid);
99
130
  assert.strictEqual(user[map].length, 0);
100
131
  value = yield binary.getUsageCount(hash);
@@ -106,7 +137,7 @@ class BinaryTest extends test_1.WebdaTest {
106
137
  });
107
138
  ctx.session.userId = user2.uuid;
108
139
  let executor = this.getExecutor(ctx, "test.webda.io", "GET", exposePath + "/users/" + user1.uuid + "/" + map + "/0");
109
- yield this.assertThrowsAsync(executor.execute.bind(executor, ctx), res => res == 403);
140
+ yield assert.rejects(executor.execute(ctx), res => res == 403);
110
141
  ctx.session.userId = user1.uuid;
111
142
  executor = this.getExecutor(ctx, "test.webda.io", "GET", exposePath + "/users/" + user1.uuid + "/" + map + "/0");
112
143
  yield executor.execute(ctx);
@@ -117,6 +148,37 @@ class BinaryTest extends test_1.WebdaTest {
117
148
  yield binary.downloadTo(user1[map][0], "./downloadTo.tmp");
118
149
  // Check the result is the same
119
150
  assert.strictEqual(fs.readFileSync("./downloadTo.tmp").toString(), fs.readFileSync(this.getTestFile()).toString());
151
+ fs.unlinkSync("./downloadTo.tmp");
152
+ yield user1[map][0].downloadTo("./downloadTo.tmp");
153
+ assert.strictEqual(fs.readFileSync("./downloadTo.tmp").toString(), fs.readFileSync(this.getTestFile()).toString());
154
+ fs.unlinkSync("./downloadTo.tmp");
155
+ // Fake IO issue
156
+ let stub = sinon.stub(binary, "_get").callsFake(() => {
157
+ return {
158
+ pipe: stream => {
159
+ stream.emit("error", "bad read");
160
+ }
161
+ };
162
+ });
163
+ let stub2;
164
+ try {
165
+ yield assert.rejects(() => binary.downloadTo(user1[map][0], "./downloadTo.tmp"));
166
+ assert.ok(!fs.existsSync("./downloadTo.tmp"));
167
+ stub2 = sinon.stub(fs, "unlinkSync").callsFake(() => {
168
+ throw new Error();
169
+ });
170
+ yield assert.rejects(() => binary.downloadTo(user1[map][0], "./downloadTo.tmp"));
171
+ }
172
+ finally {
173
+ stub.restore();
174
+ if (stub2) {
175
+ stub2.restore();
176
+ }
177
+ }
178
+ let buf1 = yield __1.Binary.streamToBuffer(yield user1[map][0].get());
179
+ // cov
180
+ let buf2 = yield __1.Binary.streamToBuffer(yield binary._get(user1[map][0]));
181
+ assert.strictEqual(buf1.toString(), buf2.toString());
120
182
  yield userStore.delete(user1.uuid);
121
183
  value = yield binary.getUsageCount(hash);
122
184
  assert.strictEqual(value, 0);
@@ -129,7 +191,7 @@ class BinaryTest extends test_1.WebdaTest {
129
191
  let user1 = yield userStore.save({
130
192
  test: "plop"
131
193
  });
132
- yield this.assertThrowsAsync(binary.store.bind(binary, userStore, user1, "images2", {
194
+ yield assert.rejects(() => binary.store(user1, "images2", {
133
195
  path: this.getTestFile()
134
196
  }, {}), err => true);
135
197
  });
@@ -145,7 +207,7 @@ class BinaryTest extends test_1.WebdaTest {
145
207
  user1 = yield userStore.save({
146
208
  test: "plop"
147
209
  });
148
- yield binary.store(userStore, user1, map, {
210
+ yield binary.store(user1, map, {
149
211
  path: this.getTestFile()
150
212
  }, {});
151
213
  user = yield userStore.get(user1.uuid);
@@ -153,21 +215,195 @@ class BinaryTest extends test_1.WebdaTest {
153
215
  assert.strictEqual(user[map].length, 1);
154
216
  let value = yield binary.getUsageCount(user[map][0].hash);
155
217
  assert.strictEqual(value, 1);
156
- yield binary.update(userStore, user, map, 0, {
157
- path: this.getTestFile()
158
- }, {});
159
- value = yield binary.getUsageCount(user[map][0].hash);
160
- assert.strictEqual(value, 1);
161
- user = yield userStore.get(user1.uuid);
162
- assert.notStrictEqual(user[map], undefined);
163
- assert.strictEqual(user[map].length, 1);
164
- assert.notStrictEqual(hash, user[map][0].hash);
165
- assert.strictEqual(user[map][0].mimetype, "text/plain");
166
- assert.strictEqual(user[map][0].name, "Dockerfile.txt");
167
- value = yield binary.getUsageCount(hash);
168
- assert.strictEqual(value, 0);
169
- value = yield binary.getUsageCount(user[map][0].hash);
170
- assert.strictEqual(value, 1);
218
+ });
219
+ }
220
+ checkMap() {
221
+ let binary = this.getBinary();
222
+ assert.throws(() => binary._checkMap("plop", "pouf"), /Unknown mapping/);
223
+ }
224
+ httpCreate() {
225
+ return __awaiter(this, void 0, void 0, function* () {
226
+ let userStore = this.getUserStore();
227
+ let user1 = yield userStore.save({
228
+ test: "plop"
229
+ });
230
+ let ctx = yield this.newContext();
231
+ let executor = this.getExecutor(ctx, "test.webda.io", "POST", `/binary/users/${user1.getUuid()}/images`, {});
232
+ yield assert.rejects(() => executor.execute(ctx), /403/);
233
+ /**
234
+ * Two modes should be handled
235
+ *
236
+ * POST body + X-Webda-Metadatas header
237
+ * POST multipart
238
+ */
239
+ ctx.getHttpContext().setBody("MY_IMAGE");
240
+ ctx.getSession().login(user1.getUuid(), "fake");
241
+ // Need to verify
242
+ yield executor.execute(ctx);
243
+ });
244
+ }
245
+ httpDelete() {
246
+ return __awaiter(this, void 0, void 0, function* () {
247
+ let { binary, user1, ctx } = yield this.setupDefault(false);
248
+ let executor = this.getExecutor(ctx, "test.webda.io", "DELETE", `/binary/users/${user1.getUuid()}/images/0/myhash`, {});
249
+ yield assert.rejects(() => executor.execute(ctx), /403/, "DELETE binary w/o permission");
250
+ // Now login
251
+ ctx.getSession().login(user1.getUuid(), "fake");
252
+ executor = this.getExecutor(ctx, "test.webda.io", "DELETE", `/binary/users/${user1.getUuid()}/images/0/myhash`, {});
253
+ yield assert.rejects(() => executor.execute(ctx), /412/);
254
+ executor = this.getExecutor(ctx, "test.webda.io", "DELETE", `/binary/users/${user1.getUuid()}/images/0/${user1.images[0].hash}`, {});
255
+ yield executor.execute(ctx);
256
+ yield user1.refresh();
257
+ assert.ok(user1.images.length === 0);
258
+ });
259
+ }
260
+ getOperationName() {
261
+ let binary = this.getBinary();
262
+ // @ts-ignore
263
+ assert.strictEqual(binary.getOperationName(), "");
264
+ // @ts-ignore
265
+ binary._name = "Other";
266
+ // @ts-ignore
267
+ assert.strictEqual(binary.getOperationName(), binary.getName());
268
+ }
269
+ httpGetError() {
270
+ return __awaiter(this, void 0, void 0, function* () {
271
+ let { binary, user1, ctx } = yield this.setupDefault();
272
+ // @ts-ignore
273
+ let stub = sinon.stub(binary, "get").callsFake(() => {
274
+ return {
275
+ pipe: stream => {
276
+ stream.emit("error", new Error("I/O"));
277
+ }
278
+ };
279
+ });
280
+ let executor = this.getExecutor(ctx, "test.webda.io", "GET", `/binary/users/${user1.getUuid()}/images/0`, {});
281
+ yield assert.rejects(() => executor.execute(ctx), /500/, "GET binary with I/O");
282
+ stub.restore();
283
+ });
284
+ }
285
+ httpGet() {
286
+ return __awaiter(this, void 0, void 0, function* () {
287
+ let { binary, user1, ctx } = yield this.setupDefault(false);
288
+ let executor = this.getExecutor(ctx, "test.webda.io", "GET", `/binary/users/${user1.getUuid()}/images/0`, {});
289
+ // If not logged in
290
+ yield assert.rejects(() => executor.execute(ctx), /403/, "GET binary w/o permission");
291
+ executor = this.getExecutor(ctx, "test.webda.io", "GET", `/binary/users/unknown/images/0`, {});
292
+ yield assert.rejects(() => executor.execute(ctx), /404/, "GET binary on unknown object");
293
+ // Login
294
+ ctx.getSession().login(user1.getUuid(), "fake");
295
+ executor = this.getExecutor(ctx, "test.webda.io", "GET", `/binary/users/${user1.getUuid()}/images/0`, {});
296
+ yield executor.execute(ctx);
297
+ yield binary.delete(user1, "images", 0);
298
+ // Check 404 now it is gone
299
+ executor = this.getExecutor(ctx, "test.webda.io", "GET", `/binary/users/${user1.getUuid()}/images/0`, {});
300
+ yield assert.rejects(() => executor.execute(ctx), /404/);
301
+ });
302
+ }
303
+ getNotFound() {
304
+ return __awaiter(this, void 0, void 0, function* () {
305
+ yield assert.rejects(() =>
306
+ // @ts-ignore
307
+ this.getBinary().get({
308
+ hash: "none",
309
+ mime: "",
310
+ size: 10
311
+ }), binary_1.BinaryNotFoundError);
312
+ });
313
+ }
314
+ setupDefault(withLogin = true) {
315
+ return __awaiter(this, void 0, void 0, function* () {
316
+ let userStore = this.getUserStore();
317
+ let binary = this.getBinary();
318
+ let user1 = yield userStore.save({
319
+ test: "plop"
320
+ });
321
+ yield binary.store(user1, "images", { path: this.getTestFile() });
322
+ yield user1.refresh();
323
+ let ctx = yield this.newContext();
324
+ if (withLogin) {
325
+ ctx.getSession().login(user1.getUuid(), "fake");
326
+ }
327
+ user1.setContext(ctx);
328
+ return { userStore, binary, user1, ctx };
329
+ });
330
+ }
331
+ testChallenge(remoteCheckHash = true) {
332
+ return __awaiter(this, void 0, void 0, function* () {
333
+ let { userStore, binary, user1, ctx } = yield this.setupDefault(false);
334
+ let { hash, challenge } = binary._getHashes(Buffer.from("PLOP"));
335
+ let metadatas = {
336
+ plop: "test"
337
+ };
338
+ let executor = this.getExecutor(ctx, "test.webda.io", "PUT", `/binary/upload/users/${user1.getUuid()}/images`, {
339
+ hash,
340
+ challenge,
341
+ metadatas
342
+ });
343
+ yield assert.rejects(() => executor.execute(ctx), /403/);
344
+ ctx.getSession().login(user1.getUuid(), "fake");
345
+ yield executor.execute(ctx);
346
+ let info = JSON.parse(ctx.getResponseBody());
347
+ assert.ok(!info.done, "should not be done yet");
348
+ // Execute twice as we should still get an upload
349
+ yield executor.execute(ctx);
350
+ let url = new URL(info.url);
351
+ if (url.host === "test.webda.io") {
352
+ executor = this.getExecutor(ctx, "test.webda.io", info.method || "PUT", url.pathname + url.search, "PLOP2", {
353
+ "Content-MD5": info.md5,
354
+ "Content-Type": "application/octet-stream"
355
+ });
356
+ yield assert.rejects(() => executor.execute(ctx));
357
+ executor = this.getExecutor(ctx, "test.webda.io", info.method || "PUT", url.pathname + url.search, "PLOP", {
358
+ "Content-MD5": info.md5,
359
+ "Content-Type": "application/octet-stream"
360
+ });
361
+ yield executor.execute(ctx);
362
+ }
363
+ else {
364
+ if (remoteCheckHash) {
365
+ yield assert.rejects(() => this.sendChallengeData(info, "PLOP2"), "Should check content");
366
+ }
367
+ yield this.sendChallengeData(info, "PLOP");
368
+ }
369
+ yield user1.refresh();
370
+ assert.strictEqual(user1.images.length, 2);
371
+ assert.strictEqual((yield __1.Binary.streamToBuffer(yield binary.get(user1.images[1]))).toString(), "PLOP");
372
+ // If we try to re upload it should be already up
373
+ executor = this.getExecutor(ctx, "test.webda.io", "PUT", `/binary/upload/users/${user1.getUuid()}/images`, {
374
+ hash,
375
+ challenge,
376
+ metadatas
377
+ });
378
+ yield executor.execute(ctx);
379
+ info = JSON.parse(ctx.getResponseBody());
380
+ assert.ok(info.done, "should be done");
381
+ assert.ok(info.url === undefined);
382
+ // Use another user to try adding same binary
383
+ let user2 = yield userStore.save({});
384
+ ctx.getSession().login(user2.getUuid(), "fake");
385
+ executor = this.getExecutor(ctx, "test.webda.io", "PUT", `/binary/upload/users/${user2.getUuid()}/images`, {
386
+ hash,
387
+ challenge,
388
+ metadatas
389
+ });
390
+ yield executor.execute(ctx);
391
+ info = JSON.parse(ctx.getResponseBody());
392
+ assert.ok(info.done, "should be done");
393
+ assert.ok(info.url === undefined);
394
+ });
395
+ }
396
+ sendChallengeData(info, data) {
397
+ return __awaiter(this, void 0, void 0, function* () {
398
+ return axios_1.default.request({
399
+ method: info.method,
400
+ url: info.url,
401
+ data,
402
+ headers: {
403
+ "Content-MD5": info.md5,
404
+ "Content-Type": "application/octet-stream"
405
+ }
406
+ });
171
407
  });
172
408
  }
173
409
  }
@@ -180,5 +416,74 @@ __decorate([
180
416
  __decorate([
181
417
  mocha_1.test
182
418
  ], BinaryTest.prototype, "update", null);
419
+ __decorate([
420
+ mocha_1.test
421
+ ], BinaryTest.prototype, "checkMap", null);
422
+ __decorate([
423
+ mocha_1.test
424
+ ], BinaryTest.prototype, "httpCreate", null);
425
+ __decorate([
426
+ mocha_1.test
427
+ ], BinaryTest.prototype, "httpDelete", null);
428
+ __decorate([
429
+ mocha_1.test
430
+ ], BinaryTest.prototype, "getOperationName", null);
431
+ __decorate([
432
+ mocha_1.test
433
+ ], BinaryTest.prototype, "httpGetError", null);
434
+ __decorate([
435
+ mocha_1.test
436
+ ], BinaryTest.prototype, "httpGet", null);
437
+ __decorate([
438
+ mocha_1.test
439
+ ], BinaryTest.prototype, "getNotFound", null);
183
440
  exports.BinaryTest = BinaryTest;
441
+ let BinaryAbstractTest = class BinaryAbstractTest extends test_1.WebdaTest {
442
+ cov() {
443
+ return __awaiter(this, void 0, void 0, function* () {
444
+ let service = new TestBinaryService(undefined, "plop", {});
445
+ let ctx = yield this.newContext();
446
+ yield assert.rejects(() => service.putRedirectUrl(undefined), /404/);
447
+ ctx.getHttpContext().setBody({
448
+ hash: "plop"
449
+ });
450
+ yield assert.rejects(() => service.httpChallenge(ctx), /400/);
451
+ ctx = yield this.newContext();
452
+ ctx.getHttpContext().setBody({
453
+ challenge: "plop"
454
+ });
455
+ yield assert.rejects(() => service.httpChallenge(ctx), /400/);
456
+ ctx = yield this.newContext();
457
+ let binary = this.getService("binary");
458
+ ctx.setPathParameters({
459
+ property: "images",
460
+ store: "users",
461
+ uid: "notfound"
462
+ });
463
+ ctx.getHttpContext().setBody({
464
+ hash: "p",
465
+ challenge: "z"
466
+ });
467
+ yield assert.rejects(() => binary.httpChallenge(ctx), /404/);
468
+ });
469
+ }
470
+ streamToBufferError() {
471
+ return __awaiter(this, void 0, void 0, function* () {
472
+ let stream = new events_1.EventEmitter();
473
+ // @ts-ignore
474
+ let p = assert.rejects(() => __1.Binary.streamToBuffer(stream), /Bad I\/O/);
475
+ stream.emit("error", new Error("Bad I/O"));
476
+ yield p;
477
+ });
478
+ }
479
+ };
480
+ __decorate([
481
+ mocha_1.test
482
+ ], BinaryAbstractTest.prototype, "cov", null);
483
+ __decorate([
484
+ mocha_1.test
485
+ ], BinaryAbstractTest.prototype, "streamToBufferError", null);
486
+ BinaryAbstractTest = __decorate([
487
+ mocha_1.suite
488
+ ], BinaryAbstractTest);
184
489
  //# sourceMappingURL=binary.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binary.spec.js","sourceRoot":"","sources":["../../src/services/binary.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binary.spec.js","sourceRoot":"","sources":["../../src/services/binary.spec.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,33 @@
1
1
  import { Service, ServiceParameters } from "./service";
2
+ /**
3
+ * Service that can store configuration
4
+ */
2
5
  interface ConfigurationProvider {
3
- getConfiguration(id: string): Promise<Map<string, any>>;
6
+ /**
7
+ *
8
+ * @param id of the configuration to retrieve
9
+ */
10
+ getConfiguration(id: string): Promise<{
11
+ [key: string]: any;
12
+ }>;
13
+ /**
14
+ * Return true if the service can detect modification
15
+ *
16
+ * If false, then ConfigurationService will set an interval
17
+ * and check every checkInterval @{ConfigurationServiceParameters.checkInterval}
18
+ *
19
+ * @param id of the source to check
20
+ * @param callback to call if source has changed
21
+ */
4
22
  canTriggerConfiguration(id: string, callback: () => void): boolean;
5
23
  }
6
24
  export declare class ConfigurationServiceParameters extends ServiceParameters {
7
25
  /**
8
26
  * Check configuration every {checkInterval} seconds
9
27
  */
10
- checkInterval: number;
28
+ checkInterval?: number;
11
29
  /**
12
- * Format beanName:method
30
+ * Format sourceServiceName:sourceId
13
31
  */
14
32
  source: string;
15
33
  /**
@@ -24,15 +42,33 @@ export declare class ConfigurationServiceParameters extends ServiceParameters {
24
42
  *
25
43
  * Load configuration from another service
26
44
  *
45
+ * If the result contains `webda.services` in his object then webda configuration will
46
+ * be dynamically reloaded
47
+ *
27
48
  * @category CoreServices
28
49
  */
29
50
  export default class ConfigurationService<T extends ConfigurationServiceParameters = ConfigurationServiceParameters> extends Service<T> {
30
- protected _configuration: any;
31
- protected _nextCheck: number;
32
- protected _sourceService: any;
33
- protected _sourceId: string;
34
- private _interval;
35
- protected watches: any[];
51
+ protected serializedConfiguration: any;
52
+ /**
53
+ *
54
+ */
55
+ protected nextCheck: number;
56
+ /**
57
+ * Service that will provide the information
58
+ */
59
+ protected sourceService: ConfigurationProvider;
60
+ /**
61
+ * Source id to retrieve
62
+ */
63
+ protected sourceId: string;
64
+ /**
65
+ * Interval between two checks
66
+ */
67
+ private interval;
68
+ /**
69
+ * Watchs for configuration update
70
+ */
71
+ protected watchs: any[];
36
72
  protected configuration: any;
37
73
  /**
38
74
  * Load parameters
@@ -41,15 +77,60 @@ export default class ConfigurationService<T extends ConfigurationServiceParamete
41
77
  * @ignore
42
78
  */
43
79
  loadParameters(params: any): ServiceParameters;
80
+ /**
81
+ * @inheritdoc
82
+ */
44
83
  init(): Promise<void>;
45
- watch(path: string, callback: (update: any) => void | Promise<void>, defaultValue?: any): void;
84
+ /**
85
+ * Watch a specific configuration modification
86
+ *
87
+ * @param jsonPath JSON Path to the object to watch
88
+ * @param callback Method to call with the updated version
89
+ * @param defaultValue Default value of the jsonPath if it does not exist
90
+ */
91
+ watch(jsonPath: string, callback: (update: any) => void | Promise<void>, defaultValue?: any): void;
92
+ /**
93
+ * Clear the check interval if exist
94
+ */
46
95
  stop(): void;
96
+ /**
97
+ *
98
+ * @returns current configuration
99
+ */
47
100
  getConfiguration(): any;
101
+ /**
102
+ * We cannot reinit the configurationService by itself
103
+ *
104
+ * @inheritdoc
105
+ */
48
106
  reinit(config: any): Promise<void>;
49
- _loadConfiguration(): Promise<{
107
+ /**
108
+ * Load the configuration by calling the source service with the source id
109
+ * @returns
110
+ */
111
+ protected loadConfiguration(): Promise<{
112
+ [key: string]: any;
113
+ }>;
114
+ initConfiguration(): Promise<{
115
+ [key: string]: any;
116
+ }>;
117
+ /**
118
+ * Checking for configuration updates
119
+ *
120
+ * If configuration is updated, it will trigger all the watchs accordingly
121
+ *
122
+ * @returns
123
+ */
124
+ protected checkUpdate(dynamic?: boolean): Promise<void>;
125
+ /**
126
+ * Update the next check time
127
+ */
128
+ protected updateNextCheck(): void;
129
+ /**
130
+ * Read the file and store it
131
+ */
132
+ loadAndStoreConfiguration(): Promise<{
50
133
  [key: string]: any;
51
134
  }>;
52
- _checkUpdate(): Promise<void>;
53
- _updateNextCheck(): void;
54
135
  }
55
136
  export { ConfigurationProvider, ConfigurationService };