vortez 5.0.0-dev.18 → 5.0.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/.gitignore +11 -4
- package/README.md +699 -177
- package/build/Template/Compiler.d.ts +70 -0
- package/build/Template/Compiler.js +135 -0
- package/build/Template/Compiler.js.map +1 -0
- package/build/Template/StreamCompiler.d.ts +16 -0
- package/build/Template/StreamCompiler.js +54 -0
- package/build/Template/StreamCompiler.js.map +1 -0
- package/build/Template/Template.d.ts +49 -0
- package/build/Template/Template.js +77 -0
- package/build/Template/Template.js.map +1 -0
- package/build/Vortez.d.ts +2 -1
- package/build/Vortez.js +2 -1
- package/build/Vortez.js.map +1 -1
- package/build/beta/JwtManager/JwtError.d.ts +8 -0
- package/build/beta/JwtManager/JwtError.js +10 -0
- package/build/beta/JwtManager/JwtError.js.map +1 -0
- package/build/beta/JwtManager/JwtManager.d.ts +3 -0
- package/build/beta/JwtManager/JwtManager.js +24 -7
- package/build/beta/JwtManager/JwtManager.js.map +1 -1
- package/build/server/BodyParser.d.ts +6 -0
- package/build/server/BodyParser.js +18 -3
- package/build/server/BodyParser.js.map +1 -1
- package/build/server/Request.d.ts +6 -4
- package/build/server/Request.js +15 -10
- package/build/server/Request.js.map +1 -1
- package/build/server/Response.d.ts +25 -10
- package/build/server/Response.js +161 -75
- package/build/server/Response.js.map +1 -1
- package/build/server/Server.d.ts +4 -4
- package/build/server/Server.js +34 -11
- package/build/server/Server.js.map +1 -1
- package/build/server/ServerDebug.d.ts +10 -1
- package/build/server/ServerDebug.js +85 -17
- package/build/server/ServerDebug.js.map +1 -1
- package/build/server/config/Config.d.ts +276 -47
- package/build/server/config/Config.js +70 -47
- package/build/server/config/Config.js.map +1 -1
- package/build/server/config/{ConfigLoader.d.ts → Loader.d.ts} +4 -5
- package/build/server/config/{ConfigLoader.js → Loader.js} +8 -11
- package/build/server/config/Loader.js.map +1 -0
- package/build/server/router/Router.d.ts +88 -31
- package/build/server/router/Router.js +113 -51
- package/build/server/router/Router.js.map +1 -1
- package/build/server/router/algorithm/Algorithm.d.ts +39 -0
- package/build/server/router/algorithm/Algorithm.js +20 -0
- package/build/server/router/algorithm/Algorithm.js.map +1 -0
- package/build/server/router/algorithm/FIFO.d.ts +15 -0
- package/build/server/router/algorithm/FIFO.js +24 -0
- package/build/server/router/algorithm/FIFO.js.map +1 -0
- package/build/server/router/algorithm/Tree.d.ts +38 -0
- package/build/server/router/algorithm/Tree.js +126 -0
- package/build/server/router/algorithm/Tree.js.map +1 -0
- package/build/server/router/middleware/HttpMiddleware.js +1 -1
- package/build/server/router/middleware/HttpMiddleware.js.map +1 -1
- package/build/server/router/middleware/WsMiddleware.js +1 -1
- package/build/server/router/middleware/WsMiddleware.js.map +1 -1
- package/build/server/security/PathSecurity.d.ts +45 -0
- package/build/server/security/PathSecurity.js +108 -0
- package/build/server/security/PathSecurity.js.map +1 -0
- package/build/server/websocket/Websocket.js +4 -1
- package/build/server/websocket/Websocket.js.map +1 -1
- package/build/utilities/ConsoleUI.d.ts +2 -1
- package/build/utilities/ConsoleUI.js +2 -1
- package/build/utilities/ConsoleUI.js.map +1 -1
- package/build/utilities/DebugUI.d.ts +1 -1
- package/build/utilities/DebugUI.js +1 -1
- package/build/utilities/Encoding.d.ts +22 -0
- package/build/utilities/Encoding.js +26 -0
- package/build/utilities/Encoding.js.map +1 -0
- package/build/utilities/Env.js +7 -2
- package/build/utilities/Env.js.map +1 -1
- package/build/utilities/File.d.ts +10 -0
- package/build/utilities/File.js +19 -0
- package/build/utilities/File.js.map +1 -0
- package/build/utilities/Flatten.d.ts +73 -0
- package/build/utilities/Flatten.js +76 -0
- package/build/utilities/Flatten.js.map +1 -0
- package/build/utilities/Object.d.ts +16 -0
- package/build/utilities/Object.js +48 -0
- package/build/utilities/Object.js.map +1 -0
- package/build/utilities/Path.d.ts +31 -11
- package/build/utilities/Path.js +48 -15
- package/build/utilities/Path.js.map +1 -1
- package/build/utilities/Time.d.ts +21 -0
- package/build/utilities/Time.js +25 -0
- package/build/utilities/Time.js.map +1 -0
- package/build/utilities/Utilities.d.ts +50 -92
- package/build/utilities/Utilities.js +56 -71
- package/build/utilities/Utilities.js.map +1 -1
- package/build/utilities/schema/Introspection.d.ts +24 -0
- package/build/utilities/schema/Introspection.js +87 -0
- package/build/utilities/schema/Introspection.js.map +1 -0
- package/build/utilities/schema/JSONSchema.d.ts +68 -0
- package/build/utilities/schema/JSONSchema.js +13 -0
- package/build/utilities/schema/JSONSchema.js.map +1 -0
- package/build/utilities/schema/Schema.d.ts +253 -0
- package/build/utilities/schema/Schema.js +241 -0
- package/build/utilities/schema/Schema.js.map +1 -0
- package/build/utilities/schema/SchemaError.d.ts +10 -0
- package/build/utilities/schema/SchemaError.js +13 -0
- package/build/utilities/schema/SchemaError.js.map +1 -0
- package/build/utilities/schema/Validator.d.ts +94 -0
- package/build/utilities/schema/Validator.js +246 -0
- package/build/utilities/schema/Validator.js.map +1 -0
- package/changes.md +4 -0
- package/docs/ARCHITECTURE.md +142 -0
- package/global/style/template/error.css +29 -0
- package/global/style/template/folder.css +79 -0
- package/global/{Style/Template/Template.css → style/template/template.css} +60 -68
- package/global/template/error.vhtml +29 -0
- package/global/template/folder.vhtml +54 -0
- package/package.json +2 -2
- package/build/Template.d.ts +0 -46
- package/build/Template.js +0 -81
- package/build/Template.js.map +0 -1
- package/build/server/config/ConfigLoader.js.map +0 -1
- package/build/server/config/ConfigValidator.d.ts +0 -71
- package/build/server/config/ConfigValidator.js +0 -131
- package/build/server/config/ConfigValidator.js.map +0 -1
- package/examples/in-docs.js +0 -96
- package/global/Style/Template/Error.css +0 -30
- package/global/Style/Template/Folder.css +0 -77
- package/global/Template/Error.vhtml +0 -29
- package/global/Template/Folder.vhtml +0 -41
- package/tests/Template/template.js +0 -18
- package/tests/Template/template.txt +0 -13
- package/tests/Template/template.vhtml +0 -23
- package/tests/debug.js +0 -34
- package/tests/jwtManager/jwtManager.js +0 -342
- package/tests/test.js +0 -131
- package/tests/test.vhtml +0 -14
- package/tests/utilities.js +0 -28
- package/tests/websocket.vhtml +0 -86
- /package/global/{Source/Logo_960.png → source/logo_960.png} +0 -0
- /package/global/{Source/Logo_SM_960.png → source/logo_SM_960.png} +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type Request from '../../Request.js';
|
|
2
|
+
import Algorithm from './Algorithm.js';
|
|
3
|
+
import Response from '../../Response.js';
|
|
4
|
+
import Websocket from '../../websocket/Websocket.js';
|
|
5
|
+
export declare class Tree extends Algorithm {
|
|
6
|
+
private root;
|
|
7
|
+
constructor();
|
|
8
|
+
get allRules(): Algorithm.ruleType[];
|
|
9
|
+
add(...rules: Algorithm.ruleType[]): void;
|
|
10
|
+
/**
|
|
11
|
+
* Route a request to a rule.
|
|
12
|
+
* @param request - The request to route.
|
|
13
|
+
* @param client - The client to route the request to.
|
|
14
|
+
* @returns True if the request was routed, false otherwise.
|
|
15
|
+
*/
|
|
16
|
+
protected routeHttp(request: Request, client: Response): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Route a websocket to a rule.
|
|
19
|
+
* @param request - The request to route.
|
|
20
|
+
* @param client - The client to route the request to.
|
|
21
|
+
* @returns True if the request was routed, false otherwise.
|
|
22
|
+
*/
|
|
23
|
+
protected routeWebsocket(request: Request, client: Websocket): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Navigate to a route node.
|
|
26
|
+
* @param request - The request to navigate to.
|
|
27
|
+
* @returns The route node or null if not found.
|
|
28
|
+
*/
|
|
29
|
+
private navigate;
|
|
30
|
+
/**
|
|
31
|
+
* Split a path into segments.
|
|
32
|
+
* @param path - The path to split.
|
|
33
|
+
* @returns An array of segments.
|
|
34
|
+
*/
|
|
35
|
+
private splitPath;
|
|
36
|
+
}
|
|
37
|
+
export declare namespace Tree { }
|
|
38
|
+
export default Tree;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import Algorithm from './Algorithm.js';
|
|
2
|
+
import FIFO from './FIFO.js';
|
|
3
|
+
class RouteNode {
|
|
4
|
+
statics;
|
|
5
|
+
params;
|
|
6
|
+
wildcard;
|
|
7
|
+
rules;
|
|
8
|
+
constructor() {
|
|
9
|
+
this.statics = new Map();
|
|
10
|
+
this.rules = new FIFO();
|
|
11
|
+
}
|
|
12
|
+
get allRules() {
|
|
13
|
+
const rules = [...this.rules.allRules];
|
|
14
|
+
if (this.wildcard)
|
|
15
|
+
rules.push(...this.wildcard.allRules);
|
|
16
|
+
if (this.params)
|
|
17
|
+
rules.push(...this.params.node.allRules);
|
|
18
|
+
for (const node of this.statics.values())
|
|
19
|
+
rules.push(...node.allRules);
|
|
20
|
+
return rules;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class Tree extends Algorithm {
|
|
24
|
+
root;
|
|
25
|
+
constructor() {
|
|
26
|
+
super();
|
|
27
|
+
this.root = new RouteNode();
|
|
28
|
+
}
|
|
29
|
+
get allRules() { return this.root.allRules; }
|
|
30
|
+
add(...rules) {
|
|
31
|
+
for (const rule of rules) {
|
|
32
|
+
const segments = this.splitPath(rule.urlRule);
|
|
33
|
+
let currentNode = this.root;
|
|
34
|
+
for (let index = 0; index < segments.length; index++) {
|
|
35
|
+
const segment = segments[index];
|
|
36
|
+
if (segment === '*') {
|
|
37
|
+
currentNode.wildcard ??= new RouteNode();
|
|
38
|
+
currentNode = currentNode.wildcard;
|
|
39
|
+
}
|
|
40
|
+
else if (segment.startsWith('$')) {
|
|
41
|
+
const isOptional = segment.startsWith('$?');
|
|
42
|
+
const paramName = segment.replace(/^\$\??/, '');
|
|
43
|
+
if (isOptional && index === segments.length - 1) {
|
|
44
|
+
currentNode.rules.add(rule);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
currentNode.params ??= { name: paramName, isOptional, node: new RouteNode() };
|
|
48
|
+
currentNode = currentNode.params.node;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
if (!currentNode.statics.has(segment)) {
|
|
52
|
+
currentNode.statics.set(segment, new RouteNode());
|
|
53
|
+
}
|
|
54
|
+
currentNode = currentNode.statics.get(segment);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
currentNode.rules.add(rule);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Route a request to a rule.
|
|
62
|
+
* @param request - The request to route.
|
|
63
|
+
* @param client - The client to route the request to.
|
|
64
|
+
* @returns True if the request was routed, false otherwise.
|
|
65
|
+
*/
|
|
66
|
+
routeHttp(request, client) {
|
|
67
|
+
request.ruleParams = {};
|
|
68
|
+
const node = this.navigate(request);
|
|
69
|
+
if (!node)
|
|
70
|
+
return false;
|
|
71
|
+
return node.rules.route(request, client);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Route a websocket to a rule.
|
|
75
|
+
* @param request - The request to route.
|
|
76
|
+
* @param client - The client to route the request to.
|
|
77
|
+
* @returns True if the request was routed, false otherwise.
|
|
78
|
+
*/
|
|
79
|
+
routeWebsocket(request, client) {
|
|
80
|
+
request.ruleParams = {};
|
|
81
|
+
const node = this.navigate(request);
|
|
82
|
+
if (!node)
|
|
83
|
+
return false;
|
|
84
|
+
return node.rules.route(request, client);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Navigate to a route node.
|
|
88
|
+
* @param request - The request to navigate to.
|
|
89
|
+
* @returns The route node or null if not found.
|
|
90
|
+
*/
|
|
91
|
+
navigate(request) {
|
|
92
|
+
const segments = this.splitPath(request.url);
|
|
93
|
+
let currentNode = this.root;
|
|
94
|
+
for (const segment of segments) {
|
|
95
|
+
if (currentNode.statics.has(segment)) {
|
|
96
|
+
currentNode = currentNode.statics.get(segment);
|
|
97
|
+
}
|
|
98
|
+
else if (currentNode.params) {
|
|
99
|
+
const { name, node } = currentNode.params;
|
|
100
|
+
request.ruleParams[name] = segment;
|
|
101
|
+
currentNode = node;
|
|
102
|
+
}
|
|
103
|
+
else if (currentNode.wildcard) {
|
|
104
|
+
currentNode = currentNode.wildcard;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
else if (currentNode.rules.allRules.some((rule) => rule.test(request))) {
|
|
108
|
+
return currentNode;
|
|
109
|
+
}
|
|
110
|
+
else
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
return currentNode;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Split a path into segments.
|
|
117
|
+
* @param path - The path to split.
|
|
118
|
+
* @returns An array of segments.
|
|
119
|
+
*/
|
|
120
|
+
splitPath(path) {
|
|
121
|
+
return path.split('/').filter(p => p.length > 0);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
;
|
|
125
|
+
export default Tree;
|
|
126
|
+
//# sourceMappingURL=Tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.js","sourceRoot":"","sources":["../../../../src/server/router/algorithm/Tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import LoggerManager from '../../LoggerManager.js';
|
|
|
8
8
|
import Middleware from './Middleware.js';
|
|
9
9
|
const logger = LoggerManager.getInstance();
|
|
10
10
|
export class HttpMiddleware extends Middleware {
|
|
11
|
-
clone() { return new HttpMiddleware(this.pipeline, this.errorPipeline); }
|
|
11
|
+
clone() { return new HttpMiddleware([...this.pipeline], [...this.errorPipeline]); }
|
|
12
12
|
/**
|
|
13
13
|
* Runs the middleware pipeline.
|
|
14
14
|
* @param request - The request received by the server.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpMiddleware.js","sourceRoot":"","sources":["../../../../src/server/router/middleware/HttpMiddleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,aAAa,MAAM,wBAAwB,CAAC;AAGnD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAEzC,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;AAE3C,MAAM,OAAO,cAAe,SAAQ,UAAoB;IAC7C,KAAK,KAAqB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"HttpMiddleware.js","sourceRoot":"","sources":["../../../../src/server/router/middleware/HttpMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import LoggerManager from '../../LoggerManager.js';
|
|
|
8
8
|
import Middleware from './Middleware.js';
|
|
9
9
|
const logger = LoggerManager.getInstance();
|
|
10
10
|
export class WsMiddleware extends Middleware {
|
|
11
|
-
clone() { return new WsMiddleware(this.pipeline); }
|
|
11
|
+
clone() { return new WsMiddleware([...this.pipeline], [...this.errorPipeline]); }
|
|
12
12
|
/**
|
|
13
13
|
* Runs the middleware pipeline.
|
|
14
14
|
* @param request The request received by the server.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WsMiddleware.js","sourceRoot":"","sources":["../../../../src/server/router/middleware/WsMiddleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,aAAa,MAAM,wBAAwB,CAAC;AAEnD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;AAE3C,MAAM,OAAO,YAAa,SAAQ,UAAkB;IACzC,KAAK,KAAmB,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"WsMiddleware.js","sourceRoot":"","sources":["../../../../src/server/router/middleware/WsMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export declare class PathSecurity {
|
|
2
|
+
private static readonly maxRealPathCacheSize;
|
|
3
|
+
private static readonly realPathCache;
|
|
4
|
+
/**
|
|
5
|
+
* Resolves a path relative to a base path while preventing traversal outside the base.
|
|
6
|
+
* @param base - The base path.
|
|
7
|
+
* @param plus - The user-controlled relative path.
|
|
8
|
+
* @returns A safe absolute path or null if the path escapes the base.
|
|
9
|
+
*/
|
|
10
|
+
static resolveInsideBase(base: string, plus: string): Promise<string | null>;
|
|
11
|
+
/**
|
|
12
|
+
* Checks if the given path contains directory traversal that would escape the base directory, by analyzing the path segments for '..' components that would underflow the directory structure.
|
|
13
|
+
* @param path - The path to check for traversal underflow.
|
|
14
|
+
* @returns True if the path contains traversal that escapes the base, false otherwise.
|
|
15
|
+
*/
|
|
16
|
+
private static hasTraversalUnderflow;
|
|
17
|
+
/**
|
|
18
|
+
* Checks if a candidate path is located within a base path, preventing directory traversal attacks.
|
|
19
|
+
* @param basePath - The base path to check against.
|
|
20
|
+
* @param candidatePath - The candidate path to verify.
|
|
21
|
+
* @returns True if the candidate path is inside the base path, false otherwise.
|
|
22
|
+
*/
|
|
23
|
+
private static isPathInside;
|
|
24
|
+
/**
|
|
25
|
+
* Generates a candidate path by joining a base path with a user-controlled relative path, ensuring that the relative path does not start with slashes to prevent bypassing the base directory.
|
|
26
|
+
* @param base - The base path.
|
|
27
|
+
* @param plus - The user-controlled relative path.
|
|
28
|
+
* @returns The generated candidate path.
|
|
29
|
+
* @remarks This method does not perform any security checks and should be used in conjunction with `resolveInsideBase` to ensure safety.
|
|
30
|
+
*/
|
|
31
|
+
private static getCandidate;
|
|
32
|
+
/**
|
|
33
|
+
* Retrieves a safe real path for the given base path, using caching to optimize performance while preventing cache overflow.
|
|
34
|
+
* @param basePath - The base path for which to retrieve the real path.
|
|
35
|
+
* @returns The real path corresponding to the base path, or the original base path if resolution fails.
|
|
36
|
+
*/
|
|
37
|
+
private static getSafeBase;
|
|
38
|
+
/**
|
|
39
|
+
* Attempts to resolve the real path of a given path, returning null if it fails (e.g., if the path does not exist).
|
|
40
|
+
* @param path - The path to resolve.
|
|
41
|
+
* @returns The real path as a string, or null if resolution fails.
|
|
42
|
+
*/
|
|
43
|
+
private static tryReal;
|
|
44
|
+
}
|
|
45
|
+
export default PathSecurity;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
+
* @description Provides security utilities for handling file paths in `Vortez`.
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import FS from 'fs';
|
|
7
|
+
import PATH from 'path';
|
|
8
|
+
import Utilities from '../../utilities/Utilities.js';
|
|
9
|
+
export class PathSecurity {
|
|
10
|
+
static maxRealPathCacheSize = 128;
|
|
11
|
+
static realPathCache = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Resolves a path relative to a base path while preventing traversal outside the base.
|
|
14
|
+
* @param base - The base path.
|
|
15
|
+
* @param plus - The user-controlled relative path.
|
|
16
|
+
* @returns A safe absolute path or null if the path escapes the base.
|
|
17
|
+
*/
|
|
18
|
+
static async resolveInsideBase(base, plus) {
|
|
19
|
+
base = Utilities.Path.resolve(base);
|
|
20
|
+
plus = Utilities.Path.normalize(plus);
|
|
21
|
+
if (this.hasTraversalUnderflow(plus))
|
|
22
|
+
return null;
|
|
23
|
+
const candidate = this.getCandidate(base, plus);
|
|
24
|
+
if (!this.isPathInside(base, candidate))
|
|
25
|
+
return null;
|
|
26
|
+
const [safeBase, safeCandidate] = await Promise.all([
|
|
27
|
+
this.getSafeBase(base),
|
|
28
|
+
this.tryReal(candidate).then(path => path ?? candidate),
|
|
29
|
+
]);
|
|
30
|
+
return this.isPathInside(safeBase, safeCandidate) ? safeCandidate : null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Checks if the given path contains directory traversal that would escape the base directory, by analyzing the path segments for '..' components that would underflow the directory structure.
|
|
34
|
+
* @param path - The path to check for traversal underflow.
|
|
35
|
+
* @returns True if the path contains traversal that escapes the base, false otherwise.
|
|
36
|
+
*/
|
|
37
|
+
static hasTraversalUnderflow(path) {
|
|
38
|
+
const parts = path.split(/[\\/]+/);
|
|
39
|
+
let depth = 0;
|
|
40
|
+
for (const part of parts) {
|
|
41
|
+
if (!part || part === '.')
|
|
42
|
+
continue;
|
|
43
|
+
if (part === '..') {
|
|
44
|
+
if (depth === 0)
|
|
45
|
+
return true;
|
|
46
|
+
depth -= 1;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
depth += 1;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Checks if a candidate path is located within a base path, preventing directory traversal attacks.
|
|
55
|
+
* @param basePath - The base path to check against.
|
|
56
|
+
* @param candidatePath - The candidate path to verify.
|
|
57
|
+
* @returns True if the candidate path is inside the base path, false otherwise.
|
|
58
|
+
*/
|
|
59
|
+
static isPathInside(basePath, candidatePath) {
|
|
60
|
+
const relativePath = PATH.relative(basePath, candidatePath);
|
|
61
|
+
return relativePath === '' || (!relativePath.startsWith('..') && !PATH.isAbsolute(relativePath));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Generates a candidate path by joining a base path with a user-controlled relative path, ensuring that the relative path does not start with slashes to prevent bypassing the base directory.
|
|
65
|
+
* @param base - The base path.
|
|
66
|
+
* @param plus - The user-controlled relative path.
|
|
67
|
+
* @returns The generated candidate path.
|
|
68
|
+
* @remarks This method does not perform any security checks and should be used in conjunction with `resolveInsideBase` to ensure safety.
|
|
69
|
+
*/
|
|
70
|
+
static getCandidate(base, plus) {
|
|
71
|
+
plus = plus.replace(/^[\\/]+/, '');
|
|
72
|
+
const candidate = Utilities.Path.join(base, plus);
|
|
73
|
+
return Utilities.Path.resolve(candidate);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Retrieves a safe real path for the given base path, using caching to optimize performance while preventing cache overflow.
|
|
77
|
+
* @param basePath - The base path for which to retrieve the real path.
|
|
78
|
+
* @returns The real path corresponding to the base path, or the original base path if resolution fails.
|
|
79
|
+
*/
|
|
80
|
+
static async getSafeBase(basePath) {
|
|
81
|
+
const cached = this.realPathCache.get(basePath);
|
|
82
|
+
if (cached)
|
|
83
|
+
return cached;
|
|
84
|
+
const resolved = await this.tryReal(basePath) ?? basePath;
|
|
85
|
+
if (this.realPathCache.size >= this.maxRealPathCacheSize) {
|
|
86
|
+
const firstKey = this.realPathCache.keys().next().value;
|
|
87
|
+
if (typeof firstKey === 'string')
|
|
88
|
+
this.realPathCache.delete(firstKey);
|
|
89
|
+
}
|
|
90
|
+
this.realPathCache.set(basePath, resolved);
|
|
91
|
+
return resolved;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Attempts to resolve the real path of a given path, returning null if it fails (e.g., if the path does not exist).
|
|
95
|
+
* @param path - The path to resolve.
|
|
96
|
+
* @returns The real path as a string, or null if resolution fails.
|
|
97
|
+
*/
|
|
98
|
+
static async tryReal(path) {
|
|
99
|
+
try {
|
|
100
|
+
return await FS.promises.realpath(path);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export default PathSecurity;
|
|
108
|
+
//# sourceMappingURL=PathSecurity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathSecurity.js","sourceRoot":"","sources":["../../../src/server/security/PathSecurity.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import EVENTS from 'events';
|
|
|
7
7
|
import CRYPTO from 'crypto';
|
|
8
8
|
import Chunk from './Chunk.js';
|
|
9
9
|
import LoggerManager from '../LoggerManager.js';
|
|
10
|
+
import ServerError from '../ServerError.js';
|
|
10
11
|
const logger = LoggerManager.getInstance().webSocket;
|
|
11
12
|
export { Chunk } from './Chunk.js';
|
|
12
13
|
export class Websocket extends EVENTS {
|
|
@@ -31,8 +32,10 @@ export class Websocket extends EVENTS {
|
|
|
31
32
|
* Accepts the connection with the client.
|
|
32
33
|
*/
|
|
33
34
|
accept() {
|
|
34
|
-
this._status = 'accepted';
|
|
35
35
|
const key = this.request.headers['sec-websocket-key']?.trim();
|
|
36
|
+
if (!key)
|
|
37
|
+
throw new ServerError('Missing Sec-WebSocket-Key header', 400);
|
|
38
|
+
this._status = 'accepted';
|
|
36
39
|
const acceptToken = CRYPTO.createHash('SHA1').update(key + Websocket.WEBSOCKET_GUID).digest('base64');
|
|
37
40
|
const headers = this.buildHeaders([
|
|
38
41
|
'HTTP/1.1 101 Switching Protocols',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../src/server/websocket/Websocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,MAAM,YAAY,CAAC;AAG/B,OAAO,aAAa,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../src/server/websocket/Websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
-
* @description Provides
|
|
3
|
+
* @description Provides a console-based user interface for formatting text with colors and styles, as well as sending messages to the console.
|
|
4
|
+
* This is useful for enhancing the readability of console output and providing a more engaging user experience when interacting with the command line.
|
|
4
5
|
* @license Apache-2.0
|
|
5
6
|
*/
|
|
6
7
|
export declare class ConsoleUI {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
-
* @description Provides
|
|
3
|
+
* @description Provides a console-based user interface for formatting text with colors and styles, as well as sending messages to the console.
|
|
4
|
+
* This is useful for enhancing the readability of console output and providing a more engaging user experience when interacting with the command line.
|
|
4
5
|
* @license Apache-2.0
|
|
5
6
|
*/
|
|
6
7
|
export class ConsoleUI {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleUI.js","sourceRoot":"","sources":["../../src/utilities/ConsoleUI.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ConsoleUI.js","sourceRoot":"","sources":["../../src/utilities/ConsoleUI.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
-
* @description
|
|
3
|
+
* @description Provides a console-based debugging interface for the Vortez project, allowing developers to execute commands and receive feedback in real-time. This is useful for testing and debugging purposes, providing a simple way to interact with the application through a command-line interface.
|
|
4
4
|
* @license Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import Logger from '../logger/Logger.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
-
* @description
|
|
3
|
+
* @description Provides a console-based debugging interface for the Vortez project, allowing developers to execute commands and receive feedback in real-time. This is useful for testing and debugging purposes, providing a simple way to interact with the application through a command-line interface.
|
|
4
4
|
* @license Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import ConsoleUI from './ConsoleUI.js';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
+
* @description Provides utilities for encoding and decoding data, such as base64url encoding.
|
|
4
|
+
* This is useful for handling data transformations that are commonly needed in web applications, such as encoding data for transmission or storage.
|
|
5
|
+
* @license Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
export declare class Encoding {
|
|
8
|
+
/**
|
|
9
|
+
* Encodes a string to base64url format.
|
|
10
|
+
* @param data - The string to encode.
|
|
11
|
+
* @returns The base64url-encoded string.
|
|
12
|
+
*/
|
|
13
|
+
static base64UrlEncode(data: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Decodes a base64url-encoded string.
|
|
16
|
+
* @param data - The base64url-encoded string to decode.
|
|
17
|
+
* @returns The decoded UTF-8 string.
|
|
18
|
+
*/
|
|
19
|
+
static base64UrlDecode(data: string): string;
|
|
20
|
+
}
|
|
21
|
+
export declare namespace Encoding { }
|
|
22
|
+
export default Encoding;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
+
* @description Provides utilities for encoding and decoding data, such as base64url encoding.
|
|
4
|
+
* This is useful for handling data transformations that are commonly needed in web applications, such as encoding data for transmission or storage.
|
|
5
|
+
* @license Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
export class Encoding {
|
|
8
|
+
/**
|
|
9
|
+
* Encodes a string to base64url format.
|
|
10
|
+
* @param data - The string to encode.
|
|
11
|
+
* @returns The base64url-encoded string.
|
|
12
|
+
*/
|
|
13
|
+
static base64UrlEncode(data) {
|
|
14
|
+
return Buffer.from(data).toString('base64url');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Decodes a base64url-encoded string.
|
|
18
|
+
* @param data - The base64url-encoded string to decode.
|
|
19
|
+
* @returns The decoded UTF-8 string.
|
|
20
|
+
*/
|
|
21
|
+
static base64UrlDecode(data) {
|
|
22
|
+
return Buffer.from(data, 'base64url').toString('utf8');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export default Encoding;
|
|
26
|
+
//# sourceMappingURL=Encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Encoding.js","sourceRoot":"","sources":["../../src/utilities/Encoding.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,OAAO,QAAQ;IACjB;;;;OAIG;IACI,MAAM,CAAC,eAAe,CAAC,IAAY;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,eAAe,CAAC,IAAY;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;CACJ;AAGD,eAAe,QAAQ,CAAC"}
|
package/build/utilities/Env.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
+
* @description Provides utilities for environment variable management, including loading from .env files, getting and setting environment variables, and converting objects to .env format. This is useful for managing configuration in a flexible way that can be easily integrated into different environments.
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
1
6
|
import FS, { promises as FSP } from "fs";
|
|
2
7
|
import PATH from "path";
|
|
3
8
|
import Debug from "../logger/Debug.js";
|
|
4
|
-
import
|
|
9
|
+
import File from './File.js';
|
|
5
10
|
export class Env {
|
|
6
11
|
/**
|
|
7
12
|
* Gets all current environment variables.
|
|
@@ -20,7 +25,7 @@ export class Env {
|
|
|
20
25
|
Debug.log(`loading environment variables from &C6[${path}]`);
|
|
21
26
|
const defaultEnv = options.defaultEnv ?? {};
|
|
22
27
|
const setEnv = options.setEnv ?? true;
|
|
23
|
-
if (!await
|
|
28
|
+
if (!await File.exists(path)) {
|
|
24
29
|
try {
|
|
25
30
|
Debug.log(`environment variables file &C6[${path}]&R does not exist, creating it`);
|
|
26
31
|
await FSP.mkdir(PATH.dirname(path), { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Env.js","sourceRoot":"","sources":["../../src/utilities/Env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,IAAI,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"Env.js","sourceRoot":"","sources":["../../src/utilities/Env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class File {
|
|
2
|
+
/**
|
|
3
|
+
* Checks if a file exists asynchronously.
|
|
4
|
+
* @param path - The path to the file.
|
|
5
|
+
* @returns A promise that resolves to true if the file exists, false otherwise.
|
|
6
|
+
*/
|
|
7
|
+
static exists(path: string): Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
export declare namespace File { }
|
|
10
|
+
export default File;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <netfeez.dev@gmail.com>
|
|
3
|
+
* @description Provides utilities for file operations, such as checking if a file exists.
|
|
4
|
+
* This is useful for performing asynchronous file checks in a way that integrates well with modern JavaScript practices.
|
|
5
|
+
* @license Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { promises as FSP } from 'fs';
|
|
8
|
+
export class File {
|
|
9
|
+
/**
|
|
10
|
+
* Checks if a file exists asynchronously.
|
|
11
|
+
* @param path - The path to the file.
|
|
12
|
+
* @returns A promise that resolves to true if the file exists, false otherwise.
|
|
13
|
+
*/
|
|
14
|
+
static async exists(path) {
|
|
15
|
+
return FSP.access(path).then(() => true).catch(() => false);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export default File;
|
|
19
|
+
//# sourceMappingURL=File.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"File.js","sourceRoot":"","sources":["../../src/utilities/File.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,IAAI,CAAC;AAErC,MAAM,OAAO,IAAI;IACb;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAY;QACnC,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;CACJ;AAGD,eAAe,IAAI,CAAC"}
|