@smartsoft001/crud-shell-nestjs 2.184.0 → 2.186.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.
- package/README.md +33 -3
- package/package.json +9 -9
- package/src/lib/controllers/crud/crud.controller.d.ts +3 -4
- package/src/lib/controllers/crud/crud.controller.js +30 -41
- package/src/lib/controllers/crud/crud.controller.js.map +1 -1
- package/src/lib/controllers/crud/read-attachment.d.ts +11 -0
- package/src/lib/controllers/crud/read-attachment.js +80 -0
- package/src/lib/controllers/crud/read-attachment.js.map +1 -0
package/README.md
CHANGED
|
@@ -27,11 +27,41 @@
|
|
|
27
27
|
<tr><td>PUT /:id</td><td>update — Updates an entity by its ID.</td></tr>
|
|
28
28
|
<tr><td>PATCH /:id</td><td>updatePartial — Partially updates an entity by its ID.</td></tr>
|
|
29
29
|
<tr><td>DELETE /:id</td><td>delete — Deletes an entity by its ID.</td></tr>
|
|
30
|
-
<tr><td>POST /attachments</td><td>uploadAttachment — Uploads
|
|
31
|
-
<tr><td>GET /attachments/:id</td><td>downloadAttachment — Downloads
|
|
32
|
-
<tr><td>DELETE /attachments/:id</td><td>deleteAttachment — Deletes
|
|
30
|
+
<tr><td>POST /attachments</td><td>uploadAttachment — Uploads one file. Requires a JWT and an <code>attachmentPolicy</code> that allows <code>create</code>.</td></tr>
|
|
31
|
+
<tr><td>GET /attachments/:id</td><td>downloadAttachment — Downloads a file. JWT optional; the policy must allow <code>read</code>.</td></tr>
|
|
32
|
+
<tr><td>DELETE /attachments/:id</td><td>deleteAttachment — Deletes a file. Requires a JWT and a policy that allows <code>delete</code>.</td></tr>
|
|
33
33
|
</table>
|
|
34
34
|
|
|
35
|
+
## 🔒 Attachment access
|
|
36
|
+
|
|
37
|
+
The attachment routes are denied unless `SharedConfig.attachmentPolicy` returns exactly `true`. The
|
|
38
|
+
policy is called with `{ operation, id, user }` (`operation` is `create`, `read` or `delete`) before
|
|
39
|
+
storage is read or changed. A valid JWT is not ownership: resolve owner, tenant and roles from data
|
|
40
|
+
the server trusts, and never return an unconditional `true` for private files.
|
|
41
|
+
|
|
42
|
+
- **Linking a file to its uploader.** For `create`, the controller generates the id first and passes
|
|
43
|
+
it to the policy before reading the body. Record `user` against that `id` there and return `true`;
|
|
44
|
+
later `read` and `delete` checks look the id up. A rejected upload can leave a record for an id
|
|
45
|
+
with no file.
|
|
46
|
+
- **The stock Angular UI sends no token for files.** The PDF and attachment displays open files
|
|
47
|
+
with `FileService.download` (`window.open`), and the image, video and `smartFileUrl` displays load
|
|
48
|
+
`FileService.getUrl` as plain URLs, so these are anonymous reads. With the stock UI, allow
|
|
49
|
+
anonymous `read` for files meant to be viewable.
|
|
50
|
+
- **Status codes.** A refusal is a `DomainForbiddenError`; it becomes `403` only when
|
|
51
|
+
`AppExceptionFilter` from `@smartsoft001/nestjs` is registered (otherwise `500`). A missing token
|
|
52
|
+
on upload or delete is `401`.
|
|
53
|
+
- **Limits.** One file of at most `attachmentMaxBytes` (default 10 MiB) and at most
|
|
54
|
+
`attachmentMaxFields` extra form fields (default `0`). The file is buffered before storage;
|
|
55
|
+
oversized, multi-file or extra-field requests answer `413` and nothing is stored. The upload
|
|
56
|
+
answers only after the storage write finished.
|
|
57
|
+
|
|
58
|
+
### Migration
|
|
59
|
+
|
|
60
|
+
The attachment routes used to have no guard. After upgrading: configure `attachmentPolicy`, register
|
|
61
|
+
`AppExceptionFilter`, send a Bearer token on uploads and deletes, and raise `attachmentMaxBytes` or
|
|
62
|
+
`attachmentMaxFields` if clients send larger files or extra form fields. Existing files have no
|
|
63
|
+
ownership records; the policy decides how to treat them.
|
|
64
|
+
|
|
35
65
|
## 🛠️ Gateways & Methods
|
|
36
66
|
|
|
37
67
|
### CrudGateway
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smartsoft001/crud-shell-nestjs",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.186.0",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"typings": "./src/index.d.ts",
|
|
@@ -34,14 +34,14 @@
|
|
|
34
34
|
"@nestjs/jwt": "^11.0.0",
|
|
35
35
|
"@nestjs/passport": "^11.0.5",
|
|
36
36
|
"@nestjs/websockets": "^11.2.1",
|
|
37
|
-
"@smartsoft001/crud-domain": "2.
|
|
38
|
-
"@smartsoft001/crud-shell-app-services": "2.
|
|
39
|
-
"@smartsoft001/crud-shell-dtos": "2.
|
|
40
|
-
"@smartsoft001/domain-core": "2.
|
|
41
|
-
"@smartsoft001/mongo": "2.
|
|
42
|
-
"@smartsoft001/nestjs": "2.
|
|
43
|
-
"@smartsoft001/users": "2.
|
|
44
|
-
"@smartsoft001/utils": "2.
|
|
37
|
+
"@smartsoft001/crud-domain": "2.186.0",
|
|
38
|
+
"@smartsoft001/crud-shell-app-services": "2.186.0",
|
|
39
|
+
"@smartsoft001/crud-shell-dtos": "2.186.0",
|
|
40
|
+
"@smartsoft001/domain-core": "2.186.0",
|
|
41
|
+
"@smartsoft001/mongo": "2.186.0",
|
|
42
|
+
"@smartsoft001/nestjs": "2.186.0",
|
|
43
|
+
"@smartsoft001/users": "2.186.0",
|
|
44
|
+
"@smartsoft001/utils": "2.186.0",
|
|
45
45
|
"express": "^5.2.1",
|
|
46
46
|
"rxjs": "^7.8.1",
|
|
47
47
|
"socket.io": "^4.8.1"
|
|
@@ -3,7 +3,6 @@ import type { CreateManyMode } from '@smartsoft001/crud-domain';
|
|
|
3
3
|
import { CrudService } from '@smartsoft001/crud-shell-app-services';
|
|
4
4
|
import { IEntity } from '@smartsoft001/domain-core';
|
|
5
5
|
import type { IUser } from '@smartsoft001/users';
|
|
6
|
-
import { Writable } from 'stream';
|
|
7
6
|
import { IQ2mResult } from './query-to-mongo';
|
|
8
7
|
export declare class CrudController<T extends IEntity<string>> {
|
|
9
8
|
protected readonly service: CrudService<T>;
|
|
@@ -24,9 +23,9 @@ export declare class CrudController<T extends IEntity<string>> {
|
|
|
24
23
|
delete(params: {
|
|
25
24
|
id: string;
|
|
26
25
|
}, user: IUser): Promise<void>;
|
|
27
|
-
uploadAttachment(request: Request, response: Response):
|
|
28
|
-
downloadAttachment(id: string, request: Request, response: Response): Promise<void>;
|
|
29
|
-
deleteAttachment(id: string): Promise<void>;
|
|
26
|
+
uploadAttachment(request: Request, response: Response, user?: IUser): Promise<void>;
|
|
27
|
+
downloadAttachment(id: string, request: Request, response: Response, user?: IUser): Promise<void>;
|
|
28
|
+
deleteAttachment(id: string, user?: IUser): Promise<void>;
|
|
30
29
|
protected getQueryObject(queryObject: Record<string, unknown>): IQ2mResult;
|
|
31
30
|
protected parseToXlsx(data: T[]): any;
|
|
32
31
|
protected parseToCsv(data: T[]): string;
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.CrudController = void 0;
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
6
6
|
const common_1 = require("@nestjs/common");
|
|
7
|
-
const busboy_1 = tslib_1.__importDefault(require("busboy"));
|
|
8
7
|
const json2csv_1 = require("json2csv");
|
|
9
8
|
const _ = tslib_1.__importStar(require("lodash"));
|
|
10
9
|
const moment_timezone_1 = tslib_1.__importDefault(require("moment-timezone"));
|
|
@@ -14,6 +13,7 @@ const nestjs_1 = require("@smartsoft001/nestjs");
|
|
|
14
13
|
const utils_1 = require("@smartsoft001/utils");
|
|
15
14
|
const stream_1 = require("stream");
|
|
16
15
|
const query_to_mongo_1 = require("./query-to-mongo");
|
|
16
|
+
const read_attachment_1 = require("./read-attachment");
|
|
17
17
|
const auth_guard_1 = require("../../guards/auth/auth.guard");
|
|
18
18
|
let CrudController = CrudController_1 = class CrudController {
|
|
19
19
|
service;
|
|
@@ -77,45 +77,27 @@ let CrudController = CrudController_1 = class CrudController {
|
|
|
77
77
|
async delete(params, user) {
|
|
78
78
|
await this.service.delete(params.id, user);
|
|
79
79
|
}
|
|
80
|
-
uploadAttachment(request, response) {
|
|
81
|
-
const parser = (0, busboy_1.default)({
|
|
82
|
-
headers: request.headers,
|
|
83
|
-
});
|
|
80
|
+
async uploadAttachment(request, response, user) {
|
|
84
81
|
const id = utils_1.GuidService.create();
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
mimeType = info.mimeType;
|
|
94
|
-
this.service.uploadAttachment({
|
|
95
|
-
id,
|
|
96
|
-
stream: readable,
|
|
97
|
-
fileName: info.filename,
|
|
98
|
-
encoding: info.encoding,
|
|
99
|
-
mimeType: info.mimeType,
|
|
100
|
-
});
|
|
101
|
-
file.on('data', (data) => {
|
|
102
|
-
readable.push(data);
|
|
103
|
-
});
|
|
82
|
+
await this.service.authorizeAttachment('create', id, user);
|
|
83
|
+
const file = await (0, read_attachment_1.readAttachment)(request, this.service.getAttachmentLimits());
|
|
84
|
+
await this.service.uploadAttachment({
|
|
85
|
+
id,
|
|
86
|
+
stream: stream_1.Readable.from(file.data),
|
|
87
|
+
fileName: file.fileName,
|
|
88
|
+
encoding: file.encoding,
|
|
89
|
+
mimeType: file.mimeType,
|
|
104
90
|
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
contentType: mimeType,
|
|
112
|
-
length: readable.readableLength,
|
|
113
|
-
});
|
|
114
|
-
response.end();
|
|
91
|
+
response.set('Location', CrudController_1.getLink(request) + '/' + id);
|
|
92
|
+
response.json({
|
|
93
|
+
id,
|
|
94
|
+
fileName: file.fileName,
|
|
95
|
+
contentType: file.mimeType,
|
|
96
|
+
length: file.data.length,
|
|
115
97
|
});
|
|
116
|
-
return request.pipe(parser);
|
|
117
98
|
}
|
|
118
|
-
async downloadAttachment(id, request, response) {
|
|
99
|
+
async downloadAttachment(id, request, response, user) {
|
|
100
|
+
await this.service.authorizeAttachment('read', id, user);
|
|
119
101
|
const fileInfo = await this.service.getAttachmentInfo(id);
|
|
120
102
|
if (!fileInfo) {
|
|
121
103
|
throw new common_1.NotFoundException('Invalid id');
|
|
@@ -157,7 +139,8 @@ let CrudController = CrudController_1 = class CrudController {
|
|
|
157
139
|
readstream.pipe(response);
|
|
158
140
|
}
|
|
159
141
|
}
|
|
160
|
-
async deleteAttachment(id) {
|
|
142
|
+
async deleteAttachment(id, user) {
|
|
143
|
+
await this.service.authorizeAttachment('delete', id, user);
|
|
161
144
|
await this.service.deleteAttachment(id);
|
|
162
145
|
}
|
|
163
146
|
getQueryObject(queryObject) {
|
|
@@ -304,27 +287,33 @@ tslib_1.__decorate([
|
|
|
304
287
|
tslib_1.__metadata("design:returntype", Promise)
|
|
305
288
|
], CrudController.prototype, "delete", null);
|
|
306
289
|
tslib_1.__decorate([
|
|
290
|
+
(0, common_1.UseGuards)(auth_guard_1.AuthJwtGuard),
|
|
307
291
|
(0, common_1.Post)('attachments'),
|
|
308
292
|
tslib_1.__param(0, (0, common_1.Req)()),
|
|
309
293
|
tslib_1.__param(1, (0, common_1.Res)()),
|
|
294
|
+
tslib_1.__param(2, (0, nestjs_1.User)()),
|
|
310
295
|
tslib_1.__metadata("design:type", Function),
|
|
311
|
-
tslib_1.__metadata("design:paramtypes", [Object, Object]),
|
|
312
|
-
tslib_1.__metadata("design:returntype",
|
|
296
|
+
tslib_1.__metadata("design:paramtypes", [Object, Object, Object]),
|
|
297
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
313
298
|
], CrudController.prototype, "uploadAttachment", null);
|
|
314
299
|
tslib_1.__decorate([
|
|
300
|
+
(0, common_1.UseGuards)(auth_guard_1.AuthOrAnonymousJwtGuard),
|
|
315
301
|
(0, common_1.Get)('attachments/:id'),
|
|
316
302
|
tslib_1.__param(0, (0, common_1.Param)('id')),
|
|
317
303
|
tslib_1.__param(1, (0, common_1.Req)()),
|
|
318
304
|
tslib_1.__param(2, (0, common_1.Res)()),
|
|
305
|
+
tslib_1.__param(3, (0, nestjs_1.User)()),
|
|
319
306
|
tslib_1.__metadata("design:type", Function),
|
|
320
|
-
tslib_1.__metadata("design:paramtypes", [String, Object, Object]),
|
|
307
|
+
tslib_1.__metadata("design:paramtypes", [String, Object, Object, Object]),
|
|
321
308
|
tslib_1.__metadata("design:returntype", Promise)
|
|
322
309
|
], CrudController.prototype, "downloadAttachment", null);
|
|
323
310
|
tslib_1.__decorate([
|
|
311
|
+
(0, common_1.UseGuards)(auth_guard_1.AuthJwtGuard),
|
|
324
312
|
(0, common_1.Delete)('attachments/:id'),
|
|
325
313
|
tslib_1.__param(0, (0, common_1.Param)('id')),
|
|
314
|
+
tslib_1.__param(1, (0, nestjs_1.User)()),
|
|
326
315
|
tslib_1.__metadata("design:type", Function),
|
|
327
|
-
tslib_1.__metadata("design:paramtypes", [String]),
|
|
316
|
+
tslib_1.__metadata("design:paramtypes", [String, Object]),
|
|
328
317
|
tslib_1.__metadata("design:returntype", Promise)
|
|
329
318
|
], CrudController.prototype, "deleteAttachment", null);
|
|
330
319
|
exports.CrudController = CrudController = CrudController_1 = tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.controller.js","sourceRoot":"","sources":["../../../../../../../../../packages/crud/shell/nestjs/src/lib/controllers/crud/crud.controller.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"crud.controller.js","sourceRoot":"","sources":["../../../../../../../../../packages/crud/shell/nestjs/src/lib/controllers/crud/crud.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Request } from 'express';
|
|
2
|
+
/** Buffer a single bounded file so rejected multipart requests never reach storage. */
|
|
3
|
+
export declare function readAttachment(request: Request, limits: {
|
|
4
|
+
maxBytes: number;
|
|
5
|
+
maxFields: number;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
data: Buffer;
|
|
8
|
+
fileName: string;
|
|
9
|
+
mimeType: string;
|
|
10
|
+
encoding: string;
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readAttachment = readAttachment;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const busboy_1 = tslib_1.__importDefault(require("busboy"));
|
|
7
|
+
/** Buffer a single bounded file so rejected multipart requests never reach storage. */
|
|
8
|
+
function readAttachment(request, limits) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
let parser;
|
|
11
|
+
try {
|
|
12
|
+
parser = (0, busboy_1.default)({
|
|
13
|
+
headers: request.headers,
|
|
14
|
+
limits: {
|
|
15
|
+
fileSize: limits.maxBytes + 1,
|
|
16
|
+
files: 1,
|
|
17
|
+
fields: limits.maxFields,
|
|
18
|
+
// busboy emits partsLimit on reaching the count, so allow one spare part:
|
|
19
|
+
// the file plus the fields stay under it and anything more is rejected.
|
|
20
|
+
parts: 2 + limits.maxFields,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
reject(new common_1.BadRequestException('Invalid multipart upload'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const chunks = [];
|
|
29
|
+
let info;
|
|
30
|
+
let settled = false;
|
|
31
|
+
const aborted = () => fail(new common_1.BadRequestException('Upload interrupted'));
|
|
32
|
+
const cleanup = () => {
|
|
33
|
+
request.off('aborted', aborted);
|
|
34
|
+
request.off('error', fail);
|
|
35
|
+
};
|
|
36
|
+
const fail = (error) => {
|
|
37
|
+
if (settled)
|
|
38
|
+
return;
|
|
39
|
+
settled = true;
|
|
40
|
+
cleanup();
|
|
41
|
+
request.unpipe(parser);
|
|
42
|
+
request.resume();
|
|
43
|
+
// Busboy can emit its file event while parsing; let that callback unwind.
|
|
44
|
+
queueMicrotask(() => parser.destroy());
|
|
45
|
+
reject(error);
|
|
46
|
+
};
|
|
47
|
+
const limit = () => fail(new common_1.PayloadTooLargeException(`One file up to ${limits.maxBytes} bytes and ${limits.maxFields} form fields are allowed`));
|
|
48
|
+
parser.on('file', (_field, file, metadata) => {
|
|
49
|
+
info = metadata;
|
|
50
|
+
file.on('error', fail);
|
|
51
|
+
file.on('limit', limit);
|
|
52
|
+
file.on('data', (chunk) => {
|
|
53
|
+
if (!settled)
|
|
54
|
+
chunks.push(chunk);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
parser.on('filesLimit', limit);
|
|
58
|
+
parser.on('fieldsLimit', limit);
|
|
59
|
+
parser.on('partsLimit', limit);
|
|
60
|
+
parser.on('error', () => fail(new common_1.BadRequestException('Invalid multipart upload')));
|
|
61
|
+
parser.on('finish', () => {
|
|
62
|
+
if (settled)
|
|
63
|
+
return;
|
|
64
|
+
if (!info)
|
|
65
|
+
return fail(new common_1.BadRequestException('A file is required'));
|
|
66
|
+
settled = true;
|
|
67
|
+
cleanup();
|
|
68
|
+
resolve({
|
|
69
|
+
data: Buffer.concat(chunks),
|
|
70
|
+
fileName: info.filename,
|
|
71
|
+
mimeType: info.mimeType,
|
|
72
|
+
encoding: info.encoding,
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
request.once('aborted', aborted);
|
|
76
|
+
request.once('error', fail);
|
|
77
|
+
request.pipe(parser);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=read-attachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-attachment.js","sourceRoot":"","sources":["../../../../../../../../../packages/crud/shell/nestjs/src/lib/controllers/crud/read-attachment.ts"],"names":[],"mappings":"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"}
|