xypriss 9.12.10 → 9.12.12
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/dist/cjs/src/plugins/builtin/xems/XemsBuiltinPlugin.js +29 -22
- package/dist/cjs/src/plugins/builtin/xems/XemsBuiltinPlugin.js.map +1 -1
- package/dist/cjs/src/server/FastServer/index.js +4 -6
- package/dist/cjs/src/server/FastServer/index.js.map +1 -1
- package/dist/esm/src/plugins/builtin/xems/XemsBuiltinPlugin.js +29 -22
- package/dist/esm/src/plugins/builtin/xems/XemsBuiltinPlugin.js.map +1 -1
- package/dist/esm/src/server/FastServer/index.js +4 -6
- package/dist/esm/src/server/FastServer/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/src/middleware/XemsSessionMiddleware.js +0 -115
- package/dist/cjs/src/middleware/XemsSessionMiddleware.js.map +0 -1
- package/dist/esm/src/middleware/XemsSessionMiddleware.js +0 -113
- package/dist/esm/src/middleware/XemsSessionMiddleware.js.map +0 -1
|
@@ -26,6 +26,11 @@ class XemsBuiltinPlugin {
|
|
|
26
26
|
autoRotation: true,
|
|
27
27
|
attachTo: "session",
|
|
28
28
|
gracePeriod: 1000,
|
|
29
|
+
cookieOptions: {
|
|
30
|
+
httpOnly: true,
|
|
31
|
+
secure: true,
|
|
32
|
+
sameSite: "Strict",
|
|
33
|
+
},
|
|
29
34
|
};
|
|
30
35
|
this.hasValidSecret = false;
|
|
31
36
|
this.logger = Logger.Logger.getInstance();
|
|
@@ -42,7 +47,7 @@ class XemsBuiltinPlugin {
|
|
|
42
47
|
// 1. Configuration Extraction
|
|
43
48
|
// Use local app config strictly to avoid global singleton pollution in multi-server/auxiliary modes
|
|
44
49
|
// If not explicitly configured, fallback to global defaults only if NOT an auxiliary server
|
|
45
|
-
let xemsOptions = app.configs?.server?.xems;
|
|
50
|
+
let xemsOptions = app.configs?.server?.xems || ConfigurationManager.CM.get("server")?.xems;
|
|
46
51
|
if (!xemsOptions) {
|
|
47
52
|
if (app.configs?.isAuxiliary) {
|
|
48
53
|
// Auxiliary servers should NEVER auto-spawn persistence unless explicitly requested.
|
|
@@ -69,13 +74,18 @@ class XemsBuiltinPlugin {
|
|
|
69
74
|
autoRotation: xemsOptions.autoRotation !== false,
|
|
70
75
|
attachTo: xemsOptions.attachTo || "session",
|
|
71
76
|
gracePeriod: xemsOptions.gracePeriod || 1000,
|
|
77
|
+
cookieOptions: xemsOptions.cookieOptions ?? {
|
|
78
|
+
httpOnly: true,
|
|
79
|
+
secure: true,
|
|
80
|
+
sameSite: "Strict",
|
|
81
|
+
},
|
|
72
82
|
};
|
|
73
83
|
if (!isAuxiliary) {
|
|
74
84
|
logger.info("plugins", `XEMS Session Sandbox: ${this.sessionOptions.sandbox}`);
|
|
75
85
|
}
|
|
76
86
|
// Check for valid secret (mandatory for any XEMS API usage)
|
|
77
87
|
const secret = xemsOptions.persistence?.secret;
|
|
78
|
-
if (secret.length < 32) {
|
|
88
|
+
if (secret && secret.length < 32) {
|
|
79
89
|
this.hasValidSecret = false;
|
|
80
90
|
logger.error("plugins", "XEMS Persistence enabled but no valid 32-byte secret found.");
|
|
81
91
|
}
|
|
@@ -140,7 +150,7 @@ class XemsBuiltinPlugin {
|
|
|
140
150
|
* Native/Fast validation logic (runs on every request)
|
|
141
151
|
*/
|
|
142
152
|
async onRequest(req, res, next) {
|
|
143
|
-
const { sandbox, cookieName, headerName, ttl, autoRotation, attachTo } = this.sessionOptions;
|
|
153
|
+
const { sandbox, cookieName, headerName, ttl, autoRotation, attachTo, cookieOptions, } = this.sessionOptions;
|
|
144
154
|
const token = (req.cookies && req.cookies[cookieName]) ||
|
|
145
155
|
req.headers[headerName];
|
|
146
156
|
// 2. Inject xLink (Session Initiation)
|
|
@@ -170,11 +180,7 @@ class XemsBuiltinPlugin {
|
|
|
170
180
|
});
|
|
171
181
|
res._xemsNewToken = newToken;
|
|
172
182
|
// Apply immediately
|
|
173
|
-
res.cookie(cookieName, newToken,
|
|
174
|
-
httpOnly: true,
|
|
175
|
-
secure: true,
|
|
176
|
-
sameSite: "strict",
|
|
177
|
-
});
|
|
183
|
+
res.cookie(cookieName, newToken, cookieOptions);
|
|
178
184
|
res.setHeader(headerName, newToken);
|
|
179
185
|
req[actualAttachTo] = data;
|
|
180
186
|
return newToken;
|
|
@@ -197,31 +203,36 @@ class XemsBuiltinPlugin {
|
|
|
197
203
|
if (currentToken) {
|
|
198
204
|
await this.runner.from(actualSandbox).del(currentToken);
|
|
199
205
|
}
|
|
200
|
-
res.clearCookie(cookieName
|
|
206
|
+
res.clearCookie(cookieName, {
|
|
207
|
+
path: cookieOptions.path,
|
|
208
|
+
domain: cookieOptions.domain,
|
|
209
|
+
});
|
|
201
210
|
res.removeHeader(headerName);
|
|
202
211
|
req[actualAttachTo] = null;
|
|
203
212
|
};
|
|
204
213
|
// 3. Session Recovery & Rotation
|
|
205
214
|
if (token && this.hasValidSecret) {
|
|
206
215
|
try {
|
|
207
|
-
|
|
216
|
+
// Use resolveSession with rotate=autoRotation.
|
|
217
|
+
// When autoRotation=false, the token is read without being invalidated,
|
|
218
|
+
// so the browser cookie remains valid on subsequent requests.
|
|
219
|
+
const session = await this.runner.resolveSession(token, {
|
|
220
|
+
sandbox,
|
|
221
|
+
rotate: autoRotation,
|
|
208
222
|
ttl,
|
|
209
223
|
gracePeriod: this.sessionOptions.gracePeriod,
|
|
210
224
|
});
|
|
211
225
|
if (session) {
|
|
212
226
|
req[attachTo] = session.data;
|
|
213
|
-
|
|
227
|
+
// If a new token was issued (rotation happened), inject it into the
|
|
228
|
+
// response so the browser cookie stays in sync.
|
|
229
|
+
if (session.newToken) {
|
|
214
230
|
res._xemsNewToken = session.newToken;
|
|
215
|
-
// Intercept response methods to inject the rotated token
|
|
216
231
|
const originalSend = res.send;
|
|
217
232
|
res.send = function (body) {
|
|
218
233
|
const newToken = res._xemsNewToken;
|
|
219
234
|
if (newToken) {
|
|
220
|
-
res.cookie(cookieName, newToken,
|
|
221
|
-
httpOnly: true,
|
|
222
|
-
secure: true,
|
|
223
|
-
sameSite: "strict",
|
|
224
|
-
});
|
|
235
|
+
res.cookie(cookieName, newToken, cookieOptions);
|
|
225
236
|
res.setHeader(headerName, newToken);
|
|
226
237
|
}
|
|
227
238
|
return originalSend.call(this, body);
|
|
@@ -230,11 +241,7 @@ class XemsBuiltinPlugin {
|
|
|
230
241
|
res.json = function (data) {
|
|
231
242
|
const newToken = res._xemsNewToken;
|
|
232
243
|
if (newToken) {
|
|
233
|
-
res.cookie(cookieName, newToken,
|
|
234
|
-
httpOnly: true,
|
|
235
|
-
secure: true,
|
|
236
|
-
sameSite: "strict",
|
|
237
|
-
});
|
|
244
|
+
res.cookie(cookieName, newToken, cookieOptions);
|
|
238
245
|
res.setHeader(headerName, newToken);
|
|
239
246
|
}
|
|
240
247
|
return originalJson.call(this, data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XemsBuiltinPlugin.js","sources":["../../../../../../src/plugins/builtin/xems/XemsBuiltinPlugin.ts"],"sourcesContent":[null],"names":["Logger","XemsRunner","Configs"],"mappings":";;;;;;AAAA;;;;;;;AAOG;
|
|
1
|
+
{"version":3,"file":"XemsBuiltinPlugin.js","sources":["../../../../../../src/plugins/builtin/xems/XemsBuiltinPlugin.ts"],"sourcesContent":[null],"names":["Logger","XemsRunner","Configs"],"mappings":"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"}
|
|
@@ -8,8 +8,6 @@ var XyRequestManager = require('../core/request/XyRequestManager.js');
|
|
|
8
8
|
var forceClosePort = require('../utils/forceClosePort.js');
|
|
9
9
|
var ConsoleInterceptor = require('../components/fastapi/console/ConsoleInterceptor.js');
|
|
10
10
|
var securityMiddleware = require('../../middleware/security-middleware.js');
|
|
11
|
-
var XemsSessionMiddleware = require('../../middleware/XemsSessionMiddleware.js');
|
|
12
|
-
var _default = require('../const/default.js');
|
|
13
11
|
var MiddlewareManager = require('./MiddlewareManager.js');
|
|
14
12
|
var ShutdownManager = require('./ShutdownManager.js');
|
|
15
13
|
var LogTracingMethods = require('./LogTracingMethods.js');
|
|
@@ -101,10 +99,10 @@ class XyPrissServer {
|
|
|
101
99
|
if (this.options.security?.enabled) {
|
|
102
100
|
this.securityMiddleware = new securityMiddleware.SecurityMiddleware(this.options.security, this.logger);
|
|
103
101
|
this.app.use(this.securityMiddleware.getMiddleware());
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
102
|
+
// NOTE: XEMS session handling is done exclusively by XemsBuiltinPlugin.onRequest()
|
|
103
|
+
// which is registered via the plugin manager. Running xemsSession() here in parallel
|
|
104
|
+
// would cause a double resolveSession() — the first call may invalidate the token
|
|
105
|
+
// (if autoRotation=true) before the second can read it.
|
|
108
106
|
}
|
|
109
107
|
}
|
|
110
108
|
initializeServerPlugins() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/server/FastServer/index.ts"],"sourcesContent":[null],"names":["Configs","initializeLogger","ConsoleInterceptor","XyprissApp","XyRequestManager","MiddlewareManager","ShutdownManager","ComponentManager","UploadManager","LogTracingMethods","SecurityMiddleware","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/server/FastServer/index.ts"],"sourcesContent":[null],"names":["Configs","initializeLogger","ConsoleInterceptor","XyprissApp","XyRequestManager","MiddlewareManager","ShutdownManager","ComponentManager","UploadManager","LogTracingMethods","SecurityMiddleware","ServerPluginManager","Port","generateXUserTmpDir","localSysApi"],"mappings":"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"}
|
|
@@ -24,6 +24,11 @@ class XemsBuiltinPlugin {
|
|
|
24
24
|
autoRotation: true,
|
|
25
25
|
attachTo: "session",
|
|
26
26
|
gracePeriod: 1000,
|
|
27
|
+
cookieOptions: {
|
|
28
|
+
httpOnly: true,
|
|
29
|
+
secure: true,
|
|
30
|
+
sameSite: "Strict",
|
|
31
|
+
},
|
|
27
32
|
};
|
|
28
33
|
this.hasValidSecret = false;
|
|
29
34
|
this.logger = Logger.getInstance();
|
|
@@ -40,7 +45,7 @@ class XemsBuiltinPlugin {
|
|
|
40
45
|
// 1. Configuration Extraction
|
|
41
46
|
// Use local app config strictly to avoid global singleton pollution in multi-server/auxiliary modes
|
|
42
47
|
// If not explicitly configured, fallback to global defaults only if NOT an auxiliary server
|
|
43
|
-
let xemsOptions = app.configs?.server?.xems;
|
|
48
|
+
let xemsOptions = app.configs?.server?.xems || ConfigurationManager.get("server")?.xems;
|
|
44
49
|
if (!xemsOptions) {
|
|
45
50
|
if (app.configs?.isAuxiliary) {
|
|
46
51
|
// Auxiliary servers should NEVER auto-spawn persistence unless explicitly requested.
|
|
@@ -67,13 +72,18 @@ class XemsBuiltinPlugin {
|
|
|
67
72
|
autoRotation: xemsOptions.autoRotation !== false,
|
|
68
73
|
attachTo: xemsOptions.attachTo || "session",
|
|
69
74
|
gracePeriod: xemsOptions.gracePeriod || 1000,
|
|
75
|
+
cookieOptions: xemsOptions.cookieOptions ?? {
|
|
76
|
+
httpOnly: true,
|
|
77
|
+
secure: true,
|
|
78
|
+
sameSite: "Strict",
|
|
79
|
+
},
|
|
70
80
|
};
|
|
71
81
|
if (!isAuxiliary) {
|
|
72
82
|
logger.info("plugins", `XEMS Session Sandbox: ${this.sessionOptions.sandbox}`);
|
|
73
83
|
}
|
|
74
84
|
// Check for valid secret (mandatory for any XEMS API usage)
|
|
75
85
|
const secret = xemsOptions.persistence?.secret;
|
|
76
|
-
if (secret.length < 32) {
|
|
86
|
+
if (secret && secret.length < 32) {
|
|
77
87
|
this.hasValidSecret = false;
|
|
78
88
|
logger.error("plugins", "XEMS Persistence enabled but no valid 32-byte secret found.");
|
|
79
89
|
}
|
|
@@ -138,7 +148,7 @@ class XemsBuiltinPlugin {
|
|
|
138
148
|
* Native/Fast validation logic (runs on every request)
|
|
139
149
|
*/
|
|
140
150
|
async onRequest(req, res, next) {
|
|
141
|
-
const { sandbox, cookieName, headerName, ttl, autoRotation, attachTo } = this.sessionOptions;
|
|
151
|
+
const { sandbox, cookieName, headerName, ttl, autoRotation, attachTo, cookieOptions, } = this.sessionOptions;
|
|
142
152
|
const token = (req.cookies && req.cookies[cookieName]) ||
|
|
143
153
|
req.headers[headerName];
|
|
144
154
|
// 2. Inject xLink (Session Initiation)
|
|
@@ -168,11 +178,7 @@ class XemsBuiltinPlugin {
|
|
|
168
178
|
});
|
|
169
179
|
res._xemsNewToken = newToken;
|
|
170
180
|
// Apply immediately
|
|
171
|
-
res.cookie(cookieName, newToken,
|
|
172
|
-
httpOnly: true,
|
|
173
|
-
secure: true,
|
|
174
|
-
sameSite: "strict",
|
|
175
|
-
});
|
|
181
|
+
res.cookie(cookieName, newToken, cookieOptions);
|
|
176
182
|
res.setHeader(headerName, newToken);
|
|
177
183
|
req[actualAttachTo] = data;
|
|
178
184
|
return newToken;
|
|
@@ -195,31 +201,36 @@ class XemsBuiltinPlugin {
|
|
|
195
201
|
if (currentToken) {
|
|
196
202
|
await this.runner.from(actualSandbox).del(currentToken);
|
|
197
203
|
}
|
|
198
|
-
res.clearCookie(cookieName
|
|
204
|
+
res.clearCookie(cookieName, {
|
|
205
|
+
path: cookieOptions.path,
|
|
206
|
+
domain: cookieOptions.domain,
|
|
207
|
+
});
|
|
199
208
|
res.removeHeader(headerName);
|
|
200
209
|
req[actualAttachTo] = null;
|
|
201
210
|
};
|
|
202
211
|
// 3. Session Recovery & Rotation
|
|
203
212
|
if (token && this.hasValidSecret) {
|
|
204
213
|
try {
|
|
205
|
-
|
|
214
|
+
// Use resolveSession with rotate=autoRotation.
|
|
215
|
+
// When autoRotation=false, the token is read without being invalidated,
|
|
216
|
+
// so the browser cookie remains valid on subsequent requests.
|
|
217
|
+
const session = await this.runner.resolveSession(token, {
|
|
218
|
+
sandbox,
|
|
219
|
+
rotate: autoRotation,
|
|
206
220
|
ttl,
|
|
207
221
|
gracePeriod: this.sessionOptions.gracePeriod,
|
|
208
222
|
});
|
|
209
223
|
if (session) {
|
|
210
224
|
req[attachTo] = session.data;
|
|
211
|
-
|
|
225
|
+
// If a new token was issued (rotation happened), inject it into the
|
|
226
|
+
// response so the browser cookie stays in sync.
|
|
227
|
+
if (session.newToken) {
|
|
212
228
|
res._xemsNewToken = session.newToken;
|
|
213
|
-
// Intercept response methods to inject the rotated token
|
|
214
229
|
const originalSend = res.send;
|
|
215
230
|
res.send = function (body) {
|
|
216
231
|
const newToken = res._xemsNewToken;
|
|
217
232
|
if (newToken) {
|
|
218
|
-
res.cookie(cookieName, newToken,
|
|
219
|
-
httpOnly: true,
|
|
220
|
-
secure: true,
|
|
221
|
-
sameSite: "strict",
|
|
222
|
-
});
|
|
233
|
+
res.cookie(cookieName, newToken, cookieOptions);
|
|
223
234
|
res.setHeader(headerName, newToken);
|
|
224
235
|
}
|
|
225
236
|
return originalSend.call(this, body);
|
|
@@ -228,11 +239,7 @@ class XemsBuiltinPlugin {
|
|
|
228
239
|
res.json = function (data) {
|
|
229
240
|
const newToken = res._xemsNewToken;
|
|
230
241
|
if (newToken) {
|
|
231
|
-
res.cookie(cookieName, newToken,
|
|
232
|
-
httpOnly: true,
|
|
233
|
-
secure: true,
|
|
234
|
-
sameSite: "strict",
|
|
235
|
-
});
|
|
242
|
+
res.cookie(cookieName, newToken, cookieOptions);
|
|
236
243
|
res.setHeader(headerName, newToken);
|
|
237
244
|
}
|
|
238
245
|
return originalJson.call(this, data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XemsBuiltinPlugin.js","sources":["../../../../../../src/plugins/builtin/xems/XemsBuiltinPlugin.ts"],"sourcesContent":[null],"names":["Configs"],"mappings":";;;;AAAA;;;;;;;AAOG;
|
|
1
|
+
{"version":3,"file":"XemsBuiltinPlugin.js","sources":["../../../../../../src/plugins/builtin/xems/XemsBuiltinPlugin.ts"],"sourcesContent":[null],"names":["Configs"],"mappings":"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"}
|
|
@@ -6,8 +6,6 @@ import { XyRequestManager } from '../core/request/XyRequestManager.js';
|
|
|
6
6
|
import { Port } from '../utils/forceClosePort.js';
|
|
7
7
|
import { ConsoleInterceptor } from '../components/fastapi/console/ConsoleInterceptor.js';
|
|
8
8
|
import { SecurityMiddleware } from '../../middleware/security-middleware.js';
|
|
9
|
-
import { xemsSession } from '../../middleware/XemsSessionMiddleware.js';
|
|
10
|
-
import { DEFAULT_OPTIONS } from '../const/default.js';
|
|
11
9
|
import { MiddlewareManager } from './MiddlewareManager.js';
|
|
12
10
|
import { ShutdownManager } from './ShutdownManager.js';
|
|
13
11
|
import { LogTracingMethods } from './LogTracingMethods.js';
|
|
@@ -99,10 +97,10 @@ class XyPrissServer {
|
|
|
99
97
|
if (this.options.security?.enabled) {
|
|
100
98
|
this.securityMiddleware = new SecurityMiddleware(this.options.security, this.logger);
|
|
101
99
|
this.app.use(this.securityMiddleware.getMiddleware());
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
100
|
+
// NOTE: XEMS session handling is done exclusively by XemsBuiltinPlugin.onRequest()
|
|
101
|
+
// which is registered via the plugin manager. Running xemsSession() here in parallel
|
|
102
|
+
// would cause a double resolveSession() — the first call may invalidate the token
|
|
103
|
+
// (if autoRotation=true) before the second can read it.
|
|
106
104
|
}
|
|
107
105
|
}
|
|
108
106
|
initializeServerPlugins() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/server/FastServer/index.ts"],"sourcesContent":[null],"names":["Configs","localSysApi"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/server/FastServer/index.ts"],"sourcesContent":[null],"names":["Configs","localSysApi"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xypriss",
|
|
3
|
-
"version": "9.12.
|
|
3
|
+
"version": "9.12.12",
|
|
4
4
|
"description": "XyPriss is a high-performance, TypeScript-first hyper-system web framework powered by a native Go core (XHSC), featuring robust multi-tenant sandboxing, secure native file streaming, and zero Express dependencies.",
|
|
5
5
|
"author": {
|
|
6
6
|
"DEV.to": "https://dev.to/nehonix",
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var XemsPlugin = require('../plugins/builtin/xems/XemsPlugin.js');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* XEMS Session Middleware
|
|
7
|
-
* Implements the "Moving Target Defense" for sessions by rotating tokens on every request.
|
|
8
|
-
*/
|
|
9
|
-
function xemsSession(options) {
|
|
10
|
-
// const op;
|
|
11
|
-
const sandbox = options.sandbox || "auth-session";
|
|
12
|
-
const cookieName = options.cookieName || "xems_token";
|
|
13
|
-
const headerName = options.headerName || "x-xypriss-token";
|
|
14
|
-
const ttl = options.ttl || "15m";
|
|
15
|
-
const attachTo = options.attachTo || "session";
|
|
16
|
-
const autoRotation = options.autoRotation !== false;
|
|
17
|
-
const cookieOptions = options.cookieOptions;
|
|
18
|
-
return async (req, res, next) => {
|
|
19
|
-
// 0. Get the correct XEMS runner (handles persistence from app config)
|
|
20
|
-
const runner = XemsPlugin.xems.forApp(req.app);
|
|
21
|
-
// 1. Extract token from Cookie or Header
|
|
22
|
-
let token = req.cookies[cookieName] || req.headers[headerName];
|
|
23
|
-
// 2. Add a helper to initialize a session (xLink)
|
|
24
|
-
res.xLink = async (data, linkOptions) => {
|
|
25
|
-
let actualSandbox = sandbox;
|
|
26
|
-
let actualAttachTo = attachTo;
|
|
27
|
-
let actualTtl = ttl;
|
|
28
|
-
if (typeof linkOptions === "string") {
|
|
29
|
-
actualSandbox = linkOptions;
|
|
30
|
-
}
|
|
31
|
-
else if (linkOptions) {
|
|
32
|
-
if (linkOptions.sandbox)
|
|
33
|
-
actualSandbox = linkOptions.sandbox;
|
|
34
|
-
if (linkOptions.attachTo)
|
|
35
|
-
actualAttachTo = linkOptions.attachTo;
|
|
36
|
-
if (linkOptions.ttl)
|
|
37
|
-
actualTtl = linkOptions.ttl;
|
|
38
|
-
}
|
|
39
|
-
const newToken = await runner.createSession(actualSandbox, data, {
|
|
40
|
-
ttl: actualTtl,
|
|
41
|
-
});
|
|
42
|
-
res._xemsNewToken = newToken;
|
|
43
|
-
// Apply immediately to current response
|
|
44
|
-
res.cookie(cookieName, newToken, cookieOptions);
|
|
45
|
-
res.setHeader(headerName, newToken);
|
|
46
|
-
req[actualAttachTo] = data;
|
|
47
|
-
return newToken;
|
|
48
|
-
};
|
|
49
|
-
// 2b. Add a helper to destroy a session (xUnlink)
|
|
50
|
-
res.xUnlink = async (unlinkOptions) => {
|
|
51
|
-
let actualSandbox = sandbox;
|
|
52
|
-
let actualAttachTo = attachTo;
|
|
53
|
-
if (typeof unlinkOptions === "string") {
|
|
54
|
-
actualSandbox = unlinkOptions;
|
|
55
|
-
}
|
|
56
|
-
else if (unlinkOptions) {
|
|
57
|
-
if (unlinkOptions.sandbox)
|
|
58
|
-
actualSandbox = unlinkOptions.sandbox;
|
|
59
|
-
if (unlinkOptions.attachTo)
|
|
60
|
-
actualAttachTo = unlinkOptions.attachTo;
|
|
61
|
-
}
|
|
62
|
-
const currentToken = req.cookies[cookieName] || req.headers[headerName];
|
|
63
|
-
if (currentToken) {
|
|
64
|
-
await runner.from(actualSandbox).del(currentToken);
|
|
65
|
-
}
|
|
66
|
-
res.clearCookie(cookieName);
|
|
67
|
-
res.removeHeader(headerName);
|
|
68
|
-
req[actualAttachTo] = null;
|
|
69
|
-
};
|
|
70
|
-
if (token) {
|
|
71
|
-
try {
|
|
72
|
-
// 3. Read session data and perform rotation
|
|
73
|
-
const session = await runner.resolveSession(token, {
|
|
74
|
-
sandbox,
|
|
75
|
-
rotate: autoRotation,
|
|
76
|
-
ttl,
|
|
77
|
-
});
|
|
78
|
-
if (session) {
|
|
79
|
-
// Attach data to request
|
|
80
|
-
req[attachTo] = session.data;
|
|
81
|
-
if (autoRotation && session.newToken) {
|
|
82
|
-
// Store new token for response injection
|
|
83
|
-
res._xemsNewToken = session.newToken;
|
|
84
|
-
// Intercept response methods to inject the new token
|
|
85
|
-
const originalSend = res.send;
|
|
86
|
-
res.send = function (body) {
|
|
87
|
-
if (res._xemsNewToken) {
|
|
88
|
-
res.cookie(cookieName, res._xemsNewToken, cookieOptions);
|
|
89
|
-
res.setHeader(headerName, res._xemsNewToken);
|
|
90
|
-
}
|
|
91
|
-
return originalSend.call(this, body);
|
|
92
|
-
};
|
|
93
|
-
// Also intercept json
|
|
94
|
-
const originalJson = res.json;
|
|
95
|
-
res.json = function (data) {
|
|
96
|
-
if (res._xemsNewToken) {
|
|
97
|
-
res.cookie(cookieName, res._xemsNewToken, cookieOptions);
|
|
98
|
-
res.setHeader(headerName, res._xemsNewToken);
|
|
99
|
-
}
|
|
100
|
-
return originalJson.call(this, data);
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
// Session might be expired or invalid, we just let it pass
|
|
107
|
-
// The dev can check if req.session exists in their handlers
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
next();
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
exports.xemsSession = xemsSession;
|
|
115
|
-
//# sourceMappingURL=XemsSessionMiddleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"XemsSessionMiddleware.js","sources":["../../../../src/middleware/XemsSessionMiddleware.ts"],"sourcesContent":[null],"names":["xems"],"mappings":"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"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { xems } from '../plugins/builtin/xems/XemsPlugin.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* XEMS Session Middleware
|
|
5
|
-
* Implements the "Moving Target Defense" for sessions by rotating tokens on every request.
|
|
6
|
-
*/
|
|
7
|
-
function xemsSession(options) {
|
|
8
|
-
// const op;
|
|
9
|
-
const sandbox = options.sandbox || "auth-session";
|
|
10
|
-
const cookieName = options.cookieName || "xems_token";
|
|
11
|
-
const headerName = options.headerName || "x-xypriss-token";
|
|
12
|
-
const ttl = options.ttl || "15m";
|
|
13
|
-
const attachTo = options.attachTo || "session";
|
|
14
|
-
const autoRotation = options.autoRotation !== false;
|
|
15
|
-
const cookieOptions = options.cookieOptions;
|
|
16
|
-
return async (req, res, next) => {
|
|
17
|
-
// 0. Get the correct XEMS runner (handles persistence from app config)
|
|
18
|
-
const runner = xems.forApp(req.app);
|
|
19
|
-
// 1. Extract token from Cookie or Header
|
|
20
|
-
let token = req.cookies[cookieName] || req.headers[headerName];
|
|
21
|
-
// 2. Add a helper to initialize a session (xLink)
|
|
22
|
-
res.xLink = async (data, linkOptions) => {
|
|
23
|
-
let actualSandbox = sandbox;
|
|
24
|
-
let actualAttachTo = attachTo;
|
|
25
|
-
let actualTtl = ttl;
|
|
26
|
-
if (typeof linkOptions === "string") {
|
|
27
|
-
actualSandbox = linkOptions;
|
|
28
|
-
}
|
|
29
|
-
else if (linkOptions) {
|
|
30
|
-
if (linkOptions.sandbox)
|
|
31
|
-
actualSandbox = linkOptions.sandbox;
|
|
32
|
-
if (linkOptions.attachTo)
|
|
33
|
-
actualAttachTo = linkOptions.attachTo;
|
|
34
|
-
if (linkOptions.ttl)
|
|
35
|
-
actualTtl = linkOptions.ttl;
|
|
36
|
-
}
|
|
37
|
-
const newToken = await runner.createSession(actualSandbox, data, {
|
|
38
|
-
ttl: actualTtl,
|
|
39
|
-
});
|
|
40
|
-
res._xemsNewToken = newToken;
|
|
41
|
-
// Apply immediately to current response
|
|
42
|
-
res.cookie(cookieName, newToken, cookieOptions);
|
|
43
|
-
res.setHeader(headerName, newToken);
|
|
44
|
-
req[actualAttachTo] = data;
|
|
45
|
-
return newToken;
|
|
46
|
-
};
|
|
47
|
-
// 2b. Add a helper to destroy a session (xUnlink)
|
|
48
|
-
res.xUnlink = async (unlinkOptions) => {
|
|
49
|
-
let actualSandbox = sandbox;
|
|
50
|
-
let actualAttachTo = attachTo;
|
|
51
|
-
if (typeof unlinkOptions === "string") {
|
|
52
|
-
actualSandbox = unlinkOptions;
|
|
53
|
-
}
|
|
54
|
-
else if (unlinkOptions) {
|
|
55
|
-
if (unlinkOptions.sandbox)
|
|
56
|
-
actualSandbox = unlinkOptions.sandbox;
|
|
57
|
-
if (unlinkOptions.attachTo)
|
|
58
|
-
actualAttachTo = unlinkOptions.attachTo;
|
|
59
|
-
}
|
|
60
|
-
const currentToken = req.cookies[cookieName] || req.headers[headerName];
|
|
61
|
-
if (currentToken) {
|
|
62
|
-
await runner.from(actualSandbox).del(currentToken);
|
|
63
|
-
}
|
|
64
|
-
res.clearCookie(cookieName);
|
|
65
|
-
res.removeHeader(headerName);
|
|
66
|
-
req[actualAttachTo] = null;
|
|
67
|
-
};
|
|
68
|
-
if (token) {
|
|
69
|
-
try {
|
|
70
|
-
// 3. Read session data and perform rotation
|
|
71
|
-
const session = await runner.resolveSession(token, {
|
|
72
|
-
sandbox,
|
|
73
|
-
rotate: autoRotation,
|
|
74
|
-
ttl,
|
|
75
|
-
});
|
|
76
|
-
if (session) {
|
|
77
|
-
// Attach data to request
|
|
78
|
-
req[attachTo] = session.data;
|
|
79
|
-
if (autoRotation && session.newToken) {
|
|
80
|
-
// Store new token for response injection
|
|
81
|
-
res._xemsNewToken = session.newToken;
|
|
82
|
-
// Intercept response methods to inject the new token
|
|
83
|
-
const originalSend = res.send;
|
|
84
|
-
res.send = function (body) {
|
|
85
|
-
if (res._xemsNewToken) {
|
|
86
|
-
res.cookie(cookieName, res._xemsNewToken, cookieOptions);
|
|
87
|
-
res.setHeader(headerName, res._xemsNewToken);
|
|
88
|
-
}
|
|
89
|
-
return originalSend.call(this, body);
|
|
90
|
-
};
|
|
91
|
-
// Also intercept json
|
|
92
|
-
const originalJson = res.json;
|
|
93
|
-
res.json = function (data) {
|
|
94
|
-
if (res._xemsNewToken) {
|
|
95
|
-
res.cookie(cookieName, res._xemsNewToken, cookieOptions);
|
|
96
|
-
res.setHeader(headerName, res._xemsNewToken);
|
|
97
|
-
}
|
|
98
|
-
return originalJson.call(this, data);
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
// Session might be expired or invalid, we just let it pass
|
|
105
|
-
// The dev can check if req.session exists in their handlers
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
next();
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export { xemsSession };
|
|
113
|
-
//# sourceMappingURL=XemsSessionMiddleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"XemsSessionMiddleware.js","sources":["../../../../src/middleware/XemsSessionMiddleware.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|