expediate 1.0.4 → 1.0.6
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/CHANGELOG.md +138 -0
- package/CONTRIBUTING.md +150 -0
- package/LICENSE +16 -16
- package/README.md +330 -444
- package/dist/apis.d.ts +504 -27
- package/dist/apis.d.ts.map +1 -1
- package/dist/apis.js +618 -107
- package/dist/apis.js.map +1 -1
- package/dist/cjs/index.js +4066 -0
- package/dist/cjs/package.json +1 -0
- package/dist/git.d.ts +72 -9
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +129 -74
- package/dist/git.js.map +1 -1
- package/dist/http-objects.d.ts +26 -0
- package/dist/http-objects.d.ts.map +1 -0
- package/dist/http-objects.js +588 -0
- package/dist/http-objects.js.map +1 -0
- package/dist/index.d.ts +18 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -24
- package/dist/index.js.map +1 -1
- package/dist/jwt-auth.d.ts +158 -57
- package/dist/jwt-auth.d.ts.map +1 -1
- package/dist/jwt-auth.js +447 -207
- package/dist/jwt-auth.js.map +1 -1
- package/dist/middleware.d.ts +476 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +647 -0
- package/dist/middleware.js.map +1 -0
- package/dist/mimetypes.json +882 -1
- package/dist/misc.d.ts +268 -25
- package/dist/misc.d.ts.map +1 -1
- package/dist/misc.js +449 -168
- package/dist/misc.js.map +1 -1
- package/dist/openapi.d.ts +433 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +624 -0
- package/dist/openapi.js.map +1 -0
- package/dist/router-types.d.ts +760 -0
- package/dist/router-types.d.ts.map +1 -0
- package/dist/router-types.js +23 -0
- package/dist/router-types.js.map +1 -0
- package/dist/router.d.ts +37 -201
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +502 -244
- package/dist/router.js.map +1 -1
- package/dist/static.d.ts +3 -3
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +164 -105
- package/dist/static.js.map +1 -1
- package/docs/THREAT_MODEL.md +52 -0
- package/docs/api-builder-v2-design.md +644 -0
- package/docs/api-builder-v3-design.md +397 -0
- package/docs/api-builder.md +454 -0
- package/docs/benchmark.md +27 -0
- package/docs/body-parsing.md +223 -0
- package/docs/errors.md +359 -0
- package/docs/expediate.png +0 -0
- package/docs/git.md +139 -0
- package/docs/jwt-auth.md +251 -0
- package/docs/logo.svg +12 -0
- package/docs/middleware.md +264 -0
- package/docs/openapi.md +180 -0
- package/docs/router.md +356 -0
- package/docs/static.md +128 -0
- package/docs/wiki.json +123 -0
- package/package.json +47 -8
- package/.npmignore +0 -16
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/static.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { RouterRequest, RouterResponse, Middleware } from './router';
|
|
2
|
-
export
|
|
1
|
+
import type { RouterRequest, RouterResponse, Middleware } from './router.js';
|
|
2
|
+
export interface Mime {
|
|
3
3
|
lookup: (path: string, fallback: string | null) => string;
|
|
4
4
|
charsets: (mimeType: string) => string | null;
|
|
5
|
-
}
|
|
5
|
+
}
|
|
6
6
|
export declare const mime: Mime;
|
|
7
7
|
/** HTTP header map used both in options and as argument to res.status(). */
|
|
8
8
|
type HeaderMap = Record<string, string>;
|
package/dist/static.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM7E,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;IAC1D,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC/C;AAcD,eAAO,MAAM,IAAI,EAAE,IAGlB,CAAC;AAQF,4EAA4E;AAC5E,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,UAAU,eAAgB,SAAQ,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACvE,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;CACd;AAwnBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAO,aAAa,EACvB,GAAG,EAAO,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAM,eAAe,GACxB,IAAI,CA2BN;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAmF7E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAqB/E;;;;;;AAED,wBAAoD"}
|
package/dist/static.js
CHANGED
|
@@ -19,33 +19,26 @@
|
|
|
19
19
|
* DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
21
|
'use strict';
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.mime = void 0;
|
|
27
|
-
exports.sendFile = sendFile;
|
|
28
|
-
exports.serveStatic = serveStatic;
|
|
29
|
-
exports.serveFile = serveFile;
|
|
30
|
-
const fs_1 = __importDefault(require("fs"));
|
|
31
|
-
const path_1 = __importDefault(require("path"));
|
|
22
|
+
import fs from 'fs';
|
|
23
|
+
import nodePath from 'path';
|
|
24
|
+
import mimetypesJson from './mimetypes.json' with { type: 'json' };
|
|
32
25
|
const mime_types = new Map();
|
|
33
26
|
const mime_extensions = new Map();
|
|
34
27
|
function mime_define(map) {
|
|
35
|
-
for (
|
|
36
|
-
|
|
37
|
-
for (
|
|
38
|
-
mime_types.set(
|
|
28
|
+
for (const type in map) {
|
|
29
|
+
const exts = map[type];
|
|
30
|
+
for (const ext of exts)
|
|
31
|
+
mime_types.set(ext, type);
|
|
39
32
|
if (!mime_extensions.has(type))
|
|
40
33
|
mime_extensions.set(type, exts[0]);
|
|
41
34
|
}
|
|
42
35
|
}
|
|
43
36
|
;
|
|
44
|
-
|
|
45
|
-
lookup: (path, fallback = null) => mime_types.get(path.replace(/^.*[
|
|
37
|
+
export const mime = {
|
|
38
|
+
lookup: (path, fallback = null) => mime_types.get(path.replace(/^.*[./\\]/, '').toLowerCase()) ?? fallback ?? 'application/octet-stream',
|
|
46
39
|
charsets: (mimeType) => (/^text\/|^application\/(javascript|json)/).test(mimeType) ? 'UTF-8' : null,
|
|
47
40
|
};
|
|
48
|
-
mime_define(
|
|
41
|
+
mime_define(mimetypesJson);
|
|
49
42
|
// ---------------------------------------------------------------------------
|
|
50
43
|
// Constants
|
|
51
44
|
// ---------------------------------------------------------------------------
|
|
@@ -54,6 +47,13 @@ mime_define(require('./mimetypes.json'));
|
|
|
54
47
|
* any position of a URL path, including encoded forms using back-slashes.
|
|
55
48
|
*/
|
|
56
49
|
const UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/;
|
|
50
|
+
/**
|
|
51
|
+
* Regular expression that detects any ASCII control character (code point
|
|
52
|
+
* below 32, including the NUL byte). These characters cannot appear in a valid
|
|
53
|
+
* file name and would make fs.stat() throw, so paths containing them are
|
|
54
|
+
* treated as not found.
|
|
55
|
+
*/
|
|
56
|
+
const CONTROL_CHAR_REGEXP = /[\x00-\x1f]/;
|
|
57
57
|
/** Default security and caching options applied to every response. */
|
|
58
58
|
const DEFAULT_OPTIONS = {
|
|
59
59
|
headers: {
|
|
@@ -81,6 +81,8 @@ const DEFAULT_OPTIONS = {
|
|
|
81
81
|
const HTTP = {
|
|
82
82
|
/** 304 Not Modified — sent for conditional GET cache hits. */
|
|
83
83
|
NOT_MODIFIED: (res, opts) => { res.status(304, opts.headers).end(); },
|
|
84
|
+
/** 400 Bad Request — sent when the URL path contains malformed percent-encoding. */
|
|
85
|
+
BAD_REQUEST: (res, opts) => res.status(400, opts.headers).send('Bad Request'),
|
|
84
86
|
/** 403 Forbidden — sent for denied dot-files or path traversal attempts. */
|
|
85
87
|
FORBIDDEN: (res, opts) => res.status(403, opts.headers).send('Forbidden'),
|
|
86
88
|
/** 404 Not Found — sent when the requested file does not exist. */
|
|
@@ -193,17 +195,35 @@ function parseHttpDate(date) {
|
|
|
193
195
|
return typeof timestamp === 'number' ? timestamp : NaN;
|
|
194
196
|
}
|
|
195
197
|
/**
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
198
|
+
* Escape HTML special characters so that a raw string can be safely embedded
|
|
199
|
+
* in HTML text content or attribute values.
|
|
200
|
+
*
|
|
201
|
+
* Handles `&`, `<`, `>`, and `"`. Single quotes are not escaped because all
|
|
202
|
+
* generated attributes use double-quote delimiters.
|
|
203
|
+
*
|
|
204
|
+
* @param str - The raw string to escape.
|
|
205
|
+
* @returns A string safe for insertion into HTML.
|
|
206
|
+
*/
|
|
207
|
+
function htmlEscape(str) {
|
|
208
|
+
return str
|
|
209
|
+
.replace(/&/g, '&')
|
|
210
|
+
.replace(/</g, '<')
|
|
211
|
+
.replace(/>/g, '>')
|
|
212
|
+
.replace(/"/g, '"');
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Percent-encode each segment of a URL path while preserving the `/`
|
|
216
|
+
* separators, so that the result is safe to use as an `href` attribute value.
|
|
217
|
+
*
|
|
218
|
+
* Each segment is passed through {@link encodeURIComponent}, which encodes
|
|
219
|
+
* all characters except `A-Z a-z 0-9 - _ . ! ~ * ' ( )`. The `/` delimiters
|
|
220
|
+
* between segments are kept as literal slashes.
|
|
199
221
|
*
|
|
200
|
-
* @param
|
|
222
|
+
* @param urlPath - A decoded URL path, e.g. `'/dir with spaces/readme.txt'`.
|
|
223
|
+
* @returns A percent-encoded path, e.g. `'/dir%20with%20spaces/readme.txt'`.
|
|
201
224
|
*/
|
|
202
|
-
function
|
|
203
|
-
return
|
|
204
|
-
headers['if-unmodified-since'] ||
|
|
205
|
-
headers['if-none-match'] ||
|
|
206
|
-
headers['if-modified-since']);
|
|
225
|
+
function encodePath(urlPath) {
|
|
226
|
+
return urlPath.split('/').map(s => encodeURIComponent(s)).join('/');
|
|
207
227
|
}
|
|
208
228
|
/**
|
|
209
229
|
* Evaluate precondition headers (`If-Match` / `If-Unmodified-Since`) against
|
|
@@ -228,7 +248,7 @@ function conditionMatch(reqHeaders, resHeaders) {
|
|
|
228
248
|
// --- If-Match ---
|
|
229
249
|
const match = reqHeaders['if-match'];
|
|
230
250
|
if (match) {
|
|
231
|
-
const etag = resHeaders
|
|
251
|
+
const etag = resHeaders.etag;
|
|
232
252
|
if (match === '*' || match === etag)
|
|
233
253
|
return true;
|
|
234
254
|
for (const tag of parseTokenList(match)) {
|
|
@@ -239,9 +259,6 @@ function conditionMatch(reqHeaders, resHeaders) {
|
|
|
239
259
|
return false;
|
|
240
260
|
}
|
|
241
261
|
// --- If-Unmodified-Since ---
|
|
242
|
-
// BUG FIX: the original code read req['if-modified-since'] here, which is
|
|
243
|
-
// the wrong header. The correct header for this precondition is
|
|
244
|
-
// 'if-unmodified-since'.
|
|
245
262
|
const lastModified = parseHttpDate(resHeaders['last-modified']);
|
|
246
263
|
const unmodifiedSince = parseHttpDate(reqHeaders['if-unmodified-since']);
|
|
247
264
|
if (!isNaN(unmodifiedSince) && !isNaN(lastModified))
|
|
@@ -277,7 +294,7 @@ function isCacheFresh(reqHeaders, resHeaders) {
|
|
|
277
294
|
return false;
|
|
278
295
|
// --- If-None-Match ---
|
|
279
296
|
if (noneMatch && noneMatch !== '*') {
|
|
280
|
-
const etag = resHeaders
|
|
297
|
+
const etag = resHeaders.etag;
|
|
281
298
|
if (!etag)
|
|
282
299
|
return false;
|
|
283
300
|
let etagStale = true;
|
|
@@ -330,7 +347,7 @@ function resolveOptions(root, options) {
|
|
|
330
347
|
opts.fallthrough = options?.fallthrough !== false;
|
|
331
348
|
opts.redirect = options?.redirect !== false;
|
|
332
349
|
opts.maxage = options?.maxage ?? options?.maxAge ?? 0;
|
|
333
|
-
opts.root =
|
|
350
|
+
opts.root = nodePath.resolve(root);
|
|
334
351
|
return opts;
|
|
335
352
|
}
|
|
336
353
|
/**
|
|
@@ -341,68 +358,108 @@ function resolveOptions(root, options) {
|
|
|
341
358
|
* last-modification timestamps, and file sizes. An optional parent-directory
|
|
342
359
|
* link is shown when `parentUrlPath` is provided.
|
|
343
360
|
*
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
361
|
+
* **Default order:** directories before files; within each group, entries are
|
|
362
|
+
* sorted alphabetically by name (ascending).
|
|
363
|
+
*
|
|
364
|
+
* **Query-parameter sorting** (`?C=<col>;O=<ord>` — `;` or `&` separator):
|
|
365
|
+
* - `C=N` — sort by name (default)
|
|
366
|
+
* - `C=M` — sort by last-modification time
|
|
367
|
+
* - `C=S` — sort by size (directories always count as 0)
|
|
368
|
+
* - Any other value for `C` → falls back to name order
|
|
369
|
+
* - `O=A` — ascending (default)
|
|
370
|
+
* - `O=D` — descending
|
|
371
|
+
*
|
|
372
|
+
* Column header links are generated dynamically: clicking the **active** column
|
|
373
|
+
* toggles the order; clicking any **other** column resets to ascending.
|
|
348
374
|
*
|
|
349
375
|
* @param urlPath - The URL path displayed in the page title and heading.
|
|
350
376
|
* @param directoryPath - Absolute filesystem path of the directory to list.
|
|
351
377
|
* @param parentUrlPath - URL of the parent directory, or `null` when at root.
|
|
378
|
+
* @param queryString - Raw query string from the request URL (without `?`).
|
|
352
379
|
* @param callback - Called with `(html, null)` on success or
|
|
353
380
|
* `(null, err)` on failure.
|
|
354
381
|
*/
|
|
355
|
-
function writeIndexOf(urlPath, directoryPath, parentUrlPath, callback) {
|
|
356
|
-
|
|
357
|
-
// a `path` parameter (shadowing the `path` module) as second. Both were
|
|
358
|
-
// unused or misused. The signature is corrected here: `urlPath` is the
|
|
359
|
-
// display path, `directoryPath` is the fs path, `parentUrlPath` is optional.
|
|
360
|
-
fs_1.default.readdir(directoryPath, (err, files) => {
|
|
382
|
+
function writeIndexOf(urlPath, directoryPath, parentUrlPath, queryString, callback) {
|
|
383
|
+
fs.readdir(directoryPath, (err, files) => {
|
|
361
384
|
if (err)
|
|
362
385
|
return callback(null, err);
|
|
386
|
+
// ── Parse sort parameters ────────────────────────────────────────────────
|
|
387
|
+
// Support both ';' and '&' as separators (Apache style uses ';').
|
|
388
|
+
const params = new URLSearchParams(queryString.replace(/;/g, '&'));
|
|
389
|
+
const rawCol = params.get('C') ?? 'N';
|
|
390
|
+
const rawOrd = params.get('O') ?? 'A';
|
|
391
|
+
const col = ['N', 'M', 'S'].includes(rawCol) ? rawCol : 'N';
|
|
392
|
+
const ord = rawOrd === 'D' ? 'D' : 'A';
|
|
393
|
+
const entries = [];
|
|
394
|
+
for (const file of files) {
|
|
395
|
+
const fullPath = nodePath.join(directoryPath, file);
|
|
396
|
+
let stat;
|
|
397
|
+
try {
|
|
398
|
+
stat = fs.statSync(fullPath);
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
continue; // skip entries that disappeared between readdir and stat
|
|
402
|
+
}
|
|
403
|
+
entries.push({ file, stat, isDir: stat.isDirectory() });
|
|
404
|
+
}
|
|
405
|
+
// ── Sort ─────────────────────────────────────────────────────────────────
|
|
406
|
+
// Directories always come before files. Within each group apply col/ord.
|
|
407
|
+
const sign = ord === 'A' ? 1 : -1;
|
|
408
|
+
entries.sort((a, b) => {
|
|
409
|
+
if (a.isDir !== b.isDir)
|
|
410
|
+
return a.isDir ? -1 : 1;
|
|
411
|
+
let cmp = 0;
|
|
412
|
+
if (col === 'N')
|
|
413
|
+
cmp = a.file.localeCompare(b.file);
|
|
414
|
+
else if (col === 'M')
|
|
415
|
+
cmp = a.stat.mtime.getTime() - b.stat.mtime.getTime();
|
|
416
|
+
else if (col === 'S')
|
|
417
|
+
cmp = (a.isDir ? 0 : a.stat.size) - (b.isDir ? 0 : b.stat.size);
|
|
418
|
+
return cmp * sign;
|
|
419
|
+
});
|
|
420
|
+
// ── Dynamic column header link ───────────────────────────────────────────
|
|
421
|
+
// Active column: toggles order. Inactive column: always links to ascending.
|
|
422
|
+
function thLink(c, label) {
|
|
423
|
+
const nextOrd = (c === col && ord === 'A') ? 'D' : 'A';
|
|
424
|
+
return `<a href="?C=${c};O=${nextOrd}">${label}</a>`;
|
|
425
|
+
}
|
|
426
|
+
// ── Build HTML ───────────────────────────────────────────────────────────
|
|
427
|
+
// urlPath comes from req.path (user-controlled) and file names come from
|
|
428
|
+
// the filesystem — both must be escaped before insertion into HTML.
|
|
363
429
|
let html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n';
|
|
364
430
|
html += '<html>\n';
|
|
365
|
-
html += `<head><title>Index of ${urlPath}</title></head>\n`;
|
|
366
|
-
html += `<body><h1>Index of ${urlPath}</h1><table>\n`;
|
|
431
|
+
html += `<head><title>Index of ${htmlEscape(urlPath)}</title></head>\n`;
|
|
432
|
+
html += `<body><h1>Index of ${htmlEscape(urlPath)}</h1><table>\n`;
|
|
367
433
|
html += '<tr>'
|
|
368
434
|
+ '<th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th>'
|
|
369
|
-
+ '
|
|
370
|
-
+ '
|
|
371
|
-
+ '
|
|
435
|
+
+ `<th>${thLink('N', 'Name')}</th>`
|
|
436
|
+
+ `<th>${thLink('M', 'Last modified')}</th>`
|
|
437
|
+
+ `<th>${thLink('S', 'Size')}</th>`
|
|
372
438
|
+ '<th><a href="?C=D;O=A">Description</a></th>'
|
|
373
439
|
+ '</tr>\n';
|
|
374
440
|
html += '<tr><th colspan="5"><hr></th></tr>\n';
|
|
375
441
|
if (parentUrlPath)
|
|
376
442
|
html += `<tr>`
|
|
377
443
|
+ `<td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td>`
|
|
378
|
-
+ `<td><a href="${parentUrlPath}">Parent Directory</a></td>`
|
|
444
|
+
+ `<td><a href="${encodePath(parentUrlPath)}">Parent Directory</a></td>`
|
|
379
445
|
+ `<td> </td><td align="right"> - </td><td> </td>`
|
|
380
446
|
+ `</tr>\n`;
|
|
381
|
-
for (const file of
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
// BUG FIX: the original code used `path.join(...)` where `path` was
|
|
385
|
-
// shadowed by the parameter name. Use `nodePath` (the imported module).
|
|
386
|
-
const fullPath = path_1.default.join(directoryPath, file);
|
|
387
|
-
let stat;
|
|
388
|
-
try {
|
|
389
|
-
stat = fs_1.default.statSync(fullPath);
|
|
390
|
-
}
|
|
391
|
-
catch {
|
|
392
|
-
continue; // skip entries that disappeared between readdir and stat
|
|
393
|
-
}
|
|
394
|
-
const mimeType = exports.mime.lookup(fullPath, '');
|
|
447
|
+
for (const { file, stat, isDir } of entries) {
|
|
448
|
+
const fullPath = nodePath.join(directoryPath, file);
|
|
449
|
+
const mimeType = mime.lookup(fullPath, '');
|
|
395
450
|
const mediaType = mimeType.includes('/') ? mimeType.split('/')[0] : '';
|
|
396
|
-
const alt =
|
|
451
|
+
const alt = isDir ? 'folder' : (mediaType || 'unknown');
|
|
397
452
|
const icon = `/icons/${alt}.gif`;
|
|
398
|
-
const name = file + (
|
|
399
|
-
//
|
|
400
|
-
//
|
|
453
|
+
const name = file + (isDir ? '/' : '');
|
|
454
|
+
// href uses percent-encoding (safe for URL context); display text uses
|
|
455
|
+
// HTML-escaping (safe for HTML text content).
|
|
456
|
+
const hrefName = encodeURIComponent(file) + (isDir ? '/' : '');
|
|
457
|
+
const displayName = htmlEscape(name);
|
|
401
458
|
const modified = stat.mtime.toUTCString();
|
|
402
|
-
const size =
|
|
459
|
+
const size = isDir ? '-' : String(stat.size);
|
|
403
460
|
html += `<tr>`
|
|
404
461
|
+ `<td valign="top"><img src="${icon}" alt="[${alt.toUpperCase()}]"></td>`
|
|
405
|
-
+ `<td><a href="${
|
|
462
|
+
+ `<td><a href="${hrefName}">${displayName}</a></td>`
|
|
406
463
|
+ `<td align="right">${modified}</td>`
|
|
407
464
|
+ `<td align="right">${size}</td>`
|
|
408
465
|
+ `<td> </td>`
|
|
@@ -410,9 +467,6 @@ function writeIndexOf(urlPath, directoryPath, parentUrlPath, callback) {
|
|
|
410
467
|
}
|
|
411
468
|
html += '<tr><th colspan="5"><hr></th></tr>\n';
|
|
412
469
|
html += '</table><address>Expediate/1.0.0</address></body></html>\n';
|
|
413
|
-
// BUG FIX: the original code called go(html) without `return`, so execution
|
|
414
|
-
// continued to HTTP.NOT_FOUND immediately after — the callback was invoked
|
|
415
|
-
// and then the caller would also receive NOT_FOUND.
|
|
416
470
|
return callback(html, null);
|
|
417
471
|
});
|
|
418
472
|
}
|
|
@@ -466,9 +520,9 @@ function sendIt(req, res, pathname, stat, opts) {
|
|
|
466
520
|
res.setHeader('Content-Type', opts.contentType);
|
|
467
521
|
}
|
|
468
522
|
else {
|
|
469
|
-
const type =
|
|
523
|
+
const type = mime.lookup(pathname, '');
|
|
470
524
|
if (type) {
|
|
471
|
-
const charset =
|
|
525
|
+
const charset = mime.charsets(type);
|
|
472
526
|
res.setHeader('Content-Type', charset ? `${type}; charset=${charset}` : type);
|
|
473
527
|
}
|
|
474
528
|
}
|
|
@@ -488,7 +542,7 @@ function sendIt(req, res, pathname, stat, opts) {
|
|
|
488
542
|
// If-Modified-Since are handled above by isCacheFresh and must NOT trigger
|
|
489
543
|
// a 412 when conditionMatch returns false (they are cache-validation headers,
|
|
490
544
|
// not write-precondition headers per RFC 7232).
|
|
491
|
-
const hasPrecondition = !!(req.headers['if-match']
|
|
545
|
+
const hasPrecondition = !!(req.headers['if-match'] ??
|
|
492
546
|
req.headers['if-unmodified-since']);
|
|
493
547
|
if (hasPrecondition && !conditionMatch(req.headers, res.getHeaders())) {
|
|
494
548
|
HTTP.PRECONDITION_FAILS(res, opts);
|
|
@@ -502,7 +556,7 @@ function sendIt(req, res, pathname, stat, opts) {
|
|
|
502
556
|
return;
|
|
503
557
|
}
|
|
504
558
|
let finished = false;
|
|
505
|
-
const stream =
|
|
559
|
+
const stream = fs.createReadStream(pathname);
|
|
506
560
|
res.on('finish', () => {
|
|
507
561
|
finished = true;
|
|
508
562
|
destroyReadStream(stream);
|
|
@@ -542,8 +596,8 @@ function sendIt(req, res, pathname, stat, opts) {
|
|
|
542
596
|
* @param pathname - Absolute filesystem path of the file to send.
|
|
543
597
|
* @param opts - Fully resolved static-serving options.
|
|
544
598
|
*/
|
|
545
|
-
function sendFile(req, res, pathname, opts) {
|
|
546
|
-
|
|
599
|
+
export function sendFile(req, res, pathname, opts) {
|
|
600
|
+
fs.stat(pathname, (err, stat) => {
|
|
547
601
|
if (err) {
|
|
548
602
|
if (err.code === 'ENOENT' ||
|
|
549
603
|
err.code === 'ENAMETOOLONG' ||
|
|
@@ -553,13 +607,11 @@ function sendFile(req, res, pathname, opts) {
|
|
|
553
607
|
}
|
|
554
608
|
if (stat.isDirectory()) {
|
|
555
609
|
if (opts.indexOf) {
|
|
556
|
-
const parentUrl = req.path !== '/' ?
|
|
557
|
-
|
|
610
|
+
const parentUrl = req.path !== '/' ? nodePath.dirname(req.path) : null;
|
|
611
|
+
const queryString = (req.url ?? '').split('?')[1] ?? '';
|
|
612
|
+
return writeIndexOf(req.path, pathname, parentUrl, queryString, (html, indexErr) => {
|
|
558
613
|
if (indexErr)
|
|
559
614
|
return HTTP.INTERNAL_ERROR(res, opts, indexErr.code ?? 'UNKNOWN');
|
|
560
|
-
// BUG FIX: the original code called `res.send(200, {...}).send(html)`.
|
|
561
|
-
// `res.send()` does not accept a status code as first argument; the
|
|
562
|
-
// correct call is `res.status(200, headers).send(html)`.
|
|
563
615
|
return res.status(200, opts.headers).send(html);
|
|
564
616
|
});
|
|
565
617
|
}
|
|
@@ -598,9 +650,7 @@ function sendFile(req, res, pathname, opts) {
|
|
|
598
650
|
* @returns An Express-compatible middleware function.
|
|
599
651
|
* @throws {TypeError} When `root` is missing or not a string.
|
|
600
652
|
*/
|
|
601
|
-
function serveStatic(root, options) {
|
|
602
|
-
// BUG FIX: `static` is a reserved word in strict mode (`'use strict'`).
|
|
603
|
-
// The function has been renamed to `serveStatic`.
|
|
653
|
+
export function serveStatic(root, options) {
|
|
604
654
|
const opts = resolveOptions(root, options);
|
|
605
655
|
return function (req, res, next) {
|
|
606
656
|
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
@@ -609,28 +659,46 @@ function serveStatic(root, options) {
|
|
|
609
659
|
return HTTP.NOT_ALLOWED(res, opts);
|
|
610
660
|
}
|
|
611
661
|
// Decode the current path (after any prefix stripping by parent routers).
|
|
612
|
-
|
|
662
|
+
// Malformed percent-sequences (e.g. %zz, trailing %) are rejected immediately
|
|
663
|
+
// because they cannot represent a valid file path and may indicate an attack.
|
|
664
|
+
let originalUrl;
|
|
665
|
+
try {
|
|
666
|
+
originalUrl = decodeURIComponent(req.path ?? req.url ?? '/');
|
|
667
|
+
}
|
|
668
|
+
catch {
|
|
669
|
+
return HTTP.BAD_REQUEST(res, opts);
|
|
670
|
+
}
|
|
613
671
|
let pathname = originalUrl;
|
|
614
672
|
// When the URL ends without a trailing slash but the bare mount point was
|
|
615
673
|
// requested, clear the pathname so the root directory is considered.
|
|
616
674
|
if (pathname === '/' && !originalUrl.endsWith('/'))
|
|
617
675
|
pathname = '';
|
|
676
|
+
// Reject any path containing a control character (code point < 32), most
|
|
677
|
+
// notably the NUL byte. Such characters can never appear in a legitimate
|
|
678
|
+
// file name and would otherwise cause fs.stat() to throw synchronously
|
|
679
|
+
// (TypeError: path must be a string without null bytes), surfacing as a 500.
|
|
680
|
+
if (CONTROL_CHAR_REGEXP.test(pathname)) {
|
|
681
|
+
if (opts.fallthrough)
|
|
682
|
+
return next();
|
|
683
|
+
return HTTP.NOT_FOUND(res, opts);
|
|
684
|
+
}
|
|
618
685
|
// Reject any path containing a directory-traversal component.
|
|
619
686
|
if (UP_PATH_REGEXP.test(pathname))
|
|
620
687
|
return HTTP.FORBIDDEN(res, opts);
|
|
621
688
|
// Resolve to an absolute filesystem path.
|
|
622
|
-
pathname =
|
|
689
|
+
pathname = nodePath.resolve(nodePath.normalize(`${opts.root}/${pathname}`));
|
|
690
|
+
// Defense-in-depth: verify the resolved path remains inside opts.root.
|
|
691
|
+
// This catches edge cases that bypass UP_PATH_REGEXP — e.g. OS-level
|
|
692
|
+
// symlinks, or unusual Unicode normalisation on certain file systems.
|
|
693
|
+
if (pathname !== opts.root && !pathname.startsWith(opts.root + nodePath.sep))
|
|
694
|
+
return HTTP.FORBIDDEN(res, opts);
|
|
623
695
|
// Dot-file handling.
|
|
624
|
-
// BUG FIX: the original condition was `!opts.dotfiles != 'allow'` which
|
|
625
|
-
// always evaluates to `true` because `!opts.dotfiles` is a boolean and a
|
|
626
|
-
// boolean is never strictly/loosely equal to a string. The correct
|
|
627
|
-
// condition is `opts.dotfiles !== 'allow'`.
|
|
628
696
|
if (opts.dotfiles !== 'allow' && pathname.includes('/.')) {
|
|
629
697
|
if (opts.dotfiles === 'deny')
|
|
630
698
|
return HTTP.FORBIDDEN(res, opts);
|
|
631
699
|
return HTTP.NOT_FOUND(res, opts);
|
|
632
700
|
}
|
|
633
|
-
|
|
701
|
+
fs.stat(pathname, (err, stat) => {
|
|
634
702
|
if (err) {
|
|
635
703
|
if (err.code === 'ENOENT' ||
|
|
636
704
|
err.code === 'ENAMETOOLONG' ||
|
|
@@ -648,7 +716,7 @@ function serveStatic(root, options) {
|
|
|
648
716
|
return next();
|
|
649
717
|
return HTTP.NOT_FOUND(res, opts);
|
|
650
718
|
}
|
|
651
|
-
return sendFile(req, res,
|
|
719
|
+
return sendFile(req, res, nodePath.join(pathname, 'index.html'), opts);
|
|
652
720
|
}
|
|
653
721
|
sendIt(req, res, pathname, stat, opts);
|
|
654
722
|
});
|
|
@@ -675,32 +743,23 @@ function serveStatic(root, options) {
|
|
|
675
743
|
* @returns An Express-compatible middleware function.
|
|
676
744
|
* @throws {TypeError} When `filePath` is missing or not a string.
|
|
677
745
|
*/
|
|
678
|
-
function serveFile(filePath, options) {
|
|
746
|
+
export function serveFile(filePath, options) {
|
|
679
747
|
const opts = resolveOptions(filePath, options);
|
|
680
748
|
return function (req, res, next) {
|
|
681
|
-
// BUG FIX: the original `file()` function had the method-check logic
|
|
682
|
-
// inverted. `methOk` was set to `true` when the method was NOT GET/HEAD
|
|
683
|
-
// (i.e. the invalid case), and then `if (!methOk)` blocked valid methods.
|
|
684
|
-
// The corrected logic: reject when the method is NOT GET or HEAD.
|
|
685
749
|
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
686
750
|
if (opts.fallthrough)
|
|
687
751
|
return next();
|
|
688
752
|
return HTTP.NOT_ALLOWED(res, opts);
|
|
689
753
|
}
|
|
690
754
|
const pathname = opts.root;
|
|
691
|
-
|
|
755
|
+
fs.stat(pathname, (err, stat) => {
|
|
692
756
|
if (err)
|
|
693
757
|
return HTTP.INTERNAL_ERROR(res, opts, err.code ?? 'UNKNOWN');
|
|
694
|
-
// BUG FIX: the original code referenced `err.code` inside the
|
|
695
|
-
// `stat.isDirectory()` branch, where `err` is guaranteed to be `null`
|
|
696
|
-
// (we only reach this branch when `fs.stat` succeeded). The correct
|
|
697
|
-
// response for a misconfigured directory path is a plain 500 with a
|
|
698
|
-
// descriptive message.
|
|
699
758
|
if (stat.isDirectory())
|
|
700
759
|
return HTTP.INTERNAL_ERROR(res, opts, 'EISDIR');
|
|
701
760
|
sendIt(req, res, pathname, stat, opts);
|
|
702
761
|
});
|
|
703
762
|
};
|
|
704
763
|
}
|
|
705
|
-
|
|
764
|
+
export default { serveStatic, serveFile, sendFile };
|
|
706
765
|
//# sourceMappingURL=static.js.map
|