@webda/core 2.4.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/lib/application.d.ts +171 -34
  2. package/lib/application.js +243 -47
  3. package/lib/application.js.map +1 -1
  4. package/lib/application.spec.js +44 -8
  5. package/lib/application.spec.js.map +1 -1
  6. package/lib/core.d.ts +113 -54
  7. package/lib/core.js +222 -135
  8. package/lib/core.js.map +1 -1
  9. package/lib/core.spec.js +87 -43
  10. package/lib/core.spec.js.map +1 -1
  11. package/lib/errors.d.ts +65 -0
  12. package/lib/errors.js +113 -0
  13. package/lib/errors.js.map +1 -0
  14. package/lib/errors.spec.d.ts +1 -0
  15. package/lib/errors.spec.js +33 -0
  16. package/lib/errors.spec.js.map +1 -0
  17. package/lib/index.d.ts +3 -0
  18. package/lib/index.js +3 -0
  19. package/lib/index.js.map +1 -1
  20. package/lib/models/aclmodel.d.ts +4 -4
  21. package/lib/models/aclmodel.js +10 -6
  22. package/lib/models/aclmodel.js.map +1 -1
  23. package/lib/models/aclmodel.spec.js +33 -24
  24. package/lib/models/aclmodel.spec.js.map +1 -1
  25. package/lib/models/coremodel.d.ts +284 -92
  26. package/lib/models/coremodel.js +403 -103
  27. package/lib/models/coremodel.js.map +1 -1
  28. package/lib/models/coremodel.spec.js +162 -24
  29. package/lib/models/coremodel.spec.js.map +1 -1
  30. package/lib/models/ident.d.ts +20 -6
  31. package/lib/models/ident.js.map +1 -1
  32. package/lib/models/ownermodel.d.ts +13 -23
  33. package/lib/models/ownermodel.js +24 -51
  34. package/lib/models/ownermodel.js.map +1 -1
  35. package/lib/models/ownermodel.spec.js +23 -11
  36. package/lib/models/ownermodel.spec.js.map +1 -1
  37. package/lib/models/relations.d.ts +167 -0
  38. package/lib/models/relations.js +113 -0
  39. package/lib/models/relations.js.map +1 -0
  40. package/lib/models/rolemodel.d.ts +3 -3
  41. package/lib/models/rolemodel.js +6 -6
  42. package/lib/models/rolemodel.js.map +1 -1
  43. package/lib/models/rolemodel.spec.js +12 -12
  44. package/lib/models/rolemodel.spec.js.map +1 -1
  45. package/lib/models/user.d.ts +40 -24
  46. package/lib/models/user.js +74 -48
  47. package/lib/models/user.js.map +1 -1
  48. package/lib/models/user.spec.js +24 -4
  49. package/lib/models/user.spec.js.map +1 -1
  50. package/lib/queues/memoryqueue.spec.js +9 -5
  51. package/lib/queues/memoryqueue.spec.js.map +1 -1
  52. package/lib/queues/queueservice.js.map +1 -1
  53. package/lib/router.d.ts +17 -8
  54. package/lib/router.js +81 -9
  55. package/lib/router.js.map +1 -1
  56. package/lib/router.spec.js +89 -5
  57. package/lib/router.spec.js.map +1 -1
  58. package/lib/services/asyncevents.spec.js +4 -4
  59. package/lib/services/authentication.d.ts +21 -22
  60. package/lib/services/authentication.js +90 -109
  61. package/lib/services/authentication.js.map +1 -1
  62. package/lib/services/authentication.spec.js +51 -65
  63. package/lib/services/authentication.spec.js.map +1 -1
  64. package/lib/services/binary.d.ts +132 -31
  65. package/lib/services/binary.js +257 -72
  66. package/lib/services/binary.js.map +1 -1
  67. package/lib/services/binary.spec.d.ts +16 -6
  68. package/lib/services/binary.spec.js +44 -117
  69. package/lib/services/binary.spec.js.map +1 -1
  70. package/lib/services/cloudbinary.d.ts +9 -10
  71. package/lib/services/cloudbinary.js +14 -15
  72. package/lib/services/cloudbinary.js.map +1 -1
  73. package/lib/services/cloudbinary.spec.d.ts +2 -2
  74. package/lib/services/cloudbinary.spec.js +13 -12
  75. package/lib/services/cloudbinary.spec.js.map +1 -1
  76. package/lib/services/configuration.js +9 -9
  77. package/lib/services/configuration.js.map +1 -1
  78. package/lib/services/configuration.spec.js +5 -7
  79. package/lib/services/configuration.spec.js.map +1 -1
  80. package/lib/services/cron.spec.js +3 -4
  81. package/lib/services/cron.spec.js.map +1 -1
  82. package/lib/services/cryptoservice.d.ts +2 -2
  83. package/lib/services/cryptoservice.js +5 -2
  84. package/lib/services/cryptoservice.js.map +1 -1
  85. package/lib/services/domainservice.d.ts +113 -0
  86. package/lib/services/domainservice.js +357 -0
  87. package/lib/services/domainservice.js.map +1 -0
  88. package/lib/services/domainservice.spec.d.ts +1 -0
  89. package/lib/services/domainservice.spec.js +334 -0
  90. package/lib/services/domainservice.spec.js.map +1 -0
  91. package/lib/services/echo.d.ts +2 -2
  92. package/lib/services/echo.js.map +1 -1
  93. package/lib/services/echo.spec.js +9 -2
  94. package/lib/services/echo.spec.js.map +1 -1
  95. package/lib/services/filebinary.d.ts +13 -14
  96. package/lib/services/filebinary.js +79 -73
  97. package/lib/services/filebinary.js.map +1 -1
  98. package/lib/services/filebinary.spec.d.ts +5 -0
  99. package/lib/services/filebinary.spec.js +222 -11
  100. package/lib/services/filebinary.spec.js.map +1 -1
  101. package/lib/services/fileconfiguration.js +4 -4
  102. package/lib/services/fileconfiguration.js.map +1 -1
  103. package/lib/services/fileconfiguration.spec.js +23 -24
  104. package/lib/services/fileconfiguration.spec.js.map +1 -1
  105. package/lib/services/invitationservice.d.ts +11 -9
  106. package/lib/services/invitationservice.js +17 -23
  107. package/lib/services/invitationservice.js.map +1 -1
  108. package/lib/services/invitationservice.spec.js +43 -40
  109. package/lib/services/invitationservice.spec.js.map +1 -1
  110. package/lib/services/kubernetesconfiguration.js +12 -22
  111. package/lib/services/kubernetesconfiguration.js.map +1 -1
  112. package/lib/services/kubernetesconfiguration.spec.js +1 -6
  113. package/lib/services/kubernetesconfiguration.spec.js.map +1 -1
  114. package/lib/services/mailer.js +1 -1
  115. package/lib/services/mailer.js.map +1 -1
  116. package/lib/services/mailer.spec.js +4 -1
  117. package/lib/services/mailer.spec.js.map +1 -1
  118. package/lib/services/oauth.d.ts +17 -9
  119. package/lib/services/oauth.js +30 -4
  120. package/lib/services/oauth.js.map +1 -1
  121. package/lib/services/oauth.spec.js +32 -15
  122. package/lib/services/oauth.spec.js.map +1 -1
  123. package/lib/services/prometheus.spec.js.map +1 -1
  124. package/lib/services/proxy.d.ts +9 -8
  125. package/lib/services/proxy.js +65 -36
  126. package/lib/services/proxy.js.map +1 -1
  127. package/lib/services/proxy.spec.js +28 -2
  128. package/lib/services/proxy.spec.js.map +1 -1
  129. package/lib/services/resource.d.ts +3 -3
  130. package/lib/services/resource.js +4 -3
  131. package/lib/services/resource.js.map +1 -1
  132. package/lib/services/resource.spec.js +3 -3
  133. package/lib/services/resource.spec.js.map +1 -1
  134. package/lib/services/service.d.ts +10 -13
  135. package/lib/services/service.js +29 -13
  136. package/lib/services/service.js.map +1 -1
  137. package/lib/services/service.spec.js +49 -11
  138. package/lib/services/service.spec.js.map +1 -1
  139. package/lib/services/version.d.ts +2 -2
  140. package/lib/services/version.js.map +1 -1
  141. package/lib/stores/aggregator.js +1 -0
  142. package/lib/stores/aggregator.js.map +1 -1
  143. package/lib/stores/aliasstore.d.ts +2 -2
  144. package/lib/stores/aliasstore.js +15 -4
  145. package/lib/stores/aliasstore.js.map +1 -1
  146. package/lib/stores/aliasstore.spec.js +4 -2
  147. package/lib/stores/aliasstore.spec.js.map +1 -1
  148. package/lib/stores/file.d.ts +5 -2
  149. package/lib/stores/file.js +11 -8
  150. package/lib/stores/file.js.map +1 -1
  151. package/lib/stores/file.spec.js +21 -34
  152. package/lib/stores/file.spec.js.map +1 -1
  153. package/lib/stores/mapper.d.ts +4 -2
  154. package/lib/stores/mapper.js +18 -11
  155. package/lib/stores/mapper.js.map +1 -1
  156. package/lib/stores/mapper.spec.js +6 -3
  157. package/lib/stores/mapper.spec.js.map +1 -1
  158. package/lib/stores/memory.d.ts +5 -2
  159. package/lib/stores/memory.js +11 -9
  160. package/lib/stores/memory.js.map +1 -1
  161. package/lib/stores/memory.spec.d.ts +3 -0
  162. package/lib/stores/memory.spec.js +100 -11
  163. package/lib/stores/memory.spec.js.map +1 -1
  164. package/lib/stores/store.d.ts +177 -87
  165. package/lib/stores/store.js +312 -141
  166. package/lib/stores/store.js.map +1 -1
  167. package/lib/stores/store.spec.d.ts +2 -2
  168. package/lib/stores/store.spec.js +54 -38
  169. package/lib/stores/store.spec.js.map +1 -1
  170. package/lib/stores/webdaql/WebdaQLLexer.d.ts +14 -13
  171. package/lib/stores/webdaql/WebdaQLLexer.js +121 -112
  172. package/lib/stores/webdaql/WebdaQLLexer.js.map +1 -1
  173. package/lib/stores/webdaql/WebdaQLParserLexer.d.ts +14 -13
  174. package/lib/stores/webdaql/WebdaQLParserLexer.js +121 -112
  175. package/lib/stores/webdaql/WebdaQLParserLexer.js.map +1 -1
  176. package/lib/stores/webdaql/WebdaQLParserListener.d.ts +15 -3
  177. package/lib/stores/webdaql/WebdaQLParserParser.d.ts +23 -13
  178. package/lib/stores/webdaql/WebdaQLParserParser.js +149 -94
  179. package/lib/stores/webdaql/WebdaQLParserParser.js.map +1 -1
  180. package/lib/stores/webdaql/WebdaQLParserVisitor.d.ts +9 -2
  181. package/lib/stores/webdaql/query.d.ts +6 -2
  182. package/lib/stores/webdaql/query.js +14 -1
  183. package/lib/stores/webdaql/query.js.map +1 -1
  184. package/lib/stores/webdaql/query.spec.js +10 -1
  185. package/lib/stores/webdaql/query.spec.js.map +1 -1
  186. package/lib/test.d.ts +48 -19
  187. package/lib/test.js +171 -63
  188. package/lib/test.js.map +1 -1
  189. package/lib/unpackedapplication.d.ts +5 -0
  190. package/lib/unpackedapplication.js +58 -10
  191. package/lib/unpackedapplication.js.map +1 -1
  192. package/lib/utils/context.d.ts +76 -29
  193. package/lib/utils/context.js +91 -55
  194. package/lib/utils/context.js.map +1 -1
  195. package/lib/utils/context.spec.d.ts +9 -1
  196. package/lib/utils/context.spec.js +73 -8
  197. package/lib/utils/context.spec.js.map +1 -1
  198. package/lib/utils/cookie.d.ts +4 -5
  199. package/lib/utils/cookie.js +1 -2
  200. package/lib/utils/cookie.js.map +1 -1
  201. package/lib/utils/cookie.spec.js +5 -3
  202. package/lib/utils/cookie.spec.js.map +1 -1
  203. package/lib/utils/httpcontext.spec.js +9 -3
  204. package/lib/utils/httpcontext.spec.js.map +1 -1
  205. package/lib/utils/serializers.d.ts +46 -17
  206. package/lib/utils/serializers.js +116 -2
  207. package/lib/utils/serializers.js.map +1 -1
  208. package/lib/utils/serializers.spec.js +84 -20
  209. package/lib/utils/serializers.spec.js.map +1 -1
  210. package/lib/utils/session.d.ts +14 -8
  211. package/lib/utils/session.js +14 -3
  212. package/lib/utils/session.js.map +1 -1
  213. package/lib/utils/session.spec.js +6 -1
  214. package/lib/utils/session.spec.js.map +1 -1
  215. package/package.json +16 -10
  216. package/test/cachedapp/webda.config.json +6 -1
  217. package/test/config-cached.json +5 -0
  218. package/test/config-file-missing-file.json +5 -7
  219. package/test/config-file-no-reload.json +5 -7
  220. package/test/config-file-reload.json +5 -7
  221. package/test/config-kube-reload.json +5 -11
  222. package/test/config-reload.json +2 -4
  223. package/test/config.json +12 -2
  224. package/test/moddas/voidstore.js +1 -1
  225. package/test/models/ident.js +6 -4
  226. package/test/models/task.js +4 -4
  227. package/webda.module.json +1587 -1266
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import * as fs from "fs";
8
8
  import { join } from "path";
