@webda/fs 4.0.0-beta.4 → 4.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
import { Readable } from "stream";
|
|
2
|
-
import { BinaryFile, BinaryMap, CloudBinary, CloudBinaryParameters, CoreModel, CoreModelWithBinary, CryptoService, OperationContext, WebContext } from "@webda/core";
|
|
2
|
+
import { BinaryFile, BinaryFileInfo, BinaryMap, CloudBinary, CloudBinaryParameters, CoreModel, CoreModelWithBinary, CryptoService, OperationContext, WebContext } from "@webda/core";
|
|
3
|
+
/**
|
|
4
|
+
* What an upload token attaches once the content is stored and verified: the object, its binary attribute and the
|
|
5
|
+
* file information the client announced
|
|
6
|
+
*/
|
|
7
|
+
export interface UploadTarget {
|
|
8
|
+
/**
|
|
9
|
+
* Model identifier
|
|
10
|
+
*/
|
|
11
|
+
model: string;
|
|
12
|
+
/**
|
|
13
|
+
* Object primary key
|
|
14
|
+
*/
|
|
15
|
+
uuid: string;
|
|
16
|
+
/**
|
|
17
|
+
* Binary attribute
|
|
18
|
+
*/
|
|
19
|
+
attribute: string;
|
|
20
|
+
/**
|
|
21
|
+
* File information announced by the challenge (name, size, mimetype, metadata)
|
|
22
|
+
*/
|
|
23
|
+
info: Omit<BinaryFileInfo, "hash" | "challenge">;
|
|
24
|
+
}
|
|
3
25
|
/** Configuration parameters for the filesystem-backed binary storage service. */
|
|
4
26
|
export declare class FileBinaryParameters extends CloudBinaryParameters {
|
|
5
27
|
/**
|
|
@@ -28,8 +50,11 @@ export declare class FileBinaryParameters extends CloudBinaryParameters {
|
|
|
28
50
|
*
|
|
29
51
|
* The structure used for now is
|
|
30
52
|
* /folder/{hash}/data
|
|
31
|
-
* /folder/{hash}/{
|
|
32
|
-
* /folder/{hash}/challenge
|
|
53
|
+
* /folder/{hash}/{model}_{attribute}_{uuid} usage markers
|
|
54
|
+
* /folder/{hash}/proof_{challenge} proof of possession, written by the service on upload
|
|
55
|
+
*
|
|
56
|
+
* Before 4.0.0-beta.5 the proof was `_{challenge}` and the challenge was sent to clients: those markers are ignored
|
|
57
|
+
* (a leaked value attaches nothing), the content is uploaded once more to get a `proof_` marker.
|
|
33
58
|
*
|
|
34
59
|
* It takes one parameter
|
|
35
60
|
* folder: "path"
|
|
@@ -64,7 +89,8 @@ export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParam
|
|
|
64
89
|
*/
|
|
65
90
|
init(): Promise<this>;
|
|
66
91
|
/**
|
|
67
|
-
* Download a binary with a
|
|
92
|
+
* Download a binary with a signed download token (issued by the `download` behavior action, after the model's
|
|
93
|
+
* permission check)
|
|
68
94
|
*
|
|
69
95
|
* @param ctx - the web context
|
|
70
96
|
*/
|
|
@@ -105,31 +131,63 @@ export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParam
|
|
|
105
131
|
* @param hash - the content hash
|
|
106
132
|
* @param method - HTTP method (PUT or GET)
|
|
107
133
|
* @param expiresIn - token TTL in seconds
|
|
134
|
+
* @param target - for an upload token, what to attach once the content is stored and verified
|
|
108
135
|
* @returns the signed JWT token
|
|
109
136
|
*/
|
|
110
|
-
getToken(hash: string, method: "PUT" | "GET", expiresIn?: number): Promise<string>;
|
|
137
|
+
getToken(hash: string, method: "PUT" | "GET", expiresIn?: number, target?: UploadTarget): Promise<string>;
|
|
111
138
|
/**
|
|
112
139
|
* Get put URL
|
|
113
140
|
*
|
|
114
141
|
* @param ctx - the operation context
|
|
142
|
+
* @param hash - the content hash (read from the input when not given)
|
|
143
|
+
* @param target - what the upload attaches once the content is stored and verified
|
|
115
144
|
* @returns the upload URL
|
|
116
145
|
*/
|
|
117
|
-
getPutUrl(ctx: OperationContext<BinaryFile
|
|
146
|
+
getPutUrl(ctx: OperationContext<BinaryFile>, hash?: string, target?: UploadTarget): Promise<string>;
|
|
118
147
|
/**
|
|
119
|
-
*
|
|
148
|
+
* Make a marker name part file-safe: the model identifier carries a `/`, and a natural key is client-chosen, so
|
|
149
|
+
* anything but letters, digits, `_`, `.`, `:`, `@` and `-` is replaced (a marker is a file inside the hash folder)
|
|
150
|
+
* @param part - the raw value
|
|
151
|
+
* @returns the safe name part
|
|
152
|
+
*/
|
|
153
|
+
protected safeName(part: string): string;
|
|
154
|
+
/**
|
|
155
|
+
* Usage marker of an object attribute in a hash folder: `<model>_<attribute>_<uuid>`, every part file-safe
|
|
156
|
+
* @param target - the object attribute
|
|
157
|
+
* @returns the marker file name
|
|
158
|
+
*/
|
|
159
|
+
protected usageMarker(target: Pick<UploadTarget, "model" | "attribute" | "uuid">): string;
|
|
160
|
+
/**
|
|
161
|
+
* Attach a stored binary to an object: usage marker, then the object's binary attribute
|
|
162
|
+
* @param object - the model instance
|
|
163
|
+
* @param target - the object attribute and the announced file information
|
|
164
|
+
* @param hashes - the stored content
|
|
165
|
+
* @param hashes.hash - its hash
|
|
166
|
+
* @param hashes.challenge - its challenge
|
|
167
|
+
*/
|
|
168
|
+
protected attach(object: CoreModel, target: UploadTarget, hashes: {
|
|
169
|
+
hash: string;
|
|
170
|
+
challenge: string;
|
|
171
|
+
}): Promise<void>;
|
|
172
|
+
/**
|
|
173
|
+
* Challenge: the client announces `{hash, challenge, ...}`; the challenge is the md5 of "WEBDA" + the content,
|
|
174
|
+
* so a matching one proves possession of an already stored binary, which is then attached without upload
|
|
175
|
+
* (`undefined`). Otherwise the upload URL is returned and **nothing is attached yet**: the upload stores the
|
|
176
|
+
* content, verifies it against the announced hash and attaches it then ({@link storeBinary}). A visible hash
|
|
177
|
+
* alone therefore never gives access to another object's binary.
|
|
120
178
|
*
|
|
121
179
|
* @param object - the model instance
|
|
122
180
|
* @param attribute - the binary attribute name
|
|
123
181
|
* @param info - optional binary file info
|
|
124
182
|
* @param context - the operation context
|
|
125
|
-
* @returns the
|
|
183
|
+
* @returns the upload URL and method, or undefined when the binary is attached
|
|
126
184
|
*/
|
|
127
185
|
putRedirectUrl(object: CoreModel, attribute: string, info?: BinaryFile, context?: OperationContext<BinaryFile>): Promise<{
|
|
128
186
|
url: string;
|
|
129
187
|
method: string;
|
|
130
188
|
}>;
|
|
131
189
|
/**
|
|
132
|
-
* Store the binary sent
|
|
190
|
+
* Store the binary sent with an upload token, then attach it to the object the token names
|
|
133
191
|
*
|
|
134
192
|
* @param ctx - the web context
|
|
135
193
|
*/
|
|
@@ -153,13 +211,26 @@ export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParam
|
|
|
153
211
|
*/
|
|
154
212
|
delete(object: CoreModelWithBinary, property: string, index?: number): Promise<void>;
|
|
155
213
|
/**
|
|
156
|
-
*
|
|
214
|
+
* Name of the proof marker of a challenge (legacy `_<challenge>` markers are not proofs)
|
|
215
|
+
* @param challenge - the challenge
|
|
216
|
+
* @returns the marker file name
|
|
217
|
+
*/
|
|
218
|
+
protected proofMarker(challenge: string): string;
|
|
219
|
+
/**
|
|
220
|
+
* Verify that a binary with the given hash exists and carries the proof marker of the challenge, written by the
|
|
221
|
+
* service when the content was uploaded
|
|
157
222
|
*
|
|
158
223
|
* @param hash - the content hash
|
|
159
224
|
* @param challenge - the challenge string
|
|
160
|
-
* @returns true if the
|
|
225
|
+
* @returns true if the proof marker exists
|
|
161
226
|
*/
|
|
162
227
|
challenge(hash: any, challenge: any): boolean;
|
|
228
|
+
/**
|
|
229
|
+
* Usage markers of a hash folder: every file but the data and the proof markers (legacy `_` ones included)
|
|
230
|
+
* @param hash - the content hash
|
|
231
|
+
* @returns the marker names
|
|
232
|
+
*/
|
|
233
|
+
protected usageMarkers(hash: string): string[];
|
|
163
234
|
/**
|
|
164
235
|
* @override
|
|
165
236
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filebinary.service.d.ts","sourceRoot":"","sources":["../src/filebinary.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EACL,UAAU,EACV,SAAS,EAGT,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,mBAAmB,EACnB,aAAa,EAGb,gBAAgB,EAChB,UAAU,EAEX,MAAM,aAAa,CAAC;AAGrB,iFAAiF;AACjF,qBAAa,oBAAqB,SAAQ,qBAAqB;IAC7D;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAWtB;CACF;AACD
|
|
1
|
+
{"version":3,"file":"filebinary.service.d.ts","sourceRoot":"","sources":["../src/filebinary.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
35
35
|
import * as fs from "fs";
|
|
36
36
|
import { join } from "path";
|
|
37
37
|
import { BinaryNotFoundError, CloudBinary, CloudBinaryParameters, Inject, MemoryBinaryFile, WebContext, WebdaError } from "@webda/core";
|
|
38
|
-
import { useModelId } from "@webda/core";
|
|
38
|
+
import { useModel, useModelId } from "@webda/core";
|
|
39
39
|
/** Configuration parameters for the filesystem-backed binary storage service. */
|
|
40
40
|
export class FileBinaryParameters extends CloudBinaryParameters {
|
|
41
41
|
/**
|
|
@@ -75,8 +75,11 @@ export class FileBinaryParameters extends CloudBinaryParameters {
|
|
|
75
75
|
*
|
|
76
76
|
* The structure used for now is
|
|
77
77
|
* /folder/{hash}/data
|
|
78
|
-
* /folder/{hash}/{
|
|
79
|
-
* /folder/{hash}/challenge
|
|
78
|
+
* /folder/{hash}/{model}_{attribute}_{uuid} usage markers
|
|
79
|
+
* /folder/{hash}/proof_{challenge} proof of possession, written by the service on upload
|
|
80
|
+
*
|
|
81
|
+
* Before 4.0.0-beta.5 the proof was `_{challenge}` and the challenge was sent to clients: those markers are ignored
|
|
82
|
+
* (a leaked value attaches nothing), the content is uploaded once more to get a `proof_` marker.
|
|
80
83
|
*
|
|
81
84
|
* It takes one parameter
|
|
82
85
|
* folder: "path"
|
|
@@ -176,16 +179,17 @@ let FileBinary = (() => {
|
|
|
176
179
|
return this;
|
|
177
180
|
}
|
|
178
181
|
/**
|
|
179
|
-
* Download a binary with a
|
|
182
|
+
* Download a binary with a signed download token (issued by the `download` behavior action, after the model's
|
|
183
|
+
* permission check)
|
|
180
184
|
*
|
|
181
185
|
* @param ctx - the web context
|
|
182
186
|
*/
|
|
183
187
|
async downloadBinaryLink(ctx) {
|
|
184
188
|
const { hash } = ctx.getParameters();
|
|
185
|
-
// Verify token
|
|
189
|
+
// Verify token: it must be a download token for this hash (an upload token does not download)
|
|
186
190
|
try {
|
|
187
191
|
const dt = await this.cryptoService.jwtVerify(ctx.parameter("token"));
|
|
188
|
-
if (dt.hash !== hash) {
|
|
192
|
+
if (dt.hash !== hash || dt.method !== "GET") {
|
|
189
193
|
throw new WebdaError.Forbidden("Wrong hash");
|
|
190
194
|
}
|
|
191
195
|
}
|
|
@@ -261,59 +265,97 @@ let FileBinary = (() => {
|
|
|
261
265
|
* @param hash - the content hash
|
|
262
266
|
* @param method - HTTP method (PUT or GET)
|
|
263
267
|
* @param expiresIn - token TTL in seconds
|
|
268
|
+
* @param target - for an upload token, what to attach once the content is stored and verified
|
|
264
269
|
* @returns the signed JWT token
|
|
265
270
|
*/
|
|
266
|
-
async getToken(hash, method, expiresIn = 60) {
|
|
267
|
-
return this.cryptoService.jwtSign({ hash, method }, {
|
|
268
|
-
expiresIn
|
|
269
|
-
});
|
|
271
|
+
async getToken(hash, method, expiresIn = 60, target) {
|
|
272
|
+
return this.cryptoService.jwtSign(target ? { hash, method, target } : { hash, method }, { expiresIn });
|
|
270
273
|
}
|
|
271
274
|
/**
|
|
272
275
|
* Get put URL
|
|
273
276
|
*
|
|
274
277
|
* @param ctx - the operation context
|
|
278
|
+
* @param hash - the content hash (read from the input when not given)
|
|
279
|
+
* @param target - what the upload attaches once the content is stored and verified
|
|
275
280
|
* @returns the upload URL
|
|
276
281
|
*/
|
|
277
|
-
async getPutUrl(ctx) {
|
|
278
|
-
|
|
279
|
-
const token = await this.getToken(
|
|
282
|
+
async getPutUrl(ctx, hash, target) {
|
|
283
|
+
hash ??= (await ctx.getInput()).hash;
|
|
284
|
+
const token = await this.getToken(hash, "PUT", 60, target);
|
|
280
285
|
if (ctx instanceof WebContext) {
|
|
281
|
-
return ctx.getHttpContext().getAbsoluteUrl(this.parameters.url + "/upload/data/" +
|
|
286
|
+
return ctx.getHttpContext().getAbsoluteUrl(this.parameters.url + "/upload/data/" + hash + `?token=${token}`);
|
|
282
287
|
}
|
|
283
|
-
return this.parameters.url + "/upload/data/" +
|
|
288
|
+
return this.parameters.url + "/upload/data/" + hash + `?token=${token}`;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Make a marker name part file-safe: the model identifier carries a `/`, and a natural key is client-chosen, so
|
|
292
|
+
* anything but letters, digits, `_`, `.`, `:`, `@` and `-` is replaced (a marker is a file inside the hash folder)
|
|
293
|
+
* @param part - the raw value
|
|
294
|
+
* @returns the safe name part
|
|
295
|
+
*/
|
|
296
|
+
safeName(part) {
|
|
297
|
+
return `${part}`.replace(/[^A-Za-z0-9_.:@-]/g, "-");
|
|
284
298
|
}
|
|
285
299
|
/**
|
|
286
|
-
*
|
|
300
|
+
* Usage marker of an object attribute in a hash folder: `<model>_<attribute>_<uuid>`, every part file-safe
|
|
301
|
+
* @param target - the object attribute
|
|
302
|
+
* @returns the marker file name
|
|
303
|
+
*/
|
|
304
|
+
usageMarker(target) {
|
|
305
|
+
return `${this.safeName(target.model)}_${this.safeName(target.attribute)}_${this.safeName(target.uuid)}`;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Attach a stored binary to an object: usage marker, then the object's binary attribute
|
|
309
|
+
* @param object - the model instance
|
|
310
|
+
* @param target - the object attribute and the announced file information
|
|
311
|
+
* @param hashes - the stored content
|
|
312
|
+
* @param hashes.hash - its hash
|
|
313
|
+
* @param hashes.challenge - its challenge
|
|
314
|
+
*/
|
|
315
|
+
async attach(object, target, hashes) {
|
|
316
|
+
this._touch(this._getPath(hashes.hash, this.usageMarker(target)));
|
|
317
|
+
await this.uploadSuccess(object, target.attribute, {
|
|
318
|
+
name: target.info.name,
|
|
319
|
+
size: target.info.size,
|
|
320
|
+
mimetype: target.info.mimetype,
|
|
321
|
+
metadata: target.info.metadata,
|
|
322
|
+
hash: hashes.hash,
|
|
323
|
+
challenge: hashes.challenge
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Challenge: the client announces `{hash, challenge, ...}`; the challenge is the md5 of "WEBDA" + the content,
|
|
328
|
+
* so a matching one proves possession of an already stored binary, which is then attached without upload
|
|
329
|
+
* (`undefined`). Otherwise the upload URL is returned and **nothing is attached yet**: the upload stores the
|
|
330
|
+
* content, verifies it against the announced hash and attaches it then ({@link storeBinary}). A visible hash
|
|
331
|
+
* alone therefore never gives access to another object's binary.
|
|
287
332
|
*
|
|
288
333
|
* @param object - the model instance
|
|
289
334
|
* @param attribute - the binary attribute name
|
|
290
335
|
* @param info - optional binary file info
|
|
291
336
|
* @param context - the operation context
|
|
292
|
-
* @returns the
|
|
337
|
+
* @returns the upload URL and method, or undefined when the binary is attached
|
|
293
338
|
*/
|
|
294
339
|
async putRedirectUrl(object, attribute, info, context) {
|
|
295
340
|
info ??= await context.getInput();
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
341
|
+
const target = {
|
|
342
|
+
model: useModelId(object.constructor),
|
|
343
|
+
uuid: object.getUUID(),
|
|
344
|
+
attribute,
|
|
345
|
+
info: { name: info.name, size: info.size, mimetype: info.mimetype, metadata: info.metadata }
|
|
346
|
+
};
|
|
347
|
+
if (fs.existsSync(this._getPath(info.hash, "data")) && this.challenge(info.hash, info.challenge)) {
|
|
348
|
+
// Proof of possession: attach the stored binary
|
|
349
|
+
await this.attach(object, target, { hash: info.hash, challenge: info.challenge });
|
|
304
350
|
return;
|
|
305
351
|
}
|
|
306
352
|
if (!fs.existsSync(this._getPath(info.hash))) {
|
|
307
353
|
fs.mkdirSync(this._getPath(info.hash));
|
|
308
354
|
}
|
|
309
|
-
this.
|
|
310
|
-
if (this.challenge(info.hash, info.challenge)) {
|
|
311
|
-
return;
|
|
312
|
-
}
|
|
313
|
-
return result;
|
|
355
|
+
return { url: await this.getPutUrl(context, info.hash, target), method: "PUT" };
|
|
314
356
|
}
|
|
315
357
|
/**
|
|
316
|
-
* Store the binary sent
|
|
358
|
+
* Store the binary sent with an upload token, then attach it to the object the token names
|
|
317
359
|
*
|
|
318
360
|
* @param ctx - the web context
|
|
319
361
|
*/
|
|
@@ -328,9 +370,11 @@ let FileBinary = (() => {
|
|
|
328
370
|
this.log("WARN", "Request hash differ", ctx.parameter("hash"), "!==", result.hash);
|
|
329
371
|
throw new WebdaError.BadRequest("Request hash differ");
|
|
330
372
|
}
|
|
373
|
+
let dt;
|
|
331
374
|
try {
|
|
332
|
-
|
|
333
|
-
|
|
375
|
+
dt = await this.cryptoService.jwtVerify(ctx.parameter("token"));
|
|
376
|
+
// An upload token for this content only (a download token does not upload)
|
|
377
|
+
if (dt.hash !== result.hash || dt.method !== "PUT") {
|
|
334
378
|
this.log("WARN", "JWT hash differ", ctx.parameter("hash"), "!==", result.hash);
|
|
335
379
|
throw new WebdaError.Forbidden("JWT hash differ");
|
|
336
380
|
}
|
|
@@ -346,18 +390,26 @@ let FileBinary = (() => {
|
|
|
346
390
|
if (!fs.existsSync(path)) {
|
|
347
391
|
fs.writeFileSync(path, body);
|
|
348
392
|
}
|
|
349
|
-
this._touch(this._getPath(result.hash,
|
|
393
|
+
this._touch(this._getPath(result.hash, this.proofMarker(result.challenge)));
|
|
394
|
+
if (dt.target) {
|
|
395
|
+
// The content is stored and matches the announced hash: attach it to the object the challenge was made for
|
|
396
|
+
let object;
|
|
397
|
+
try {
|
|
398
|
+
object = await useModel(dt.target.model).ref(dt.target.uuid).get();
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
// Gone since the challenge
|
|
402
|
+
}
|
|
403
|
+
if (object && !object.isDeleted?.()) {
|
|
404
|
+
await this.attach(object, dt.target, result);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
350
407
|
}
|
|
351
408
|
/**
|
|
352
409
|
* @override
|
|
353
410
|
*/
|
|
354
411
|
async getUsageCount(hash) {
|
|
355
|
-
|
|
356
|
-
if (!fs.existsSync(path)) {
|
|
357
|
-
return 0;
|
|
358
|
-
}
|
|
359
|
-
const files = fs.readdirSync(path);
|
|
360
|
-
return files.length - 2;
|
|
412
|
+
return this.usageMarkers(hash).length;
|
|
361
413
|
}
|
|
362
414
|
/**
|
|
363
415
|
* Delete any usage marker and hash
|
|
@@ -382,12 +434,12 @@ let FileBinary = (() => {
|
|
|
382
434
|
const p = this._getPath(hash);
|
|
383
435
|
if (!fs.existsSync(p))
|
|
384
436
|
return;
|
|
385
|
-
|
|
386
|
-
const
|
|
387
|
-
|
|
388
|
-
.filter(f => f.endsWith(attribute ? `_${attribute}${
|
|
437
|
+
// A marker ends with `_<attribute>_<uuid>` (see usageMarker)
|
|
438
|
+
const key = this.safeName(uuid);
|
|
439
|
+
this.usageMarkers(hash)
|
|
440
|
+
.filter(f => f.endsWith(attribute ? `_${this.safeName(attribute)}_${key}` : `_${key}`))
|
|
389
441
|
.forEach(f => fs.unlinkSync(this._getPath(hash, f)));
|
|
390
|
-
if (
|
|
442
|
+
if (this.usageMarkers(hash).length === 0) {
|
|
391
443
|
await this._cleanHash(hash);
|
|
392
444
|
}
|
|
393
445
|
}
|
|
@@ -400,15 +452,36 @@ let FileBinary = (() => {
|
|
|
400
452
|
await this._cleanUsage(hash, object.getUUID(), property);
|
|
401
453
|
}
|
|
402
454
|
/**
|
|
403
|
-
*
|
|
455
|
+
* Name of the proof marker of a challenge (legacy `_<challenge>` markers are not proofs)
|
|
456
|
+
* @param challenge - the challenge
|
|
457
|
+
* @returns the marker file name
|
|
458
|
+
*/
|
|
459
|
+
proofMarker(challenge) {
|
|
460
|
+
return `proof_${this.safeName(challenge)}`;
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Verify that a binary with the given hash exists and carries the proof marker of the challenge, written by the
|
|
464
|
+
* service when the content was uploaded
|
|
404
465
|
*
|
|
405
466
|
* @param hash - the content hash
|
|
406
467
|
* @param challenge - the challenge string
|
|
407
|
-
* @returns true if the
|
|
468
|
+
* @returns true if the proof marker exists
|
|
408
469
|
*/
|
|
409
470
|
challenge(hash, challenge) {
|
|
410
471
|
const path = this._getPath(hash);
|
|
411
|
-
return fs.existsSync(path) && fs.existsSync(`${path}
|
|
472
|
+
return !!challenge && fs.existsSync(path) && fs.existsSync(`${path}/${this.proofMarker(challenge)}`);
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Usage markers of a hash folder: every file but the data and the proof markers (legacy `_` ones included)
|
|
476
|
+
* @param hash - the content hash
|
|
477
|
+
* @returns the marker names
|
|
478
|
+
*/
|
|
479
|
+
usageMarkers(hash) {
|
|
480
|
+
const path = this._getPath(hash);
|
|
481
|
+
if (!fs.existsSync(path)) {
|
|
482
|
+
return [];
|
|
483
|
+
}
|
|
484
|
+
return fs.readdirSync(path).filter(f => f !== "data" && !f.startsWith("_") && !f.startsWith("proof_"));
|
|
412
485
|
}
|
|
413
486
|
/**
|
|
414
487
|
* @override
|
|
@@ -432,8 +505,8 @@ let FileBinary = (() => {
|
|
|
432
505
|
.on("error", reject)
|
|
433
506
|
.on("finish", resolve);
|
|
434
507
|
});
|
|
435
|
-
this._touch(this._getPath(file.hash,
|
|
436
|
-
this._touch(this._getPath(file.hash,
|
|
508
|
+
this._touch(this._getPath(file.hash, this.proofMarker(file.challenge)));
|
|
509
|
+
this._touch(this._getPath(file.hash, this.usageMarker({ model: useModelId(object.constructor), attribute, uuid: object.getUUID() })));
|
|
437
510
|
}
|
|
438
511
|
/**
|
|
439
512
|
* @override
|
|
@@ -444,7 +517,7 @@ let FileBinary = (() => {
|
|
|
444
517
|
const fileInfo = file.toBinaryFileInfo();
|
|
445
518
|
this.checkMap(object, property);
|
|
446
519
|
if (fs.existsSync(this._getPath(file.hash))) {
|
|
447
|
-
this._touch(this._getPath(file.hash,
|
|
520
|
+
this._touch(this._getPath(file.hash, this.usageMarker({ model: storeName, attribute: property, uuid: object.getUUID() })));
|
|
448
521
|
await this.uploadSuccess(object, property, fileInfo);
|
|
449
522
|
return;
|
|
450
523
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filebinary.service.js","sourceRoot":"","sources":["../src/filebinary.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filebinary.service.js","sourceRoot":"","sources":["../src/filebinary.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webda/fs",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.5",
|
|
4
4
|
"description": "Filesystem-based implementations of Store, Binary, and Queue for Webda",
|
|
5
5
|
"author": "Remi Cattiau <remi@cattiau.com>",
|
|
6
|
-
"repository":
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/loopingz/webda.io.git",
|
|
9
|
+
"directory": "packages/fs"
|
|
10
|
+
},
|
|
7
11
|
"main": "lib/index.js",
|
|
8
12
|
"typings": "lib/index.d.ts",
|
|
9
13
|
"dependencies": {
|
|
10
14
|
"mime-types": "^2.1.31",
|
|
11
|
-
"@webda/
|
|
12
|
-
"@webda/
|
|
13
|
-
"@webda/
|
|
14
|
-
"@webda/
|
|
15
|
+
"@webda/utils": "4.0.0-beta.5",
|
|
16
|
+
"@webda/core": "4.0.0-beta.5",
|
|
17
|
+
"@webda/workout": "4.0.0-beta.5",
|
|
18
|
+
"@webda/ql": "4.0.0-beta.5"
|
|
15
19
|
},
|
|
16
20
|
"devDependencies": {
|
|
17
21
|
"@vitest/coverage-v8": "^4.1.2",
|
|
@@ -21,8 +25,8 @@
|
|
|
21
25
|
"typescript": "7.1.0-dev.20260929.1",
|
|
22
26
|
"vite": "^6.0.0",
|
|
23
27
|
"vitest": "^4.1.2",
|
|
24
|
-
"@webda/compiler": "4.0.0-beta.
|
|
25
|
-
"@webda/test": "4.0.0-beta.
|
|
28
|
+
"@webda/compiler": "4.0.0-beta.5",
|
|
29
|
+
"@webda/test": "4.0.0-beta.5"
|
|
26
30
|
},
|
|
27
31
|
"files": [
|
|
28
32
|
"lib",
|
package/webda.module.json
CHANGED
|
@@ -263,10 +263,6 @@
|
|
|
263
263
|
"additionalProperties": false,
|
|
264
264
|
"description": "Represent a file to store",
|
|
265
265
|
"properties": {
|
|
266
|
-
"challenge": {
|
|
267
|
-
"description": "Will be computed by the service\n\nhash of the content prefixed by 'WEBDA'",
|
|
268
|
-
"type": "string"
|
|
269
|
-
},
|
|
270
266
|
"hash": {
|
|
271
267
|
"description": "Will be computed by the service\n\nhash of the content",
|
|
272
268
|
"type": "string"
|