@proteinjs/user-server 1.10.1 → 1.10.3
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 +22 -0
- package/dist/src/authentication/establishSession.d.ts +9 -2
- package/dist/src/authentication/establishSession.d.ts.map +1 -1
- package/dist/src/authentication/establishSession.js +23 -5
- package/dist/src/authentication/establishSession.js.map +1 -1
- package/dist/src/routes/avatar.d.ts +4 -1
- package/dist/src/routes/avatar.d.ts.map +1 -1
- package/dist/src/routes/avatar.js +5 -2
- package/dist/src/routes/avatar.js.map +1 -1
- package/dist/test/DevLoginStaleCookieFirstHit.test.d.ts +2 -0
- package/dist/test/DevLoginStaleCookieFirstHit.test.d.ts.map +1 -0
- package/dist/test/DevLoginStaleCookieFirstHit.test.js +401 -0
- package/dist/test/DevLoginStaleCookieFirstHit.test.js.map +1 -0
- package/dist/test/EstablishSessionRuntimeContract.test.d.ts +2 -0
- package/dist/test/EstablishSessionRuntimeContract.test.d.ts.map +1 -0
- package/dist/test/EstablishSessionRuntimeContract.test.js +114 -0
- package/dist/test/EstablishSessionRuntimeContract.test.js.map +1 -0
- package/dist/test/MachineAccounts.integration.test.js.map +1 -1
- package/dist/test/UpdateUserInfoAvatar.test.js +5 -3
- package/dist/test/UpdateUserInfoAvatar.test.js.map +1 -1
- package/package.json +2 -2
- package/src/authentication/establishSession.ts +20 -2
- package/src/routes/avatar.ts +5 -2
- package/test/DevLoginStaleCookieFirstHit.test.ts +304 -0
- package/test/EstablishSessionRuntimeContract.test.ts +54 -0
- package/test/UpdateUserInfoAvatar.test.ts +3 -2
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
var establishSession_1 = require("../src/authentication/establishSession");
|
|
40
|
+
var passportSessionHarness_1 = require("./passportSessionHarness");
|
|
41
|
+
/**
|
|
42
|
+
* establishSession's post-condition: `request.login` must have REPLACED `request.session`
|
|
43
|
+
* (express-session's regenerate always assigns a fresh Session object — the fresh sid the
|
|
44
|
+
* commit-before-response save then writes under). Passport 0.6 honors that on every login;
|
|
45
|
+
* a pre-0.6 passport runtime (@proteinjs/server < 3.5.1) resolves the login WITHOUT
|
|
46
|
+
* regenerating or saving — silently reopening the session-fixation hole (CVE-2022-25896) AND
|
|
47
|
+
* the first-hit race (the post-login navigation beating the deferred session write — the
|
|
48
|
+
* /dev/login lands-on-login-form smoke finding, DEV_SMOKE_OVERNIGHT 2026-08-26 #7).
|
|
49
|
+
*
|
|
50
|
+
* The guard turns that silent degradation into a loud, seam-naming failure at the one owner of
|
|
51
|
+
* session establishment. DevLoginStaleCookieFirstHit.test.ts proves the honored contract
|
|
52
|
+
* through the real middleware stack; this suite pins the refusal when the runtime cannot honor
|
|
53
|
+
* it.
|
|
54
|
+
*/
|
|
55
|
+
describe('establishSession runtime contract', function () {
|
|
56
|
+
it('rejects, naming the seam, when login resolves without replacing the session (pre-0.6 passport shape)', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
57
|
+
var session, request;
|
|
58
|
+
return __generator(this, function (_a) {
|
|
59
|
+
switch (_a.label) {
|
|
60
|
+
case 0:
|
|
61
|
+
session = {};
|
|
62
|
+
request = {
|
|
63
|
+
session: session,
|
|
64
|
+
login: function (user, cb) {
|
|
65
|
+
// passport 0.4's SessionManager.logIn: bind onto the SAME session object, no
|
|
66
|
+
// regenerate, no save — the stale-runtime shape the guard must refuse.
|
|
67
|
+
session.passport = { user: user };
|
|
68
|
+
cb();
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
return [4 /*yield*/, expect((0, establishSession_1.establishSession)(request, 'dev@test.local')).rejects.toThrow(/@proteinjs\/server/)];
|
|
72
|
+
case 1:
|
|
73
|
+
_a.sent();
|
|
74
|
+
return [2 /*return*/];
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}); });
|
|
78
|
+
it('resolves through the real passport 0.6 machinery, user bound on the post-regeneration session', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
79
|
+
var _a, request, events;
|
|
80
|
+
return __generator(this, function (_b) {
|
|
81
|
+
switch (_b.label) {
|
|
82
|
+
case 0: return [4 /*yield*/, (0, passportSessionHarness_1.createPassportRequest)()];
|
|
83
|
+
case 1:
|
|
84
|
+
_a = _b.sent(), request = _a.request, events = _a.events;
|
|
85
|
+
return [4 /*yield*/, (0, establishSession_1.establishSession)(request, 'dev@test.local')];
|
|
86
|
+
case 2:
|
|
87
|
+
_b.sent();
|
|
88
|
+
expect(request.session.passport.user).toBe('dev@test.local');
|
|
89
|
+
expect(events).toEqual(['regenerate', 'login', 'save']);
|
|
90
|
+
return [2 /*return*/];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}); });
|
|
94
|
+
it('still surfaces a login failure as a rejection (never as the contract error)', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
95
|
+
var loginError, request;
|
|
96
|
+
return __generator(this, function (_a) {
|
|
97
|
+
switch (_a.label) {
|
|
98
|
+
case 0:
|
|
99
|
+
loginError = new Error('serialize blew up');
|
|
100
|
+
request = {
|
|
101
|
+
session: {},
|
|
102
|
+
login: function (_user, cb) {
|
|
103
|
+
cb(loginError);
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
return [4 /*yield*/, expect((0, establishSession_1.establishSession)(request, 'dev@test.local')).rejects.toThrow('serialize blew up')];
|
|
107
|
+
case 1:
|
|
108
|
+
_a.sent();
|
|
109
|
+
return [2 /*return*/];
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}); });
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=EstablishSessionRuntimeContract.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EstablishSessionRuntimeContract.test.js","sourceRoot":"","sources":["../../test/EstablishSessionRuntimeContract.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2EAA0E;AAC1E,mEAAiE;AAEjE;;;;;;;;;;;;;GAaG;AACH,QAAQ,CAAC,mCAAmC,EAAE;IAC5C,EAAE,CAAC,sGAAsG,EAAE;;;;;oBACnG,OAAO,GAA4B,EAAE,CAAC;oBACtC,OAAO,GAAG;wBACd,OAAO,SAAA;wBACP,KAAK,YAAC,IAAY,EAAE,EAA6B;4BAC/C,6EAA6E;4BAC7E,uEAAuE;4BACvE,OAAO,CAAC,QAAQ,GAAG,EAAE,IAAI,MAAA,EAAE,CAAC;4BAC5B,EAAE,EAAE,CAAC;wBACP,CAAC;qBACF,CAAC;oBAEF,qBAAM,MAAM,CAAC,IAAA,mCAAgB,EAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAA;;oBAA/F,SAA+F,CAAC;;;;SACjG,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE;;;;wBACtE,qBAAM,IAAA,8CAAqB,GAAE,EAAA;;oBAAnD,KAAsB,SAA6B,EAAjD,OAAO,aAAA,EAAE,MAAM,YAAA;oBAEvB,qBAAM,IAAA,mCAAgB,EAAC,OAAO,EAAE,gBAAgB,CAAC,EAAA;;oBAAjD,SAAiD,CAAC;oBAElD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;;;;SACzD,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE;;;;;oBAC1E,UAAU,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;oBAC5C,OAAO,GAAG;wBACd,OAAO,EAAE,EAAE;wBACX,KAAK,YAAC,KAAa,EAAE,EAA6B;4BAChD,EAAE,CAAC,UAAU,CAAC,CAAC;wBACjB,CAAC;qBACF,CAAC;oBAEF,qBAAM,MAAM,CAAC,IAAA,mCAAgB,EAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAA;;oBAA9F,SAA8F,CAAC;;;;SAChG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MachineAccounts.integration.test.js","sourceRoot":"","sources":["../../test/MachineAccounts.integration.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MachineAccounts.integration.test.js","sourceRoot":"","sources":["../../test/MachineAccounts.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -154,14 +154,16 @@ describe('UpdateUserInfo avatar mutations', function () {
|
|
|
154
154
|
case 4:
|
|
155
155
|
second = _d.sent();
|
|
156
156
|
expect(second.avatarFileId).not.toBe(first.avatarFileId);
|
|
157
|
-
// The prior file is gone — row and bytes
|
|
157
|
+
// The prior file is gone — row and bytes (the byte store checked directly through the
|
|
158
|
+
// driver: the gated service read now refuses ids with no readable row by design).
|
|
158
159
|
_a = expect;
|
|
159
160
|
return [4 /*yield*/, getFileRow(first.avatarFileId)];
|
|
160
161
|
case 5:
|
|
161
|
-
// The prior file is gone — row and bytes
|
|
162
|
+
// The prior file is gone — row and bytes (the byte store checked directly through the
|
|
163
|
+
// driver: the gated service read now refuses ids with no readable row by design).
|
|
162
164
|
_a.apply(void 0, [_d.sent()]).toBeFalsy();
|
|
163
165
|
_b = expect;
|
|
164
|
-
return [4 /*yield*/,
|
|
166
|
+
return [4 /*yield*/, db_file_1.FileStorage.getDriver().getFileData(first.avatarFileId)];
|
|
165
167
|
case 6:
|
|
166
168
|
_b.apply(void 0, [_d.sent()]).toBe('');
|
|
167
169
|
// The new one is intact.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateUserInfoAvatar.test.js","sourceRoot":"","sources":["../../test/UpdateUserInfoAvatar.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"UpdateUserInfoAvatar.test.js","sourceRoot":"","sources":["../../test/UpdateUserInfoAvatar.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proteinjs/user-server",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.3",
|
|
4
4
|
"description": "User server components",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
},
|
|
59
59
|
"main": "./dist/generated/index.js",
|
|
60
60
|
"types": "./dist/generated/index.d.ts",
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "00b7841c0ca784fde742bc9ad187b216e348c500"
|
|
62
62
|
}
|
|
@@ -19,15 +19,33 @@
|
|
|
19
19
|
* real passport machinery.
|
|
20
20
|
*
|
|
21
21
|
* COUPLED to the passport 0.6 upgrade in @proteinjs/server (which supplies the runtime passport
|
|
22
|
-
* middleware): under passport 0.4, `request.login` neither regenerates nor saves
|
|
23
|
-
*
|
|
22
|
+
* middleware): under passport 0.4, `request.login` neither regenerates nor saves. That skew is
|
|
23
|
+
* NOT silent here: the post-login guard below verifies the one observable trace of the contract —
|
|
24
|
+
* express-session's regenerate always REPLACES `request.session` with a fresh Session — and
|
|
25
|
+
* REFUSES (rejects) when the session object survived the login. A pre-0.6 runtime (a stale
|
|
26
|
+
* @proteinjs/server < 3.5.1 checkout symlinked into a dev workspace, live-observed as
|
|
27
|
+
* DEV_SMOKE_OVERNIGHT 2026-08-26 finding 7: /dev/login's redirected navigation raced the
|
|
28
|
+
* deferred session write and landed on the login form) then fails loudly at the seam instead of
|
|
29
|
+
* degrading into fixation-vulnerable, race-prone logins. The guard is a post-condition, not a
|
|
30
|
+
* fallback — establishSession never does passport's regenerate/save itself.
|
|
24
31
|
*
|
|
25
32
|
* `request` is typed loosely because passport augments the express request at runtime; the
|
|
26
33
|
* routes in this package share that convention. A login failure (regenerate/serialize/save
|
|
27
34
|
* error) rejects — a door must never answer success for a session that did not commit.
|
|
28
35
|
*/
|
|
29
36
|
export async function establishSession(request: any, email: string): Promise<void> {
|
|
37
|
+
const preLoginSession = request.session;
|
|
30
38
|
await new Promise<void>((resolve, reject) =>
|
|
31
39
|
request.login(email, (error: unknown) => (error ? reject(error) : resolve()))
|
|
32
40
|
);
|
|
41
|
+
if (request.session === preLoginSession) {
|
|
42
|
+
throw new Error(
|
|
43
|
+
'establishSession: request.login resolved without replacing request.session, so the runtime passport ' +
|
|
44
|
+
'did not regenerate the session id (pre-0.6 shape — the runtime middleware comes from ' +
|
|
45
|
+
'@proteinjs/server, which supplies passport 0.6 as of 3.5.1; check for a stale checkout or ' +
|
|
46
|
+
'node_modules). Refusing to answer success: without regenerate → save-before-response, the ' +
|
|
47
|
+
'post-login navigation races the session write (first hit lands unauthenticated) and session ' +
|
|
48
|
+
'fixation (CVE-2022-25896) reopens.'
|
|
49
|
+
);
|
|
50
|
+
}
|
|
33
51
|
}
|
package/src/routes/avatar.ts
CHANGED
|
@@ -15,7 +15,10 @@ const logger = new Logger({ name: 'avatarRoute' });
|
|
|
15
15
|
* System-read surface is exactly: the user row (for `avatarFileId`), that one file row (for the
|
|
16
16
|
* Content-Type), and its bytes. The file id is never taken from the request — only the id stored
|
|
17
17
|
* on the user row is served, so this can never read arbitrary files. `:userId` is a keyed lookup
|
|
18
|
-
* (no path/filesystem interpretation).
|
|
18
|
+
* (no path/filesystem interpretation). Bytes come through the deliberately-unscoped DRIVER read:
|
|
19
|
+
* the route has already made its own access decision above, and the gated service read
|
|
20
|
+
* (`FileStorage.getFileData` — the caller's row-read as the byte-access check) would refuse every
|
|
21
|
+
* viewer but the avatar's owner.
|
|
19
22
|
*
|
|
20
23
|
* Cache contract (mirrored by `avatarRoute` in @proteinjs/user routes.ts): the path is stable per
|
|
21
24
|
* user, so responses carry `max-age=86400, immutable`; clients bust with `?v=<avatarFileId>`,
|
|
@@ -45,7 +48,7 @@ export const avatar: Route = {
|
|
|
45
48
|
return;
|
|
46
49
|
}
|
|
47
50
|
|
|
48
|
-
const fileDataBase64 = await
|
|
51
|
+
const fileDataBase64 = await FileStorage.getDriver().getFileData(file.id);
|
|
49
52
|
response.setHeader('Content-Type', file.type);
|
|
50
53
|
response.setHeader('Cache-Control', 'public, max-age=86400, immutable');
|
|
51
54
|
response.send(Buffer.from(fileDataBase64, 'base64'));
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import http from 'http';
|
|
2
|
+
import { AddressInfo } from 'net';
|
|
3
|
+
import expressSession, { Store } from 'express-session';
|
|
4
|
+
import passport from 'passport';
|
|
5
|
+
import { devLogin } from '../src/routes/devLogin';
|
|
6
|
+
import { UserServerTestEnvironment } from './UserServerTestEnvironment';
|
|
7
|
+
|
|
8
|
+
const testEnv = new UserServerTestEnvironment();
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* DEV_SMOKE_OVERNIGHT (2026-08-26) finding 7: a browser holding a STALE session cookie (a sid
|
|
12
|
+
* absent from the store — prior server generation, swept row, or reseeded dev db) hits
|
|
13
|
+
* `GET /dev/login`, gets the 302, and lands on the LOGIN FORM; the second hit lands home.
|
|
14
|
+
*
|
|
15
|
+
* The mechanism is write-ordering at the session-establishment seam: a browser follows a redirect
|
|
16
|
+
* the moment RESPONSE HEADERS arrive — it never waits for the body. So the session row for the
|
|
17
|
+
* sid named by the 302's Set-Cookie must be COMMITTED to the store before those headers flush.
|
|
18
|
+
* passport 0.6's `request.login` guarantees exactly that (regenerate → bind → save, committed
|
|
19
|
+
* before the login callback — see establishSession); under a pre-0.6 passport runtime the save
|
|
20
|
+
* is deferred to express-session's end-of-response proxy, whose split-response write flushes the
|
|
21
|
+
* 302's headers BEFORE the store write commits — the redirected navigation races the commit and
|
|
22
|
+
* loses, reads no session, and the SPA routes to /login.
|
|
23
|
+
*
|
|
24
|
+
* This suite drives the REAL stack a browser meets — express-session 1.17.1 (the exact
|
|
25
|
+
* @proteinjs/server configureSession options and dev cookie-name shape) + real passport +
|
|
26
|
+
* the devLogin route — against a store with honest commit latency, and asserts the contract
|
|
27
|
+
* from the client's side: follow the 302 the instant headers arrive, carrying exactly the
|
|
28
|
+
* cookies the response set, and the follow-up MUST read as authenticated on the FIRST pass.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
const SESSION_COOKIE_NAME = 'n3xa.sid.9876'; // dev cookie-name shape: n3xa.sid.${SERVER_PORT}
|
|
32
|
+
const SESSION_SECRET = 'dev-first-hit-test-secret';
|
|
33
|
+
const ENV_EMAIL = 'dev@test.local';
|
|
34
|
+
/** Store commit latency. Generous so a pre-0.6 runtime (write racing the redirect) loses the
|
|
35
|
+
* race DETERMINISTICALLY; under the passport 0.6 contract the row commits before the redirect
|
|
36
|
+
* is even issued, so green never depends on this number. */
|
|
37
|
+
const COMMIT_LATENCY_MS = 150;
|
|
38
|
+
const READ_LATENCY_MS = 5;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* In-memory session store with DbSessionStore's contract: callbacks fire only after the
|
|
42
|
+
* operation commits, and commits take real time (Spanner in dev). Rows are inspectable so the
|
|
43
|
+
* test can assert store truth directly and clear it to model a next server generation.
|
|
44
|
+
*/
|
|
45
|
+
class CommitLatencySessionStore extends Store {
|
|
46
|
+
readonly rows = new Map<string, string>();
|
|
47
|
+
|
|
48
|
+
get = (sessionId: string, cb: (error: unknown, session?: Express.SessionData | null) => void) => {
|
|
49
|
+
const timer = setTimeout(() => {
|
|
50
|
+
const row = this.rows.get(sessionId);
|
|
51
|
+
cb(null, row ? JSON.parse(row) : undefined);
|
|
52
|
+
}, READ_LATENCY_MS);
|
|
53
|
+
timer.unref();
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
set = (sessionId: string, session: Express.SessionData, cb?: (error?: unknown) => void) => {
|
|
57
|
+
const timer = setTimeout(() => {
|
|
58
|
+
this.rows.set(sessionId, JSON.stringify(session));
|
|
59
|
+
if (cb) {
|
|
60
|
+
cb();
|
|
61
|
+
}
|
|
62
|
+
}, COMMIT_LATENCY_MS);
|
|
63
|
+
timer.unref();
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
destroy = (sessionId: string, cb?: (error?: unknown) => void) => {
|
|
67
|
+
const timer = setTimeout(() => {
|
|
68
|
+
this.rows.delete(sessionId);
|
|
69
|
+
if (cb) {
|
|
70
|
+
cb();
|
|
71
|
+
}
|
|
72
|
+
}, READ_LATENCY_MS);
|
|
73
|
+
timer.unref();
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
type Middleware = (req: unknown, res: unknown, next: (error?: unknown) => void) => void;
|
|
78
|
+
|
|
79
|
+
type ClientResponse = { statusCode?: number; headers: http.IncomingHttpHeaders; body?: string };
|
|
80
|
+
|
|
81
|
+
describe('devLogin first hit through the real session middleware stack', () => {
|
|
82
|
+
const originalEnv = {
|
|
83
|
+
DEVELOPMENT: process.env.DEVELOPMENT,
|
|
84
|
+
DEV_AUTO_LOGIN_EMAIL: process.env.DEV_AUTO_LOGIN_EMAIL,
|
|
85
|
+
};
|
|
86
|
+
const store = new CommitLatencySessionStore();
|
|
87
|
+
let server: http.Server;
|
|
88
|
+
let port: number;
|
|
89
|
+
|
|
90
|
+
beforeAll(async () => {
|
|
91
|
+
await testEnv.beforeAll();
|
|
92
|
+
await testEnv.createUser({ name: 'Dev Default', email: ENV_EMAIL });
|
|
93
|
+
server = createServerWithRealSessionStack(store);
|
|
94
|
+
await new Promise<void>((resolve) => server.listen(0, resolve));
|
|
95
|
+
port = (server.address() as AddressInfo).port;
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
afterAll(async () => {
|
|
99
|
+
await new Promise<void>((resolve, reject) => server.close((error) => (error ? reject(error) : resolve())));
|
|
100
|
+
await testEnv.afterAll();
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
beforeEach(() => {
|
|
104
|
+
process.env.DEVELOPMENT = 'true';
|
|
105
|
+
process.env.DEV_AUTO_LOGIN_EMAIL = ENV_EMAIL;
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
afterEach(() => {
|
|
109
|
+
for (const [key, value] of Object.entries(originalEnv)) {
|
|
110
|
+
if (value === undefined) {
|
|
111
|
+
delete process.env[key];
|
|
112
|
+
} else {
|
|
113
|
+
process.env[key] = value;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('stale-cookie first hit: following the 302 on HEADERS reads as authenticated, first pass', async () => {
|
|
119
|
+
// A genuinely stale cookie: minted by a prior hit (valid signature, real sid), then the
|
|
120
|
+
// store loses the row — a prior server generation against a reseeded/swept dev db.
|
|
121
|
+
const priorHit = await request(port, '/dev/login', { waitForBody: true });
|
|
122
|
+
const staleCookie = sessionCookiePair(priorHit);
|
|
123
|
+
store.rows.clear();
|
|
124
|
+
|
|
125
|
+
// First hit with the stale cookie. Resolve on response HEADERS — the moment a browser
|
|
126
|
+
// starts the redirected navigation — never on body completion.
|
|
127
|
+
const firstHit = await request(port, '/dev/login', { cookie: staleCookie });
|
|
128
|
+
expect(firstHit.statusCode).toBe(302);
|
|
129
|
+
expect(firstHit.headers.location).toBe('/');
|
|
130
|
+
|
|
131
|
+
// The 302 must mint a fresh sid (the stale sid must not be resurrected)...
|
|
132
|
+
const followUpCookie = sessionCookiePair(firstHit);
|
|
133
|
+
expect(sidOf(followUpCookie)).not.toBe(sidOf(staleCookie));
|
|
134
|
+
|
|
135
|
+
// ...whose session row is ALREADY COMMITTED: the immediate follow-up navigation, carrying
|
|
136
|
+
// exactly the cookies the response set, reads as authenticated on the FIRST pass.
|
|
137
|
+
const followUp = await request(port, '/whoami', { cookie: followUpCookie, waitForBody: true });
|
|
138
|
+
expect(JSON.parse(followUp.body!)).toEqual({ user: ENV_EMAIL });
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it('cookieless first hit: same first-pass guarantee for a fresh browser', async () => {
|
|
142
|
+
store.rows.clear();
|
|
143
|
+
|
|
144
|
+
const firstHit = await request(port, '/dev/login');
|
|
145
|
+
expect(firstHit.statusCode).toBe(302);
|
|
146
|
+
|
|
147
|
+
const followUp = await request(port, '/whoami', { cookie: sessionCookiePair(firstHit), waitForBody: true });
|
|
148
|
+
expect(JSON.parse(followUp.body!)).toEqual({ user: ENV_EMAIL });
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* The real middleware stack a request traverses in front of the route — express-session with
|
|
154
|
+
* @proteinjs/server configureSession's exact options (resave: false, saveUninitialized: false,
|
|
155
|
+
* rolling: true, the dev port-scoped cookie name) + passport initialize/session with the
|
|
156
|
+
* identity (de)serialization @proteinjs/server registers — on a raw node http server, so
|
|
157
|
+
* header-flush timing is the genuine article.
|
|
158
|
+
*/
|
|
159
|
+
function createServerWithRealSessionStack(store: Store): http.Server {
|
|
160
|
+
const sixtyDays = 1000 * 60 * 60 * 24 * 60;
|
|
161
|
+
const sessionMiddleware = expressSession({
|
|
162
|
+
name: SESSION_COOKIE_NAME,
|
|
163
|
+
secret: SESSION_SECRET,
|
|
164
|
+
store,
|
|
165
|
+
resave: false,
|
|
166
|
+
saveUninitialized: false,
|
|
167
|
+
cookie: { maxAge: sixtyDays },
|
|
168
|
+
rolling: true,
|
|
169
|
+
});
|
|
170
|
+
const authenticator = new passport.Passport();
|
|
171
|
+
authenticator.serializeUser((user: unknown, done: (err: unknown, id?: unknown) => void) => done(null, user));
|
|
172
|
+
authenticator.deserializeUser((id: unknown, done: (err: unknown, user?: unknown) => void) => done(null, id));
|
|
173
|
+
const middleware: Middleware[] = [
|
|
174
|
+
sessionMiddleware as unknown as Middleware,
|
|
175
|
+
authenticator.initialize() as unknown as Middleware,
|
|
176
|
+
authenticator.session() as unknown as Middleware,
|
|
177
|
+
];
|
|
178
|
+
|
|
179
|
+
return http.createServer((req, res) => {
|
|
180
|
+
runMiddleware(middleware, req, res, (error?: unknown) => {
|
|
181
|
+
if (error) {
|
|
182
|
+
res.statusCode = 500;
|
|
183
|
+
res.end(String(error));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
void dispatch(req, res);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function runMiddleware(
|
|
192
|
+
middleware: Middleware[],
|
|
193
|
+
req: http.IncomingMessage,
|
|
194
|
+
res: http.ServerResponse,
|
|
195
|
+
done: (error?: unknown) => void
|
|
196
|
+
) {
|
|
197
|
+
const next = (index: number) => (error?: unknown) => {
|
|
198
|
+
if (error || index >= middleware.length) {
|
|
199
|
+
done(error);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
middleware[index](req, res, next(index + 1));
|
|
203
|
+
};
|
|
204
|
+
next(0)();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async function dispatch(req: http.IncomingMessage, res: http.ServerResponse) {
|
|
208
|
+
const url = new URL(req.url ?? '/', 'http://localhost');
|
|
209
|
+
if (url.pathname === '/dev/login') {
|
|
210
|
+
const request = req as never as Record<string, unknown>;
|
|
211
|
+
const query: Record<string, string> = {};
|
|
212
|
+
url.searchParams.forEach((value, key) => (query[key] = value));
|
|
213
|
+
request.query = query;
|
|
214
|
+
try {
|
|
215
|
+
await devLogin.onRequest(req as never, expressResponseShim(res) as never);
|
|
216
|
+
} catch (error) {
|
|
217
|
+
// Mirrors @proteinjs/server's wrapRoute: a route throw is caught and logged, never a
|
|
218
|
+
// hung response. (There it falls through to the star route; here we end with 500.)
|
|
219
|
+
console.error(error);
|
|
220
|
+
if (!res.writableEnded) {
|
|
221
|
+
res.statusCode = 500;
|
|
222
|
+
res.end();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (url.pathname === '/whoami') {
|
|
228
|
+
// The session-derived signal the SPA lands on: authenticated → home, none → login form.
|
|
229
|
+
const session = (req as never as { session?: { passport?: { user?: string } } }).session;
|
|
230
|
+
res.setHeader('Content-Type', 'application/json');
|
|
231
|
+
res.end(JSON.stringify({ user: session?.passport?.user ?? null }));
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
res.statusCode = 404;
|
|
235
|
+
res.end();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/** The express response surface devLogin touches, over the RAW response object — so
|
|
239
|
+
* express-session's proxied `res.end` (the commit point under test) is the one that runs. */
|
|
240
|
+
function expressResponseShim(res: http.ServerResponse) {
|
|
241
|
+
const shim = {
|
|
242
|
+
status(code: number) {
|
|
243
|
+
res.statusCode = code;
|
|
244
|
+
return shim;
|
|
245
|
+
},
|
|
246
|
+
send(body?: unknown) {
|
|
247
|
+
res.end(body === undefined ? undefined : String(body));
|
|
248
|
+
},
|
|
249
|
+
redirect(path: string) {
|
|
250
|
+
const body = `Found. Redirecting to ${path}`;
|
|
251
|
+
res.statusCode = 302;
|
|
252
|
+
res.setHeader('Location', path);
|
|
253
|
+
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
|
254
|
+
res.setHeader('Content-Length', Buffer.byteLength(body));
|
|
255
|
+
res.end(body);
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
return shim;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* GET `path`. By default resolves the moment response HEADERS arrive (browser-following-a-
|
|
263
|
+
* redirect semantics — the body may still be in flight and its socket is left to drain);
|
|
264
|
+
* `waitForBody` resolves after the full body, which with express-session's end proxy also
|
|
265
|
+
* means the response's session write has committed.
|
|
266
|
+
*/
|
|
267
|
+
function request(
|
|
268
|
+
port: number,
|
|
269
|
+
path: string,
|
|
270
|
+
options: { cookie?: string; waitForBody?: boolean } = {}
|
|
271
|
+
): Promise<ClientResponse> {
|
|
272
|
+
return new Promise((resolve, reject) => {
|
|
273
|
+
const clientRequest = http.get(
|
|
274
|
+
{ port, path, headers: options.cookie ? { cookie: options.cookie } : {}, agent: false },
|
|
275
|
+
(res) => {
|
|
276
|
+
if (!options.waitForBody) {
|
|
277
|
+
resolve({ statusCode: res.statusCode, headers: res.headers });
|
|
278
|
+
res.resume();
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
let body = '';
|
|
282
|
+
res.on('data', (chunk) => (body += chunk));
|
|
283
|
+
res.on('end', () => resolve({ statusCode: res.statusCode, headers: res.headers, body }));
|
|
284
|
+
}
|
|
285
|
+
);
|
|
286
|
+
clientRequest.on('error', reject);
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** The `name=value` pair of the response's session Set-Cookie — what the browser sends back. */
|
|
291
|
+
function sessionCookiePair(response: ClientResponse): string {
|
|
292
|
+
const setCookies = response.headers['set-cookie'] ?? [];
|
|
293
|
+
const sessionCookie = setCookies.find((cookie) => cookie.startsWith(`${SESSION_COOKIE_NAME}=`));
|
|
294
|
+
if (!sessionCookie) {
|
|
295
|
+
throw new Error(`response set no ${SESSION_COOKIE_NAME} cookie (Set-Cookie: ${JSON.stringify(setCookies)})`);
|
|
296
|
+
}
|
|
297
|
+
return sessionCookie.split(';')[0];
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/** The raw sid inside a signed session cookie pair (`name=s%3A<sid>.<signature>`). */
|
|
301
|
+
function sidOf(cookiePair: string): string {
|
|
302
|
+
const value = decodeURIComponent(cookiePair.slice(cookiePair.indexOf('=') + 1));
|
|
303
|
+
return value.startsWith('s:') ? value.slice(2, value.indexOf('.')) : value;
|
|
304
|
+
}
|