9
- import { CloudBinary, CloudBinaryParameters } from "../index.js";
9
+ import { CloudBinary, CloudBinaryParameters, WebdaError } from "../index.js";
10
10
  import { BinaryNotFoundError, MemoryBinaryFile } from "./binary.js";
11
11
  import { Inject } from "./service.js";
12
12
  export class FileBinaryParameters extends CloudBinaryParameters {
@@ -16,6 +16,10 @@ export class FileBinaryParameters extends CloudBinaryParameters {
16
16
  this.folder += "/";
17
17
  }
18
18
  this.maxSize ?? (this.maxSize = 10 * 1024 * 1024);
19
+ // Remove trailing /
20
+ if (this.url && this.url.endsWith("/")) {
21
+ this.url = this.url.substring(0, this.url.length - 1);
22
+ }
19
23
  }
20
24
  }
21
25
  /**
@@ -51,52 +55,52 @@ export class FileBinary extends CloudBinary {
51
55
  fs.mkdirSync(this.parameters.folder, { recursive: true });
52
56
  }
53
57
  }
54
- _initRoutes() {
55
- super._initRoutes();
56
- // Will redirect to this URL for direct upload
57
- let url = this.parameters.expose.url + "/download/data/{hash}{?token,content-disposition,content-type}";
58
+ initRoutes() {
59
+ super.initRoutes();
60
+ // We do not want to expose by default
61
+ if (this.parameters.url === undefined) {
62
+ return;
63
+ }
64
+ // Will redirect to this URL for direct download
65
+ let url = this.parameters.url + "/download/data/{hash}{?token,content-disposition,content-type}";
58
66
  let name = this.getOperationName();
59
- if (!this.parameters.expose.restrict.get) {
60
- this.addRoute(url, ["GET"], this.downloadBinaryLink, {
61
- put: {
62
- operationId: `get${name}Binary`,
63
- description: "Download a binary to an object after challenge",
64
- summary: "Download a binary",
65
- responses: {
66
- "200": {
67
- description: "Content of binary"
68
- },
69
- "403": {
70
- description: "Wrong hash"
71
- }
67
+ this.addRoute(url, ["GET"], this.downloadBinaryLink, {
68
+ put: {
69
+ operationId: `get${name}Binary`,
70
+ description: "Download a binary to an object after challenge",
71
+ summary: "Download a binary",
72
+ responses: {
73
+ "200": {
74
+ description: "Content of binary"
75
+ },
76
+ "403": {
77
+ description: "Wrong hash"
72
78
  }
73
79
  }
74
- });
75
- }
76
- if (!this.parameters.expose.restrict.create) {
77
- url = this.parameters.expose.url + "/upload/data/{hash}{?token}";
78
- this.addRoute(url, ["PUT"], this.storeBinary, {
79
- put: {
80
- operationId: `put${name}Binary`,
81
- description: "Upload a binary to an object after challenge",
82
- summary: "Upload a binary",
83
- responses: {
84
- "204": {
85
- description: ""
86
- },
87
- "400": {
88
- description: "Wrong hash"
89
- },
90
- "404": {
91
- description: "Object does not exist or attachment does not exist"
92
- },
93
- "412": {
94
- description: "Provided hash does not match"
95
- }
80
+ }
81
+ });
82
+ url = this.parameters.url + "/upload/data/{hash}{?token}";
83
+ this.addRoute(url, ["PUT"], this.storeBinary, {
84
+ put: {
85
+ operationId: `put${name}Binary`,
86
+ description: "Upload a binary to an object after challenge",
87
+ summary: "Upload a binary",
88
+ responses: {
89
+ "204": {
90
+ description: ""
91
+ },
92
+ "400": {
93
+ description: "Wrong hash"
94
+ },
95
+ "404": {
96
+ description: "Object does not exist or attachment does not exist"
97
+ },
98
+ "412": {
99
+ description: "Provided hash does not match"
96
100
  }
97
101
  }
98
- });
99
- }
102
+ }
103
+ });
100
104
  }
101
105
  /**
102
106
  * Download a binary with a challenge
@@ -107,21 +111,22 @@ export class FileBinary extends CloudBinary {
107
111
  try {
108
112
  let dt = await this.cryptoService.jwtVerify(ctx.parameter("token"));
109
113
  if (dt.hash !== hash) {
110
- throw 403;
114
+ throw new WebdaError.Forbidden("Wrong hash");
111
115
  }
112
116
  }
113
117
  catch (err) {
114
- throw 403;
118
+ throw new WebdaError.Forbidden("Incorrect JWT");
115
119
  }
116
120
  ctx.writeHead(200, {
117
121
  "content-disposition": ctx.parameter("content-disposition"),
118
122
  "content-type": ctx.parameter("content-type")
119
123
  });
124
+ let map = await this.get({ hash });
120
125
  // Fake a binary map for this case
121
- return new Promise(async (resolve, reject) => {
126
+ return new Promise((resolve, reject) => {
122
127
  const stream = ctx.getStream();
123
128
  stream.on("error", reject).on("finish", resolve);
124
- (await this.get({ hash })).pipe(stream);
129
+ map.pipe(stream);
125
130
  });
126
131
  }
127
132
  /**
@@ -140,7 +145,7 @@ export class FileBinary extends CloudBinary {
140
145
  async getSignedUrlFromMap(map, expires, context) {
141
146
  return `${context
142
147
  .getHttpContext()
143
- .getAbsoluteUrl(this.parameters.expose.url + "/download/data/" + map.hash)}?token=${await this.getToken(map.hash, "GET", expires)}&content-type=${map.mimetype}&content-disposition=attachment`;
148
+ .getAbsoluteUrl(this.parameters.url + "/download/data/" + map.hash)}?token=${await this.getToken(map.hash, "GET", expires)}&content-type=${map.mimetype}&content-disposition=attachment`;
144
149
  }
145
150
  /**
146
151
  * Get storage path for a hash
@@ -184,9 +189,7 @@ export class FileBinary extends CloudBinary {
184
189
  // Get a full URL, this method should be in a Route Object
185
190
  // Add a JWT token for 60s
186
191
  let token = await this.getToken(body.hash, "PUT");
187
- return ctx
188
- .getHttpContext()
189
- .getAbsoluteUrl(this.parameters.expose.url + "/upload/data/" + body.hash + `?token=${token}`);
192
+ return ctx.getHttpContext().getAbsoluteUrl(this.parameters.url + "/upload/data/" + body.hash + `?token=${token}`);
190
193
  }
191
194
  /**
192
195
  * Will give you the redirect url
@@ -194,13 +197,12 @@ export class FileBinary extends CloudBinary {
194
197
  * @ignore
195
198
  */
