alado 3.3.0 → 3.5.4
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 +17 -6
- package/dist/alado-server/alado-server.js +4 -1
- package/dist/alado-server/alado-server.js.map +1 -1
- package/dist/constants/http-server.d.ts +1 -0
- package/dist/constants/http-server.js +2 -1
- package/dist/constants/http-server.js.map +1 -1
- package/dist/dto/property-definition.d.ts +1 -0
- package/dist/helpers/parser/access-control-checker.js +11 -3
- package/dist/helpers/parser/access-control-checker.js.map +1 -1
- package/dist/helpers/parser/body-parser.d.ts +15 -1
- package/dist/helpers/parser/body-parser.js +74 -19
- package/dist/helpers/parser/body-parser.js.map +1 -1
- package/dist/helpers/parser/xml-parser.js +25 -5
- package/dist/helpers/parser/xml-parser.js.map +1 -1
- package/dist/helpers/validate/alado-options/validate-alado-options.js +15 -0
- package/dist/helpers/validate/alado-options/validate-alado-options.js.map +1 -1
- package/dist/helpers/validate/built-in/validator.js +4 -1
- package/dist/helpers/validate/built-in/validator.js.map +1 -1
- package/dist/helpers/validate/context/file-signature.d.ts +5 -0
- package/dist/helpers/validate/context/file-signature.js +57 -0
- package/dist/helpers/validate/context/file-signature.js.map +1 -0
- package/dist/helpers/validate/context/validate-context.js +4 -1
- package/dist/helpers/validate/context/validate-context.js.map +1 -1
- package/dist/helpers/validate/context/validate-request-files.js +6 -1
- package/dist/helpers/validate/context/validate-request-files.js.map +1 -1
- package/dist/options/alado-server-options.d.ts +2 -0
- package/dist/options/request-processor-options.d.ts +1 -0
- package/dist/options/router-options.d.ts +1 -0
- package/dist/request-processor/request-processor.d.ts +13 -4
- package/dist/request-processor/request-processor.js +166 -60
- package/dist/request-processor/request-processor.js.map +1 -1
- package/dist/router/router.d.ts +3 -0
- package/dist/router/router.js +12 -5
- package/dist/router/router.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -882,6 +882,8 @@ export class UserFilesDto {
|
|
|
882
882
|
}
|
|
883
883
|
```
|
|
884
884
|
|
|
885
|
+
The MIME type of an upload is whatever the client declares, so for types with a fixed signature — `image/png`, `image/jpeg`, `image/gif`, `image/webp`, `application/pdf` and `application/zip` — the first bytes of the file must match it too, or the request gets `mimetypeError`. Types without a signature (plain text, CSV, JSON, SVG...) are only checked against `mimetypes`. Set `verifyContent: false` on a field to skip the content check. Never serve an uploaded file back with the client's MIME type without your own check: an "image" can be an HTML page.
|
|
886
|
+
|
|
885
887
|
---
|
|
886
888
|
|
|
887
889
|
### Combining decorators
|
|
@@ -1017,6 +1019,8 @@ export type AccessControlConfig<T> = {
|
|
|
1017
1019
|
|
|
1018
1020
|
Either provide `compareWithProperty` to compare two request values, or `expectedValue` to check against a fixed value or `accessControlHandler` to implement complex logic.
|
|
1019
1021
|
|
|
1022
|
+
With `compareWithProperty`, access is denied when either value is missing (`undefined` or `null`), before or after `transformInputProperty`: two missing values never count as a match.
|
|
1023
|
+
|
|
1020
1024
|
### Usage Example
|
|
1021
1025
|
|
|
1022
1026
|
```typescript
|
|
@@ -1123,6 +1127,8 @@ public getAvatar(req: Request) {
|
|
|
1123
1127
|
}
|
|
1124
1128
|
```
|
|
1125
1129
|
|
|
1130
|
+
If a file stream cannot be opened, the response is `404 Not Found` for a missing file and `500` for any other error. A stream that fails after the response has started closes that connection, and a client that disconnects mid-download closes the stream.
|
|
1131
|
+
|
|
1126
1132
|
### `xml-request-body`
|
|
1127
1133
|
|
|
1128
1134
|
When a request arrives with a `Content-Type` of `text/xml` or `application/xml`, Alado automatically parses the raw body into a plain JavaScript object before your handler runs — no configuration needed, and no external XML library involved. `req.body` behaves the same way it does for JSON requests.
|
|
@@ -1165,6 +1171,8 @@ const app = initializeApplication({
|
|
|
1165
1171
|
|
|
1166
1172
|
Open `http://localhost:3000/` to view the Swagger UI.
|
|
1167
1173
|
|
|
1174
|
+
The OpenAPI document is served at `/swagger.json`. Swagger UI's own files are served only under `route` (for example `/docs/swagger-ui.css` when `route` is `/docs`), so they never take over paths of your API. Only web assets from `swagger-ui-dist` are served (no `package.json`, `README` or license files).
|
|
1175
|
+
|
|
1168
1176
|
Documentation is built from:
|
|
1169
1177
|
|
|
1170
1178
|
- `@get`, `@post`, etc. → endpoint paths and methods
|
|
@@ -1186,12 +1194,15 @@ Documentation is built from:
|
|
|
1186
1194
|
|
|
1187
1195
|
### `AladoServerOptions`
|
|
1188
1196
|
|
|
1189
|
-
| Property
|
|
1190
|
-
|
|
|
1191
|
-
| `port`
|
|
1192
|
-
| `appId`
|
|
1193
|
-
| `logger`
|
|
1194
|
-
| `ssl`
|
|
1197
|
+
| Property | Type | Default | Description |
|
|
1198
|
+
| --------------------- | ---------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1199
|
+
| `port` | `number` | `3000` | HTTP port |
|
|
1200
|
+
| `appId` | `string` | — | App identifier for multi-app setups |
|
|
1201
|
+
| `logger` | `AladoServerLogger` | — | Custom logger |
|
|
1202
|
+
| `ssl` | `SecureContextOptions` | — | TLS/HTTPS options |
|
|
1203
|
+
| `maxBodySizeBytes` | `number` | `1048576` (1 MB) | Larger request bodies get `413 Content Too Large` and the connection is closed. `0` removes the limit |
|
|
1204
|
+
| `trustProxy` | `boolean \| number` | `false` | Source of `request.ip`. `false`: the socket address (`X-Forwarded-For` is ignored, since clients can set it). `true`: the left-most `X-Forwarded-For` address. A number: how many proxies in front of the app to trust, e.g. `1` behind a single load balancer |
|
|
1205
|
+
| `caseSensitiveRoutes` | `boolean` | `true` | Whether `/Admin` and `/admin` are different paths. Case-insensitive matching lets requests slip past a reverse proxy that blocks paths by exact match, so turn it off only if clients rely on it. A trailing slash and repeated slashes are always ignored |
|
|
1195
1206
|
|
|
1196
1207
|
### `Request`
|
|
1197
1208
|
|
|
@@ -40,6 +40,7 @@ class AladoServer {
|
|
|
40
40
|
},
|
|
41
41
|
openApiDoc: options.openApiDoc,
|
|
42
42
|
logger: this.logger,
|
|
43
|
+
caseSensitiveRoutes: options.caseSensitiveRoutes ?? true,
|
|
43
44
|
}, this.openApiDocObject);
|
|
44
45
|
this.port = options.port;
|
|
45
46
|
this.host = options.host || _const_1.defaultHost;
|
|
@@ -51,7 +52,9 @@ class AladoServer {
|
|
|
51
52
|
enableCors: options.cors?.enable,
|
|
52
53
|
logger: this.logger,
|
|
53
54
|
verbose: options.verbose,
|
|
54
|
-
|
|
55
|
+
// 0 explicitly disables the limit
|
|
56
|
+
maxBodySizeBytes: options.maxBodySizeBytes ?? _const_1.defaultMaxBodySizeBytes,
|
|
57
|
+
trustProxy: options.trustProxy ?? false,
|
|
55
58
|
}, {
|
|
56
59
|
...options.ssl,
|
|
57
60
|
...options.serverOptions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alado-server.js","sourceRoot":"","sources":["../../src/alado-server/alado-server.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"alado-server.js","sourceRoot":"","sources":["../../src/alado-server/alado-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defaultBacklog = exports.defaultHost = void 0;
|
|
3
|
+
exports.defaultMaxBodySizeBytes = exports.defaultBacklog = exports.defaultHost = void 0;
|
|
4
4
|
exports.defaultHost = '0.0.0.0';
|
|
5
5
|
exports.defaultBacklog = 2048;
|
|
6
|
+
exports.defaultMaxBodySizeBytes = 1024 * 1024;
|
|
6
7
|
//# sourceMappingURL=http-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/constants/http-server.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAW,SAAS,CAAC;AAChC,QAAA,cAAc,GAAW,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/constants/http-server.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAW,SAAS,CAAC;AAChC,QAAA,cAAc,GAAW,IAAI,CAAC;AAC9B,QAAA,uBAAuB,GAAW,IAAI,GAAG,IAAI,CAAC"}
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.accessControlChecker = accessControlChecker;
|
|
4
4
|
const accessor_1 = require("../accessor");
|
|
5
|
+
const isMissing = (value) => value === undefined || value === null;
|
|
5
6
|
async function accessControlChecker(context, request) {
|
|
6
7
|
const { accessControl } = context;
|
|
7
8
|
let success = true;
|
|
8
9
|
for (const item of accessControl) {
|
|
9
10
|
const { inputProperty, transformInputProperty, statusCode, message, compareWithProperty, expectedValue, accessControlHandler, } = item;
|
|
10
|
-
|
|
11
|
+
const rawValue = (0, accessor_1.getProperty)(request, inputProperty);
|
|
12
|
+
let providedValue = rawValue;
|
|
11
13
|
if (typeof transformInputProperty === 'function') {
|
|
12
14
|
providedValue = await transformInputProperty(providedValue);
|
|
13
15
|
}
|
|
@@ -18,8 +20,14 @@ async function accessControlChecker(context, request) {
|
|
|
18
20
|
return { statusCode, message };
|
|
19
21
|
}
|
|
20
22
|
if (compareWithProperty) {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
+
const compareWithValue = (0, accessor_1.getProperty)(request, compareWithProperty);
|
|
24
|
+
// A missing value never grants access: undefined === undefined would let an anonymous
|
|
25
|
+
// request through, and a transform such as String(v) would turn it into "undefined".
|
|
26
|
+
success =
|
|
27
|
+
!isMissing(rawValue) &&
|
|
28
|
+
!isMissing(providedValue) &&
|
|
29
|
+
!isMissing(compareWithValue) &&
|
|
30
|
+
compareWithValue === providedValue;
|
|
23
31
|
}
|
|
24
32
|
if (!success) {
|
|
25
33
|
return { statusCode, message };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-control-checker.js","sourceRoot":"","sources":["../../../src/helpers/parser/access-control-checker.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"access-control-checker.js","sourceRoot":"","sources":["../../../src/helpers/parser/access-control-checker.ts"],"names":[],"mappings":";;AAKA,oDAoDC;AAxDD,0CAA0C;AAE1C,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAE9E,KAAK,UAAU,oBAAoB,CAAC,OAAqB,EAAE,OAAY;IAC5E,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,IAAI,OAAO,GAAY,IAAI,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,EACJ,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,GAAG,IAAI,CAAC;QAET,MAAM,QAAQ,GAAY,IAAA,sBAAW,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,aAAa,GAAY,QAAQ,CAAC;QAEtC,IAAI,OAAO,sBAAsB,KAAK,UAAU,EAAE,CAAC;YACjD,aAAa,GAAG,MAAM,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,GAAG,aAAa,KAAK,aAAa,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,gBAAgB,GAAY,IAAA,sBAAW,EAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAC5E,sFAAsF;YACtF,qFAAqF;YACrF,OAAO;gBACL,CAAC,SAAS,CAAC,QAAQ,CAAC;oBACpB,CAAC,SAAS,CAAC,aAAa,CAAC;oBACzB,CAAC,SAAS,CAAC,gBAAgB,CAAC;oBAC5B,gBAAgB,KAAK,aAAa,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO,GAAG,MAAM,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
import { IncomingMessage, OutgoingMessage } from 'http';
|
|
2
2
|
export declare function isXmlContentType(contentType: string | undefined): boolean;
|
|
3
|
-
|
|
3
|
+
type MultipartPart = {
|
|
4
|
+
name: string | null;
|
|
5
|
+
value: string | null;
|
|
6
|
+
filename: string | null;
|
|
7
|
+
mimetype: string | null;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Splits one multipart part (the text between two boundaries) into its headers and value,
|
|
11
|
+
* in linear time: headers end at the first blank line, and the value runs up to the
|
|
12
|
+
* "\r\n--" that precedes the next boundary. Header fields are read from the headers only.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseMultipartPart(item: string): MultipartPart | null;
|
|
15
|
+
export declare function multipartBoundary(contentType: string): string | null;
|
|
16
|
+
export declare function bodyParser(req: IncomingMessage, res: OutgoingMessage, limit: number, acceptFiles?: boolean): Promise<any>;
|
|
17
|
+
export {};
|
|
@@ -1,30 +1,78 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isXmlContentType = isXmlContentType;
|
|
4
|
+
exports.parseMultipartPart = parseMultipartPart;
|
|
5
|
+
exports.multipartBoundary = multipartBoundary;
|
|
4
6
|
exports.bodyParser = bodyParser;
|
|
5
7
|
const _const_1 = require("../../constants/index.js");
|
|
6
8
|
const stream_1 = require("stream");
|
|
7
9
|
const xml_parser_1 = require("./xml-parser");
|
|
10
|
+
const file_signature_1 = require("../validate/context/file-signature");
|
|
8
11
|
// "application/xml; charset=utf-8" is still XML, and so are +xml types such as SOAP 1.2's application/soap+xml
|
|
9
12
|
function isXmlContentType(contentType) {
|
|
10
13
|
const mime = (contentType || '').split(';')[0].trim().toLowerCase();
|
|
11
14
|
return mime === _const_1.ContentType.XML || mime === _const_1.ContentType.TEXT_XML || /^application\/[\w.+-]+\+xml$/.test(mime);
|
|
12
15
|
}
|
|
13
|
-
|
|
16
|
+
const partNameRegExp = /(?:^|[;\s])name="([^"]*)"/i;
|
|
17
|
+
const partFilenameRegExp = /(?:^|[;\s])filename="([^"]*)"/i;
|
|
18
|
+
const partContentTypeRegExp = /^content-type:([^\r\n]*)$/im;
|
|
19
|
+
/**
|
|
20
|
+
* Splits one multipart part (the text between two boundaries) into its headers and value,
|
|
21
|
+
* in linear time: headers end at the first blank line, and the value runs up to the
|
|
22
|
+
* "\r\n--" that precedes the next boundary. Header fields are read from the headers only.
|
|
23
|
+
*/
|
|
24
|
+
function parseMultipartPart(item) {
|
|
25
|
+
const headerEnd = item.indexOf('\r\n\r\n');
|
|
26
|
+
if (headerEnd === -1) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const valueStart = headerEnd + 4;
|
|
30
|
+
const valueEnd = item.length - 4;
|
|
31
|
+
const value = valueEnd >= valueStart && item.endsWith('\r\n--') ? item.slice(valueStart, valueEnd) : null;
|
|
32
|
+
const headers = item.slice(0, headerEnd);
|
|
33
|
+
const pick = (regExp) => {
|
|
34
|
+
const match = regExp.exec(headers);
|
|
35
|
+
return match && match[1] ? match[1] : null;
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
name: pick(partNameRegExp),
|
|
39
|
+
value: value || null,
|
|
40
|
+
filename: pick(partFilenameRegExp),
|
|
41
|
+
mimetype: pick(partContentTypeRegExp),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// boundary parameter of a multipart Content-Type, unquoted and without the parameters after it
|
|
45
|
+
function multipartBoundary(contentType) {
|
|
46
|
+
const match = /;\s*boundary=(?:"([^"]+)"|([^;\s]+))/i.exec(contentType || '');
|
|
47
|
+
return match ? match[1] || match[2] : null;
|
|
48
|
+
}
|
|
49
|
+
const contentTooLarge = { statusCode: 413, message: 'Content Too Large' };
|
|
50
|
+
/**
|
|
51
|
+
* Stops buffering an oversized body. The rest of it is not read: the connection is
|
|
52
|
+
* closed once the 413 response is sent, so the client cannot keep streaming into it.
|
|
53
|
+
*/
|
|
54
|
+
function abortOversizedBody(req, res) {
|
|
55
|
+
req.removeAllListeners('data');
|
|
56
|
+
req.removeAllListeners('end');
|
|
57
|
+
if (!res.headersSent) {
|
|
58
|
+
res.setHeader('Connection', 'close');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function collectChunks(req, res, limit, received, reject) {
|
|
14
62
|
return (chunk) => {
|
|
15
63
|
received.bytes += chunk.length;
|
|
16
64
|
if (limit && received.bytes > limit) {
|
|
17
|
-
req
|
|
18
|
-
|
|
19
|
-
reject({
|
|
20
|
-
statusCode: 413,
|
|
21
|
-
message: 'Content Too Large',
|
|
22
|
-
});
|
|
65
|
+
abortOversizedBody(req, res);
|
|
66
|
+
reject(contentTooLarge);
|
|
23
67
|
return;
|
|
24
68
|
}
|
|
25
69
|
received.chunks.push(chunk);
|
|
26
70
|
};
|
|
27
71
|
}
|
|
72
|
+
// a broken or aborted upload ends the request instead of leaving it pending
|
|
73
|
+
function onRequestError(reject) {
|
|
74
|
+
return () => reject({ statusCode: 400, message: 'Bad Request' });
|
|
75
|
+
}
|
|
28
76
|
function concatChunks(received, encoding) {
|
|
29
77
|
// small bodies usually arrive in one chunk: decode it without copying
|
|
30
78
|
if (received.chunks.length === 1) {
|
|
@@ -32,7 +80,7 @@ function concatChunks(received, encoding) {
|
|
|
32
80
|
}
|
|
33
81
|
return Buffer.concat(received.chunks, received.bytes).toString(encoding);
|
|
34
82
|
}
|
|
35
|
-
async function bodyParser(req, res, limit) {
|
|
83
|
+
async function bodyParser(req, res, limit, acceptFiles = true) {
|
|
36
84
|
const contentType = req.headers['content-type'];
|
|
37
85
|
const result = {
|
|
38
86
|
body: {},
|
|
@@ -41,11 +89,17 @@ async function bodyParser(req, res, limit) {
|
|
|
41
89
|
};
|
|
42
90
|
let body = '';
|
|
43
91
|
const received = { chunks: [], bytes: 0 };
|
|
92
|
+
// a declared length above the limit is refused before anything is read
|
|
93
|
+
const declaredLength = Number(req.headers['content-length']);
|
|
94
|
+
if (limit && declaredLength > limit) {
|
|
95
|
+
abortOversizedBody(req, res);
|
|
96
|
+
throw contentTooLarge;
|
|
97
|
+
}
|
|
44
98
|
if (contentType?.startsWith(_const_1.ContentType.FORM_DATA)) {
|
|
45
|
-
const
|
|
46
|
-
const boundary = matchingArray && matchingArray[1];
|
|
99
|
+
const boundary = multipartBoundary(req.headers['content-type']);
|
|
47
100
|
await new Promise((resolve, reject) => {
|
|
48
|
-
req.on('data', collectChunks(req, limit, received, reject));
|
|
101
|
+
req.on('data', collectChunks(req, res, limit, received, reject));
|
|
102
|
+
req.once('error', onRequestError(reject));
|
|
49
103
|
req.on('end', () => {
|
|
50
104
|
// multipart is parsed as a binary string: one char per byte, file bytes kept intact
|
|
51
105
|
body = concatChunks(received, 'binary');
|
|
@@ -56,12 +110,10 @@ async function bodyParser(req, res, limit) {
|
|
|
56
110
|
};
|
|
57
111
|
const data = boundary ? body.split(boundary) : [body];
|
|
58
112
|
for (const item of data) {
|
|
59
|
-
const element =
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
element[key] = regExpMatchArray && regExpMatchArray[1] && regExpMatchArray[1];
|
|
64
|
-
});
|
|
113
|
+
const element = parseMultipartPart(item);
|
|
114
|
+
if (!element) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
65
117
|
const { value, filename, mimetype } = element;
|
|
66
118
|
// the body is parsed as a binary string (one char per byte) to keep file bytes intact;
|
|
67
119
|
// text (field names and values) is UTF-8 and has to be decoded back
|
|
@@ -70,10 +122,11 @@ async function bodyParser(req, res, limit) {
|
|
|
70
122
|
continue;
|
|
71
123
|
}
|
|
72
124
|
if (filename) {
|
|
73
|
-
if (!mimetype) {
|
|
125
|
+
if (!mimetype || !acceptFiles) {
|
|
74
126
|
continue;
|
|
75
127
|
}
|
|
76
128
|
const file = { name, mimetype };
|
|
129
|
+
file.head = Buffer.from(value.slice(0, file_signature_1.FILE_SIGNATURE_BYTES), 'binary');
|
|
77
130
|
file.stream = new stream_1.Readable();
|
|
78
131
|
file.stream.push(Buffer.from(value, 'binary'));
|
|
79
132
|
file.stream.push(null);
|
|
@@ -94,6 +147,7 @@ async function bodyParser(req, res, limit) {
|
|
|
94
147
|
size: stream._readableState.length,
|
|
95
148
|
mimetype: mimetype.replace(_const_1.spaceRegExp, ''),
|
|
96
149
|
};
|
|
150
|
+
file_signature_1.uploadedFileHeads.set(result.files[key], file.head);
|
|
97
151
|
});
|
|
98
152
|
resolve();
|
|
99
153
|
});
|
|
@@ -101,7 +155,8 @@ async function bodyParser(req, res, limit) {
|
|
|
101
155
|
}
|
|
102
156
|
else {
|
|
103
157
|
await new Promise((resolve, reject) => {
|
|
104
|
-
req.on('data', collectChunks(req, limit, received, reject));
|
|
158
|
+
req.on('data', collectChunks(req, res, limit, received, reject));
|
|
159
|
+
req.once('error', onRequestError(reject));
|
|
105
160
|
req.on('end', () => {
|
|
106
161
|
body = concatChunks(received, 'utf8');
|
|
107
162
|
result.rawBody = body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body-parser.js","sourceRoot":"","sources":["../../../src/helpers/parser/body-parser.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"body-parser.js","sourceRoot":"","sources":["../../../src/helpers/parser/body-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,29 @@ const unsafeKeys = new Set([
|
|
|
8
8
|
'constructor',
|
|
9
9
|
'prototype',
|
|
10
10
|
]);
|
|
11
|
+
function removeSections(input, open, close, keepContent) {
|
|
12
|
+
let output = '';
|
|
13
|
+
let from = 0;
|
|
14
|
+
let start = input.indexOf(open);
|
|
15
|
+
while (start !== -1) {
|
|
16
|
+
const end = input.indexOf(close, start + open.length);
|
|
17
|
+
if (end === -1) {
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
output += input.slice(from, start);
|
|
21
|
+
if (keepContent) {
|
|
22
|
+
output += input.slice(start + open.length, end);
|
|
23
|
+
}
|
|
24
|
+
from = end + close.length;
|
|
25
|
+
start = input.indexOf(open, from);
|
|
26
|
+
}
|
|
27
|
+
return output + input.slice(from);
|
|
28
|
+
}
|
|
11
29
|
function xmlParser(xmlInput) {
|
|
12
30
|
let xml = xmlInput;
|
|
13
31
|
let pos = 0;
|
|
14
32
|
xml = xml.replace(/<\?xml[^?]*\?>/g, '');
|
|
15
|
-
xml = xml
|
|
33
|
+
xml = removeSections(xml, '<!--', '-->', false);
|
|
16
34
|
xml = xml.trim();
|
|
17
35
|
if (!xml) {
|
|
18
36
|
return {};
|
|
@@ -38,8 +56,7 @@ function xmlParser(xmlInput) {
|
|
|
38
56
|
return attrs;
|
|
39
57
|
}
|
|
40
58
|
function decodeEntities(str) {
|
|
41
|
-
return str
|
|
42
|
-
.replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g, '$1')
|
|
59
|
+
return removeSections(str, '<![CDATA[', ']]>', true)
|
|
43
60
|
.replace(/</g, '<')
|
|
44
61
|
.replace(/>/g, '>')
|
|
45
62
|
.replace(/"/g, '"')
|
|
@@ -49,7 +66,7 @@ function xmlParser(xmlInput) {
|
|
|
49
66
|
function resolveScope(rawAttrs, parentScope) {
|
|
50
67
|
const scope = {
|
|
51
68
|
defaultUri: parentScope.defaultUri,
|
|
52
|
-
prefixes:
|
|
69
|
+
prefixes: parentScope.prefixes,
|
|
53
70
|
};
|
|
54
71
|
const dataAttrs = {};
|
|
55
72
|
for (const [key, value,] of Object.entries(rawAttrs)) {
|
|
@@ -58,6 +75,9 @@ function xmlParser(xmlInput) {
|
|
|
58
75
|
}
|
|
59
76
|
else if (key.startsWith('xmlns:')) {
|
|
60
77
|
const prefix = key.slice('xmlns:'.length);
|
|
78
|
+
if (scope.prefixes === parentScope.prefixes) {
|
|
79
|
+
scope.prefixes = Object.create(parentScope.prefixes);
|
|
80
|
+
}
|
|
61
81
|
scope.prefixes[prefix] = value;
|
|
62
82
|
}
|
|
63
83
|
else {
|
|
@@ -195,7 +215,7 @@ function xmlParser(xmlInput) {
|
|
|
195
215
|
leaf,
|
|
196
216
|
];
|
|
197
217
|
}
|
|
198
|
-
const rootScope = { defaultUri: null, prefixes:
|
|
218
|
+
const rootScope = { defaultUri: null, prefixes: Object.create(null) };
|
|
199
219
|
const root = {};
|
|
200
220
|
const rootElement = parseElement(rootScope);
|
|
201
221
|
if (rootElement) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml-parser.js","sourceRoot":"","sources":["../../../src/helpers/parser/xml-parser.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"xml-parser.js","sourceRoot":"","sources":["../../../src/helpers/parser/xml-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,6 +91,19 @@ function validateMaxBodySize(options) {
|
|
|
91
91
|
throw new Error('AladoServerOptions.maxBodySizeBytes should be a positive number');
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
+
function validateTrustProxy(options) {
|
|
95
|
+
const { trustProxy } = options;
|
|
96
|
+
if (trustProxy !== undefined &&
|
|
97
|
+
typeof trustProxy !== 'boolean' &&
|
|
98
|
+
!(typeof trustProxy === 'number' && Number.isInteger(trustProxy) && trustProxy >= 0)) {
|
|
99
|
+
throw new Error('AladoServerOptions.trustProxy should be a boolean or a non-negative integer');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function validateCaseSensitiveRoutes(options) {
|
|
103
|
+
if (options.caseSensitiveRoutes !== undefined && typeof options.caseSensitiveRoutes !== 'boolean') {
|
|
104
|
+
throw new Error('AladoServerOptions.caseSensitiveRoutes should be a boolean');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
94
107
|
function validateAladoOptions(options) {
|
|
95
108
|
const { port, cors, openApiDoc, logger, verbose, maxBodySizeBytes } = options;
|
|
96
109
|
validatePort(port);
|
|
@@ -99,5 +112,7 @@ function validateAladoOptions(options) {
|
|
|
99
112
|
validateLogger(logger);
|
|
100
113
|
validateVerbose(options);
|
|
101
114
|
validateMaxBodySize(options);
|
|
115
|
+
validateTrustProxy(options);
|
|
116
|
+
validateCaseSensitiveRoutes(options);
|
|
102
117
|
}
|
|
103
118
|
//# sourceMappingURL=validate-alado-options.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-alado-options.js","sourceRoot":"","sources":["../../../../src/helpers/validate/alado-options/validate-alado-options.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"validate-alado-options.js","sourceRoot":"","sources":["../../../../src/helpers/validate/alado-options/validate-alado-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,8 @@ function every(results) {
|
|
|
16
16
|
}
|
|
17
17
|
return results.every(Boolean);
|
|
18
18
|
}
|
|
19
|
+
// domain labels cannot contain dots, so the pattern can only match one way (linear time)
|
|
20
|
+
const emailRegExp = /^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/;
|
|
19
21
|
class Validator {
|
|
20
22
|
rules = [];
|
|
21
23
|
_required = false;
|
|
@@ -62,7 +64,8 @@ class Validator {
|
|
|
62
64
|
return this.add((v) => typeof v === 'string' && pattern.test(v));
|
|
63
65
|
}
|
|
64
66
|
email() {
|
|
65
|
-
|
|
67
|
+
// capped at the RFC 5321 maximum length, so no input can make it expensive
|
|
68
|
+
return this.add((v) => typeof v === 'string' && v.length <= 254 && emailRegExp.test(v));
|
|
66
69
|
}
|
|
67
70
|
uuid() {
|
|
68
71
|
return this.regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/helpers/validate/built-in/validator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/helpers/validate/built-in/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const FILE_SIGNATURE_BYTES: number;
|
|
2
|
+
export declare const uploadedFileHeads: WeakMap<object, Buffer>;
|
|
3
|
+
/** true when the type has no known signature, or the content starts with it */
|
|
4
|
+
export declare function matchesFileSignature(mimetype: string, head: Buffer | undefined): boolean;
|
|
5
|
+
export declare function hasFileSignature(mimetype: string): boolean;
|