196
199
  async putRedirectUrl(ctx) {
197
- let body = await ctx.getRequestBody();
198
- let uid = ctx.parameter("uid");
199
- let store = ctx.parameter("store");
200
- let property = ctx.parameter("property");
200
+ const body = await ctx.getInput();
201
+ const { uuid, store, property } = ctx.getParameters();
201
202
  let result = { url: await this.getPutUrl(ctx), method: "PUT" };
202
- if (fs.existsSync(this._getPath(body.hash, store + "_" + uid))) {
203
+ if (fs.existsSync(this._getPath(body.hash, store + "_" + property + "_" + uuid))) {
203
204
  if (!fs.existsSync(this._getPath(body.hash, "data"))) {
205
+ // 232-237
204
206
  return result;
205
207
  }
206
208
  // If the link is already register just return directly ok
@@ -208,13 +210,13 @@ export class FileBinary extends CloudBinary {
208
210
  }
209
211
  // Get the target object to add the mapping
210
212
  let targetStore = this._verifyMapAndStore(ctx);
211
- let object = await targetStore.get(uid, ctx);
213
+ let object = await targetStore.get(uuid, ctx);
212
214
  await this.uploadSuccess(object, property, body);
213
215
  // Need to store the usage of the file
214
216
  if (!fs.existsSync(this._getPath(body.hash))) {
215
217
  fs.mkdirSync(this._getPath(body.hash));
216
218
  }
217
- this._touch(this._getPath(body.hash, store + "_" + uid));
219
+ this._touch(this._getPath(body.hash, store + "_" + uuid + "_" + property));
218
220
  if (this.challenge(body.hash, body.challenge)) {
219
221
  // Return empty as we dont need to upload the data
220
222
  return;
@@ -239,23 +241,23 @@ export class FileBinary extends CloudBinary {
239
241
  }).getHashes();
240
242
  if (ctx.parameter("hash") !== result.hash) {
241
243
  this.log("WARN", "Request hash differ", ctx.parameter("hash"), "!==", result.hash);
242
- throw 400;
244
+ throw new WebdaError.BadRequest("Request hash differ");
243
245
  }
244
246
  // Verify token
245
247
  try {
246
248
  let dt = await this.cryptoService.jwtVerify(ctx.parameter("token"));
247
249
  if (dt.hash !== result.hash) {
248
250
  this.log("WARN", "JWT hash differ", ctx.parameter("hash"), "!==", result.hash);
249
- throw 403;
251
+ throw new WebdaError.Forbidden("JWT hash differ");
250
252
  }
251
253
  }
252
254
  catch (err) {
253
255
  this.log("WARN", "Invalid JWT token");
254
- throw 403;
256
+ throw new WebdaError.Forbidden("Invalid JWT token");
255
257
  }
256
258
  if (!fs.existsSync(this._getPath(result.hash))) {
257
259
  // The folder should have been create by a previous request
258
- throw 412;
260
+ throw new WebdaError.PreconditionFailed("No folder for hash " + result.hash);
259
261
  }
260
262
  let path = this._getPath(result.hash, "data");
261
263
  if (!fs.existsSync(path)) {
@@ -296,12 +298,15 @@ export class FileBinary extends CloudBinary {
296
298
  /**
297
299
  * @override
298
300
  */
299
- async _cleanUsage(hash, uuid) {
301
+ async _cleanUsage(hash, uuid, attribute) {
300
302
  const p = this._getPath(hash);
301
303
  if (!fs.existsSync(p))
302
304
  return;
305
+ uuid = uuid.startsWith("_") ? uuid : `_${uuid}`;
303
306
  let files = fs.readdirSync(p);
304
- files.filter(f => f.endsWith(uuid)).forEach(f => fs.unlinkSync(this._getPath(hash, f)));
307
+ files
308
+ .filter(f => f.endsWith(attribute ? `_${attribute}${uuid}` : `${uuid}`))
309
+ .forEach(f => fs.unlinkSync(this._getPath(hash, f)));
305
310
  if (files.length == 3) {
306
311
  await this._cleanHash(hash);
307
312
  }
@@ -310,9 +315,9 @@ export class FileBinary extends CloudBinary {
310
315
  * @inheritdoc
311
316
  */
312
317
  async delete(object, property, index) {
313
- let hash = object[property][index].hash;
318
+ let hash = (index !== undefined ? object[property][index] : object[property]).hash;
314
319
  await this.deleteSuccess(object, property, index);
315
- await this._cleanUsage(hash, object.getUuid());
320
+ await this._cleanUsage(hash, object.getUuid(), property);
316
321
  }
317
322
  challenge(hash, challenge) {
318
323
  let path = this._getPath(hash);
@@ -322,19 +327,20 @@ export class FileBinary extends CloudBinary {
322
327
  * @inheritdoc
323
328
  */
324
329
  async cascadeDelete(info, uuid) {
325
- return this._cleanUsage(info.hash, "_" + uuid);
330
+ return this._cleanUsage(info.hash, uuid);
326
331
  }
327
- async _store(file, object) {
332
+ async _store(file, object, attribute) {
328
333
  fs.mkdirSync(this._getPath(file.hash));
329
- await new Promise(async (resolve, reject) => {
330
- (await file.get())
334
+ const map = await file.get();
335
+ await new Promise((resolve, reject) => {
336
+ map
331
337
  .pipe(fs.createWriteStream(this._getPath(file.hash, "data")))
332
338
  .on("error", reject)
333
339
  .on("finish", resolve);
334
340
  });
335
341
  // Store the challenge
336
342
  this._touch(this._getPath(file.hash, "_" + file.challenge));
337
- this._touch(this._getPath(file.hash, object.getStore().getName() + "_" + object.getUuid()));
343
+ this._touch(this._getPath(file.hash, `${object.getStore().getName()}_${attribute}_${object.getUuid()}`));
338
344
  }
339
345
  /**
340
346
  * @inheritdoc
@@ -343,13 +349,13 @@ export class FileBinary extends CloudBinary {
343
349
  await file.getHashes();
344
350
  const storeName = object.getStore().getName();
345
351
  const fileInfo = file.toBinaryFileInfo();
346
- this.checkMap(storeName, property);
352
+ this.checkMap(storeName, property, object.__type);
347
353
  if (fs.existsSync(this._getPath(file.hash))) {
348
- this._touch(this._getPath(file.hash, `${storeName}_${object.getUuid()}`));
354
+ this._touch(this._getPath(file.hash, `${storeName}_${property}_${object.getUuid()}`));
349
355
  await this.uploadSuccess(object, property, fileInfo);
350
356
  return;
351
357
  }
352
- await this._store(file, object);
358
+ await this._store(file, object, property);
353
359
  await this.uploadSuccess(object, property, fileInfo);
354
360
  }
355
361
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"filebinary.js","sourceRoot":"","sources":["../../src/services/filebinary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filebinary.js","sourceRoot":"","sources":["../../src/services/filebinary.ts"],"names":[],"mappings":"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"}
@@ -11,5 +11,10 @@ declare class FileBinaryTest extends CloudBinaryTest {
11
11
  cleanNonExisting(): void;
12
12
  faultyBinary(): void;
13
13
  cov(): void;
14
+ handleBinary(): Promise<void>;
15
+ /**
16
+ * Test that we can use binary attributes
17
+ */
18
+ binaryAttributes(): Promise<void>;
14
19
  }
15
20
  export { FileBinaryTest };
@@ -6,11 +6,21 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { suite, test } from "@testdeck/mocha";
8
8
  import * as assert from "assert";
9
+ import { EventEmitter } from "events";
9
10
  import * as fs from "fs";
11
+ import { mkdirSync, writeFileSync } from "fs";
10
12
  import pkg from "fs-extra";
13
+ import sinon from "sinon";
11
14
  import { Readable } from "stream";
12
- import { BinaryFile, MemoryBinaryFile } from "./binary.js";
15
+ import { Core } from "../core.js";
16
+ import { WebdaError } from "../errors.js";
17
+ import { CoreModel } from "../models/coremodel.js";
18
+ import { WebdaTest } from "../test.js";
19
+ import { FileUtils } from "../utils/serializers.js";
20
+ import { BinariesImpl, BinariesItem, Binary, BinaryFile, BinaryService, MemoryBinaryFile } from "./binary.js";
21
+ import { TestBinaryService } from "./binary.spec.js";
13
22
  import { CloudBinaryTest } from "./cloudbinary.spec.js";
23
+ import { FileBinary } from "./filebinary.js";
14
24
  const { removeSync } = pkg;
15
25
  class FaultyBinaryFile extends BinaryFile {
16
26
  async get() {
@@ -62,20 +72,20 @@ let FileBinaryTest = class FileBinaryTest extends CloudBinaryTest {
62
72
  assert.notStrictEqual(url, undefined);
63
73
  await this.execute(ctx, "test.webda.io", "GET", url.substring("http://test.webda.io".length));
64
74
  // c59d?token -> d59d?token
65
- await assert.rejects(() => this.execute(ctx, "test.webda.io", "GET", url.substring("http://test.webda.io".length).replace("c59d?token", "d59d?token")), /403/);
66
- await assert.rejects(() => this.execute(ctx, "test.webda.io", "GET", url.substring("http://test.webda.io".length).replace("eyJhbG", "ezJhbG")), /403/);
75
+ await assert.rejects(() => this.execute(ctx, "test.webda.io", "GET", url.substring("http://test.webda.io".length).replace("c59d?token", "d59d?token")), WebdaError.Forbidden);
76
+ await assert.rejects(() => this.execute(ctx, "test.webda.io", "GET", url.substring("http://test.webda.io".length).replace("eyJhbG", "ezJhbG")), WebdaError.Forbidden);
67
77
  }
68
78
  async verifyMapAndStore() {
69
79
  let binary = this.getBinary();
70
80
  let ctx = await this.newContext();
71
81
  ctx.setPathParameters({ store: "Store", property: "images" });
72
- assert.throws(() => binary._verifyMapAndStore(ctx), /404/);
82
+ assert.throws(() => binary._verifyMapAndStore(ctx), (err) => err.getResponseCode() === 404);
73
83
  ctx.setPathParameters({ store: "users", property: "images" });
74
- assert.strictEqual(binary._verifyMapAndStore(ctx), this.getService("users"));
84
+ assert.strictEqual(binary._verifyMapAndStore(ctx), this.getService("Users"));
75
85
  ctx.setPathParameters({ store: "users", property: "images2" });
76
- assert.throws(() => binary._verifyMapAndStore(ctx), /404/);
86
+ assert.throws(() => binary._verifyMapAndStore(ctx), (err) => err.getResponseCode() === 404);
77
87
  ctx.setPathParameters({ store: "notexisting", property: "images" });
78
- assert.throws(() => binary._verifyMapAndStore(ctx), /404/);
88
+ assert.throws(() => binary._verifyMapAndStore(ctx), (err) => err.getResponseCode() === 404);
79
89
  }
80
90
  computeParameters() {
81
91
  let binary = this.getBinary();
@@ -96,26 +106,26 @@ let FileBinaryTest = class FileBinaryTest extends CloudBinaryTest {
96
106
  token
97
107
  });
98
108
  ctx.getHttpContext().setBody("PLOP");
99
- await assert.rejects(() => binary.storeBinary(ctx), /403/);
109
+ await assert.rejects(() => binary.storeBinary(ctx), (err) => err.getResponseCode() === 403);
100
110
  token = await this.webda.getCrypto().jwtSign({ hash: "PLOP2" });
101
111
  ctx.setPathParameters({
102
112
  hash,
103
113
  token
104
114
  });
105
- await assert.rejects(() => binary.storeBinary(ctx), /403/);
115
+ await assert.rejects(() => binary.storeBinary(ctx), (err) => err.getResponseCode() === 403);
106
116
  // expired token
107
117
  token = await this.webda.getCrypto().jwtSign({ hash, exp: Math.floor(Date.now() / 1000) - 60 * 60 });
108
118
  ctx.setPathParameters({
109
119
  hash,
110
120
  token
111
121
  });
112
- await assert.rejects(() => binary.storeBinary(ctx), /403/);
122
+ await assert.rejects(() => binary.storeBinary(ctx), (err) => err.getResponseCode() === 403);
113
123
  token = await this.webda.getCrypto().jwtSign({ hash });
114
124
  ctx.setPathParameters({
115
125
  hash,
116
126
  token
117
127
  });
118
- await assert.rejects(() => binary.storeBinary(ctx), /412/);
128
+ await assert.rejects(() => binary.storeBinary(ctx), (err) => err.getResponseCode() === 412);
119
129
  }
120
130
  cleanNonExisting() {
121
131
  let binary = this.getBinary();
@@ -140,6 +150,60 @@ let FileBinaryTest = class FileBinaryTest extends CloudBinaryTest {
140
150
  fs.unlinkSync("./touch.txt");
141
151
  }
142
152
  }
153
+ async handleBinary() {
154
+ this.registerService(new FileBinary(Core.get(), "second", {
155
+ folder: "./test/data/binaries"
156
+ }));
157
+ const binaries = Core.get().getServicesOfType(BinaryService);
158
+ const user = Core.get().getModel("WebdaDemo/User");
159
+ assert.strictEqual(Core.get().getBinaryStore(user, "images"), binaries["binary"]);
160
+ binaries["binary"].getParameters().models = {};
161
+ assert.throws(() => Core.get().getBinaryStore(user, "profilePicture"), /No binary store found for WebdaDemo\/User profilePicture/);
162
+ binaries["binary"].getParameters().models = {
163
+ "WebdaDemo/User": ["*"]
164
+ };
165
+ binaries["second"].getParameters().models = {
166
+ "WebdaDemo/User": ["profilePicture"]
167
+ };
168
+ assert.strictEqual(Core.get().getBinaryStore(user, "profilePicture"), binaries["second"]);
169
+ }
170
+ /**
171
+ * Test that we can use binary attributes
172
+ */
173
+ async binaryAttributes() {
174
+ const user = Core.get().getModel("WebdaDemo/User");
175
+ const User = await new user().load({}, true).save();
176
+ //User.profilePicture.upload(new MemoryBinaryFile(Buffer.from("PLOP"), <BinaryFileInfo>(<unknown>{})));
177
+ await User.profilePicture.upload(new MemoryBinaryFile(Buffer.from("PLOP"), {}));
178
+ await User.images.upload(new MemoryBinaryFile(Buffer.from("PLOP2"), {}));
179
+ await this.sleep(1000);
180
+ let files = FileUtils.find("./test/data/binaries");
181
+ assert.deepStrictEqual(files, [
182
+ `test/data/binaries/f15c25d20d6b9a631ab6de08cd00035e/MemoryUsers_profilePicture_${User.getUuid()}`,
183
+ "test/data/binaries/f15c25d20d6b9a631ab6de08cd00035e/_9eed42d099ec7ef1eed00a49e8079cd2",
184
+ "test/data/binaries/f15c25d20d6b9a631ab6de08cd00035e/data",
185
+ `test/data/binaries/ff1cee367d40cacc3fe5f23e985c29ae/MemoryUsers_images_${User.getUuid()}`,
186
+ "test/data/binaries/ff1cee367d40cacc3fe5f23e985c29ae/_0a4ef38590e0bd4a8999f1489186bbe9",
187
+ "test/data/binaries/ff1cee367d40cacc3fe5f23e985c29ae/data"
188
+ ]);
189
+ await User.profilePicture.delete();
190
+ await this.sleep(1000);
191
+ files = FileUtils.find("./test/data/binaries");
192
+ assert.deepStrictEqual(files, [
193
+ `test/data/binaries/ff1cee367d40cacc3fe5f23e985c29ae/MemoryUsers_images_${User.getUuid()}`,
194
+ "test/data/binaries/ff1cee367d40cacc3fe5f23e985c29ae/_0a4ef38590e0bd4a8999f1489186bbe9",
195
+ "test/data/binaries/ff1cee367d40cacc3fe5f23e985c29ae/data"
196
+ ]);
197
+ await User.images[0].upload(new MemoryBinaryFile(Buffer.from("0123456789"), {
198
+ mimetype: "text/plain",
199
+ name: "test.txt",
200
+ size: 10
201
+ }));
202
+ await User.images[0].delete();
203
+ await this.sleep(1000);
204
+ files = FileUtils.find("./test/data/binaries");
205
+ assert.deepStrictEqual(files, []);
206
+ }
143
207
  };
144
208
  __decorate([
145
209
  test
@@ -174,8 +238,155 @@ __decorate([
174
238
  __decorate([
175
239
  test
176
240
  ], FileBinaryTest.prototype, "cov", null);
241
+ __decorate([
242
+ test
243
+ ], FileBinaryTest.prototype, "handleBinary", null);
244
+ __decorate([
245
+ test
246
+ ], FileBinaryTest.prototype, "binaryAttributes", null);
177
247
  FileBinaryTest = __decorate([
178
248
  suite
179
249
  ], FileBinaryTest);
250
+ let BinaryAbstractTest = class BinaryAbstractTest extends WebdaTest {
251
+ async cov() {
252
+ let service = new TestBinaryService(undefined, "plop", {});
253
+ let ctx = await this.newContext();
254
+ await assert.rejects(() => service.putRedirectUrl(undefined), (err) => err.getResponseCode() === 404);
255
+ ctx.getHttpContext().setBody({
256
+ hash: "plop"
257
+ });
258
+ await assert.rejects(() => service.httpChallenge(ctx), (err) => err.getResponseCode() === 400);
259
+ ctx = await this.newContext();
260
+ ctx.getHttpContext().setBody({
261
+ challenge: "plop"
262
+ });
263
+ await assert.rejects(() => service.httpChallenge(ctx), (err) => err.getResponseCode() === 400);
264
+ ctx = await this.newContext();
265
+ let binary = this.getService("binary");
266
+ ctx.setPathParameters({
267
+ property: "images",
268
+ store: "users",
269
+ uid: "notfound",
270
+ index: 0
271
+ });
272
+ ctx.getHttpContext().setBody({
273
+ hash: "p",
274
+ challenge: "z"
275
+ });
276
+ await assert.rejects(() => binary.httpChallenge(ctx), (err) => err.getResponseCode() === 404);
277
+ let stubs = [];
278
+ try {
279
+ let model = {
280
+ images: [
281
+ {
282
+ size: 10
283
+ }
284
+ ],
285
+ canAct: async () => true,
286
+ checkAct: async () => { }
287
+ };
288
+ stubs.push(sinon.stub(binary, "_verifyMapAndStore").callsFake(() => {
289
+ return {
290
+ get: async () => {
291
+ return model;
292
+ }
293
+ };
294
+ }));
295
+ stubs.push(
296
+ // @ts-ignore
297
+ sinon.stub(binary, "get").callsFake(async () => {
298
+ return {
299
+ pipe: stream => {
300
+ stream.emit("error", new Error("I/O"));
301
+ }
302
+ };
303
+ }));
304
+ await assert.rejects(() => binary.httpRoute(ctx));
305
+ }
306
+ finally {
307
+ stubs.forEach(stub => stub.restore());
308
+ }
309
+ }
310
+ async handleBinary() {
311
+ const binaryService = this.getService("binary");
312
+ assert.strictEqual(binaryService.handleBinary("WebdaDemo/User", "images"), 2);
313
+ assert.strictEqual(binaryService.handleBinary("WebdaDemo/User", "profilePicture"), 0);
314
+ assert.strictEqual(binaryService.handleBinary("WebdaDemo/User2", "images"), 0);
315
+ binaryService.getParameters().models["*"] = ["images"];
316
+ assert.strictEqual(binaryService.handleBinary("WebdaDemo/User2", "images"), 1);
317
+ assert.strictEqual(binaryService.handleBinary("WebdaDemo/User2", "images2"), -1);
318
+ }
319
+ async binaryMaps() {
320
+ let map = new BinariesImpl().assign(new CoreModel(), "test");
321
+ await assert.rejects(() => map.upload(undefined));
322
+ await assert.throws(() => map.shift());
323
+ await assert.throws(() => map.unshift());
324
+ await assert.throws(() => map.slice());
325
+ await assert.throws(() => map.pop());
326
+ let binary = new Binary("test", new CoreModel());
327
+ await assert.rejects(() => binary.upload(undefined));
328
+ await assert.rejects(() => binary.delete());
329
+ let binaryItem = new BinariesItem(map, new MemoryBinaryFile(Buffer.from("test"), {
330
+ name: "test",
331
+ mimetype: "text/plain",
332
+ size: 4
333
+ }));
334
+ await assert.rejects(() => binaryItem.upload(undefined));
335
+ await assert.rejects(() => binaryItem.delete());
336
+ }
337
+ async streamToBufferError() {
338
+ let stream = new EventEmitter();
339
+ // @ts-ignore
340
+ let p = assert.rejects(() => BinaryService.streamToBuffer(stream), /Bad I\/O/);
341
+ stream.emit("error", new Error("Bad I/O"));
342
+ await p;
343
+ }
344
+ async verifyMapStore() {
345
+ const binaryService = this.getService("binary");
346
+ const ctx = await this.newContext();
347
+ binaryService.handleBinary = () => -1;
348
+ ctx.getParameters().model = "webda/test";
349
+ assert.throws(() => binaryService._verifyMapAndStore(ctx), WebdaError.NotFound);
350
+ }
351
+ async putRedirectUrl() {
352
+ const binaryService = this.getService("binary");
353
+ let ctx = await this.newContext(JSON.stringify({ hash: "123" }));
354
+ ctx.getParameters().uuid = "456";
355
+ ctx.getParameters().store = "Test";
356
+ ctx.getParameters().property = "plop";
357
+ let dataPath = binaryService._getPath("123", "data");
358
+ mkdirSync(binaryService._getPath("123"), { recursive: true });
359
+ writeFileSync(binaryService._getPath("123", "Test_plop_456"), "");
360
+ if (fs.existsSync(dataPath)) {
361
+ fs.unlinkSync(dataPath);
362
+ }
363
+ let res = await binaryService.putRedirectUrl(ctx);
364
+ assert.notStrictEqual(res, undefined);
365
+ writeFileSync(dataPath, "data");
366
+ res = await binaryService.putRedirectUrl(ctx);
367
+ assert.strictEqual(res, undefined);
368
+ }
369
+ };
370
+ __decorate([
371
+ test
372
+ ], BinaryAbstractTest.prototype, "cov", null);
373
+ __decorate([
374
+ test
375
+ ], BinaryAbstractTest.prototype, "handleBinary", null);
376
+ __decorate([
377
+ test
378
+ ], BinaryAbstractTest.prototype, "binaryMaps", null);
379
+ __decorate([
380
+ test
381
+ ], BinaryAbstractTest.prototype, "streamToBufferError", null);
382
+ __decorate([
383
+ test
384
+ ], BinaryAbstractTest.prototype, "verifyMapStore", null);
385
+ __decorate([
386
+ test
387
+ ], BinaryAbstractTest.prototype, "putRedirectUrl", null);
388
+ BinaryAbstractTest = __decorate([
389
+ suite
390
+ ], BinaryAbstractTest);
180
391
  export { FileBinaryTest };
181
392
  //# sourceMappingURL=filebinary.spec.js.map