@prairielearn/session 1.1.0 → 1.2.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/CHANGELOG.md +10 -0
- package/README.md +15 -0
- package/dist/cookie.d.ts +5 -1
- package/dist/cookie.js +25 -7
- package/dist/cookie.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +22 -5
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +44 -0
- package/dist/index.test.js.map +1 -1
- package/package.json +10 -10
- package/src/cookie.ts +28 -10
- package/src/index.test.ts +58 -0
- package/src/index.ts +38 -7
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -21,6 +21,21 @@ app.use(
|
|
|
21
21
|
);
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
### Rotate session cookies
|
|
25
|
+
|
|
26
|
+
If you want to rotate to a new session cookie name, you can provide an array of cookie names to `createSessionMiddleware`.
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
createSessionMiddleware({
|
|
30
|
+
// ...
|
|
31
|
+
cookie: {
|
|
32
|
+
name: ['session', 'legacy_session', 'ancient_session'],
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If a request is received with a `legacy_session` or an `ancient_session` cookie, the session will be loaded from the store and then persisted as a new cookie named `session`. For all other requests, the session will be loaded from and persisted to the `session` cookie.
|
|
38
|
+
|
|
24
39
|
### Controlling when cookies are set
|
|
25
40
|
|
|
26
41
|
You can pass a `canSetCookie` function to `createSessionMiddleware` to provide control over when session cookies will be returned to the client.
|
package/dist/cookie.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { Request } from 'express';
|
|
2
2
|
export type CookieSecure = boolean | 'auto' | ((req: Request) => boolean);
|
|
3
3
|
export declare function shouldSecureCookie(req: Request, secure: CookieSecure): boolean;
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function getSessionCookie(req: Request, cookieNames: string[]): {
|
|
5
|
+
name: string | null;
|
|
6
|
+
value: string;
|
|
7
|
+
} | null;
|
|
8
|
+
export declare function getSessionIdFromCookie(sessionCookie: string | null | undefined, secrets: string[]): string | null;
|
package/dist/cookie.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getSessionIdFromCookie = exports.shouldSecureCookie = void 0;
|
|
6
|
+
exports.getSessionIdFromCookie = exports.getSessionCookie = exports.shouldSecureCookie = void 0;
|
|
7
7
|
const cookie_1 = __importDefault(require("cookie"));
|
|
8
8
|
const cookie_signature_1 = __importDefault(require("cookie-signature"));
|
|
9
9
|
function shouldSecureCookie(req, secure) {
|
|
@@ -16,16 +16,34 @@ function shouldSecureCookie(req, secure) {
|
|
|
16
16
|
return secure;
|
|
17
17
|
}
|
|
18
18
|
exports.shouldSecureCookie = shouldSecureCookie;
|
|
19
|
-
function
|
|
19
|
+
function getSessionCookie(req, cookieNames) {
|
|
20
20
|
const cookies = cookie_1.default.parse(req.headers.cookie ?? '');
|
|
21
|
-
|
|
21
|
+
// Try each cookie name until we find one that's present.
|
|
22
|
+
let foundCookieName = null;
|
|
23
|
+
let sessionCookie = null;
|
|
24
|
+
for (const cookieName of cookieNames) {
|
|
25
|
+
if (cookies[cookieName]) {
|
|
26
|
+
foundCookieName = cookieName;
|
|
27
|
+
sessionCookie = cookies[cookieName];
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
22
31
|
if (!sessionCookie)
|
|
23
32
|
return null;
|
|
33
|
+
return {
|
|
34
|
+
name: foundCookieName,
|
|
35
|
+
value: sessionCookie,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
exports.getSessionCookie = getSessionCookie;
|
|
39
|
+
function getSessionIdFromCookie(sessionCookie, secrets) {
|
|
24
40
|
// Try each secret until we find one that works.
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
if (sessionCookie) {
|
|
42
|
+
for (const secret of secrets) {
|
|
43
|
+
const value = cookie_signature_1.default.unsign(sessionCookie, secret);
|
|
44
|
+
if (value !== false) {
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
29
47
|
}
|
|
30
48
|
}
|
|
31
49
|
return null;
|
package/dist/cookie.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../src/cookie.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,wEAAyC;AAKzC,SAAgB,kBAAkB,CAAC,GAAY,EAAE,MAAoB;IACnE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;KACpB;IAED,IAAI,MAAM,KAAK,MAAM,EAAE;QACrB,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC;KACjC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,gDAUC;AAED,SAAgB,
|
|
1
|
+
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../src/cookie.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,wEAAyC;AAKzC,SAAgB,kBAAkB,CAAC,GAAY,EAAE,MAAoB;IACnE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;KACpB;IAED,IAAI,MAAM,KAAK,MAAM,EAAE;QACrB,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC;KACjC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,gDAUC;AAED,SAAgB,gBAAgB,CAAC,GAAY,EAAE,WAAqB;IAClE,MAAM,OAAO,GAAG,gBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAEvD,yDAAyD;IACzD,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACpC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvB,eAAe,GAAG,UAAU,CAAC;YAC7B,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACpC,MAAM;SACP;KACF;IAED,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,aAAa;KACrB,CAAC;AACJ,CAAC;AApBD,4CAoBC;AAED,SAAgB,sBAAsB,CACpC,aAAwC,EACxC,OAAiB;IAEjB,gDAAgD;IAChD,IAAI,aAAa,EAAE;QACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,KAAK,GAAG,0BAAS,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACtD,IAAI,KAAK,KAAK,KAAK,EAAE;gBACnB,OAAO,KAAK,CAAC;aACd;SACF;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAfD,wDAeC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,13 @@ export interface SessionOptions {
|
|
|
14
14
|
store: SessionStore;
|
|
15
15
|
canSetCookie?: (req: Request) => boolean;
|
|
16
16
|
cookie?: {
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* If multiple names are provided, the first one is used as the primary
|
|
19
|
+
* name for setting the cookie. The other names are used as fallbacks when
|
|
20
|
+
* reading the cookie in requests. If a fallback name is found in a request,
|
|
21
|
+
* the cookie value will be transparently re-written to the primary name.
|
|
22
|
+
*/
|
|
23
|
+
name?: string | string[];
|
|
18
24
|
secure?: CookieSecure;
|
|
19
25
|
httpOnly?: boolean;
|
|
20
26
|
sameSite?: boolean | 'none' | 'lax' | 'strict';
|
package/dist/index.js
CHANGED
|
@@ -14,11 +14,13 @@ const DEFAULT_COOKIE_NAME = 'session';
|
|
|
14
14
|
const DEFAULT_COOKIE_MAX_AGE = 86400000; // 1 day
|
|
15
15
|
function createSessionMiddleware(options) {
|
|
16
16
|
const secrets = Array.isArray(options.secret) ? options.secret : [options.secret];
|
|
17
|
-
const
|
|
17
|
+
const cookieNames = getCookieNames(options.cookie?.name);
|
|
18
|
+
const primaryCookieName = cookieNames[0];
|
|
18
19
|
const cookieMaxAge = options.cookie?.maxAge ?? DEFAULT_COOKIE_MAX_AGE;
|
|
19
20
|
const store = options.store;
|
|
20
21
|
return (0, express_async_handler_1.default)(async function sessionMiddleware(req, res, next) {
|
|
21
|
-
const
|
|
22
|
+
const sessionCookie = (0, cookie_1.getSessionCookie)(req, cookieNames);
|
|
23
|
+
const cookieSessionId = (0, cookie_1.getSessionIdFromCookie)(sessionCookie?.value, secrets);
|
|
22
24
|
const sessionId = cookieSessionId ?? (await (0, session_1.generateSessionId)());
|
|
23
25
|
req.session = await (0, session_1.loadSession)(sessionId, req, store, cookieMaxAge);
|
|
24
26
|
const originalHash = (0, session_1.hashSession)(req.session);
|
|
@@ -29,7 +31,12 @@ function createSessionMiddleware(options) {
|
|
|
29
31
|
if (cookieSessionId) {
|
|
30
32
|
// If the request arrived with a session cookie but the session was
|
|
31
33
|
// destroyed, clear the cookie.
|
|
32
|
-
|
|
34
|
+
//
|
|
35
|
+
// To cover all our bases, we'll clear *all* known session cookies to
|
|
36
|
+
// ensure that state sessions aren't left behind.
|
|
37
|
+
cookieNames.forEach((cookieName) => {
|
|
38
|
+
res.clearCookie(cookieName);
|
|
39
|
+
});
|
|
33
40
|
return;
|
|
34
41
|
}
|
|
35
42
|
// There is no session to do anything with.
|
|
@@ -40,11 +47,12 @@ function createSessionMiddleware(options) {
|
|
|
40
47
|
// Avoid sending cookie over insecure connection.
|
|
41
48
|
return;
|
|
42
49
|
}
|
|
50
|
+
const needsRotation = sessionCookie?.name && sessionCookie?.name !== primaryCookieName;
|
|
43
51
|
const isNewSession = !cookieSessionId || cookieSessionId !== req.session.id;
|
|
44
52
|
const didExpirationChange = originalExpirationDate.getTime() !== req.session.getExpirationDate().getTime();
|
|
45
|
-
if (canSetCookie && (isNewSession || didExpirationChange)) {
|
|
53
|
+
if (canSetCookie && (isNewSession || didExpirationChange || needsRotation)) {
|
|
46
54
|
const signedSessionId = signSessionId(req.session.id, secrets[0]);
|
|
47
|
-
res.cookie(
|
|
55
|
+
res.cookie(primaryCookieName, signedSessionId, {
|
|
48
56
|
secure: secureCookie,
|
|
49
57
|
httpOnly: options.cookie?.httpOnly ?? true,
|
|
50
58
|
sameSite: options.cookie?.sameSite ?? false,
|
|
@@ -78,6 +86,15 @@ function createSessionMiddleware(options) {
|
|
|
78
86
|
});
|
|
79
87
|
}
|
|
80
88
|
exports.createSessionMiddleware = createSessionMiddleware;
|
|
89
|
+
function getCookieNames(cookieName) {
|
|
90
|
+
if (!cookieName) {
|
|
91
|
+
return [DEFAULT_COOKIE_NAME];
|
|
92
|
+
}
|
|
93
|
+
if (Array.isArray(cookieName) && cookieName.length === 0) {
|
|
94
|
+
throw new Error('cookie.name must not be an empty array');
|
|
95
|
+
}
|
|
96
|
+
return Array.isArray(cookieName) ? cookieName : [cookieName];
|
|
97
|
+
}
|
|
81
98
|
function signSessionId(sessionId, secret) {
|
|
82
99
|
return cookie_signature_1.default.sign(sessionId, secret);
|
|
83
100
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,4DAAmC;AACnC,wEAAyC;AACzC,kFAAiD;AAGjD,6CAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.test.js
CHANGED
|
@@ -502,5 +502,49 @@ describe('session middleware', () => {
|
|
|
502
502
|
chai_1.assert.equal(setCount, 1);
|
|
503
503
|
});
|
|
504
504
|
});
|
|
505
|
+
it('rotates to a new cookie when needed', async () => {
|
|
506
|
+
const fetchWithCookies = (0, fetch_cookie_1.default)(node_fetch_1.default);
|
|
507
|
+
const store = new memory_store_1.MemoryStore();
|
|
508
|
+
// Will create "legacy" sessions.
|
|
509
|
+
const legacyApp = (0, express_1.default)();
|
|
510
|
+
legacyApp.use((0, index_1.createSessionMiddleware)({
|
|
511
|
+
store,
|
|
512
|
+
secret: TEST_SECRET,
|
|
513
|
+
cookie: {
|
|
514
|
+
name: 'legacy_session',
|
|
515
|
+
},
|
|
516
|
+
}));
|
|
517
|
+
legacyApp.get('/', (req, res) => res.send(req.session.id.toString()));
|
|
518
|
+
// Will create "new" sessions and upgrade "legacy" sessions.
|
|
519
|
+
const app = (0, express_1.default)();
|
|
520
|
+
app.use((0, index_1.createSessionMiddleware)({
|
|
521
|
+
store,
|
|
522
|
+
secret: TEST_SECRET,
|
|
523
|
+
cookie: {
|
|
524
|
+
name: ['session', 'legacy_session'],
|
|
525
|
+
},
|
|
526
|
+
}));
|
|
527
|
+
app.get('/', (req, res) => res.send(req.session.id.toString()));
|
|
528
|
+
let legacySessionId = null;
|
|
529
|
+
await (0, test_utils_1.withServer)(legacyApp, async ({ url }) => {
|
|
530
|
+
// Generate a legacy session.
|
|
531
|
+
const res = await fetchWithCookies(url);
|
|
532
|
+
chai_1.assert.equal(res.status, 200);
|
|
533
|
+
legacySessionId = await res.text();
|
|
534
|
+
});
|
|
535
|
+
await (0, test_utils_1.withServer)(app, async ({ url }) => {
|
|
536
|
+
const res = await fetchWithCookies(url);
|
|
537
|
+
chai_1.assert.equal(res.status, 200);
|
|
538
|
+
const newSessionId = await res.text();
|
|
539
|
+
// Ensure that the new session cookie was set.
|
|
540
|
+
const header = res.headers.get('set-cookie');
|
|
541
|
+
chai_1.assert.isNotNull(header);
|
|
542
|
+
const cookies = (0, set_cookie_parser_1.parse)(header ?? '');
|
|
543
|
+
chai_1.assert.equal(cookies.length, 1);
|
|
544
|
+
chai_1.assert.equal(cookies[0].name, 'session');
|
|
545
|
+
// Ensure that the legacy session is migrated to a new session.
|
|
546
|
+
chai_1.assert.equal(newSessionId, legacySessionId);
|
|
547
|
+
});
|
|
548
|
+
});
|
|
505
549
|
});
|
|
506
550
|
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prairielearn/session",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@prairielearn/tsconfig": "^0.0.0",
|
|
25
|
-
"@types/chai": "^4.3.
|
|
26
|
-
"@types/cookie": "^0.5.
|
|
27
|
-
"@types/cookie-signature": "^1.1.
|
|
28
|
-
"@types/express": "^4.17.
|
|
29
|
-
"@types/node": "^18.18.
|
|
30
|
-
"@types/node-fetch": "^2.6.
|
|
31
|
-
"@types/on-headers": "^1.0.
|
|
32
|
-
"@types/set-cookie-parser": "^2.4.
|
|
33
|
-
"@types/uid-safe": "^2.1.
|
|
25
|
+
"@types/chai": "^4.3.9",
|
|
26
|
+
"@types/cookie": "^0.5.3",
|
|
27
|
+
"@types/cookie-signature": "^1.1.1",
|
|
28
|
+
"@types/express": "^4.17.20",
|
|
29
|
+
"@types/node": "^18.18.7",
|
|
30
|
+
"@types/node-fetch": "^2.6.7",
|
|
31
|
+
"@types/on-headers": "^1.0.2",
|
|
32
|
+
"@types/set-cookie-parser": "^2.4.5",
|
|
33
|
+
"@types/uid-safe": "^2.1.4",
|
|
34
34
|
"chai": "^4.3.10",
|
|
35
35
|
"express": "^4.18.2",
|
|
36
36
|
"fetch-cookie": "^2.1.0",
|
package/src/cookie.ts
CHANGED
|
@@ -16,21 +16,39 @@ export function shouldSecureCookie(req: Request, secure: CookieSecure): boolean
|
|
|
16
16
|
return secure;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export function
|
|
20
|
-
req: Request,
|
|
21
|
-
cookieName: string,
|
|
22
|
-
secrets: string[],
|
|
23
|
-
): string | null {
|
|
19
|
+
export function getSessionCookie(req: Request, cookieNames: string[]) {
|
|
24
20
|
const cookies = cookie.parse(req.headers.cookie ?? '');
|
|
25
|
-
|
|
21
|
+
|
|
22
|
+
// Try each cookie name until we find one that's present.
|
|
23
|
+
let foundCookieName: string | null = null;
|
|
24
|
+
let sessionCookie: string | null = null;
|
|
25
|
+
for (const cookieName of cookieNames) {
|
|
26
|
+
if (cookies[cookieName]) {
|
|
27
|
+
foundCookieName = cookieName;
|
|
28
|
+
sessionCookie = cookies[cookieName];
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
26
32
|
|
|
27
33
|
if (!sessionCookie) return null;
|
|
28
34
|
|
|
35
|
+
return {
|
|
36
|
+
name: foundCookieName,
|
|
37
|
+
value: sessionCookie,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function getSessionIdFromCookie(
|
|
42
|
+
sessionCookie: string | null | undefined,
|
|
43
|
+
secrets: string[],
|
|
44
|
+
) {
|
|
29
45
|
// Try each secret until we find one that works.
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
if (sessionCookie) {
|
|
47
|
+
for (const secret of secrets) {
|
|
48
|
+
const value = signature.unsign(sessionCookie, secret);
|
|
49
|
+
if (value !== false) {
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
34
52
|
}
|
|
35
53
|
}
|
|
36
54
|
|
package/src/index.test.ts
CHANGED
|
@@ -625,4 +625,62 @@ describe('session middleware', () => {
|
|
|
625
625
|
assert.equal(setCount, 1);
|
|
626
626
|
});
|
|
627
627
|
});
|
|
628
|
+
|
|
629
|
+
it('rotates to a new cookie when needed', async () => {
|
|
630
|
+
const fetchWithCookies = fetchCookie(fetch);
|
|
631
|
+
const store = new MemoryStore();
|
|
632
|
+
|
|
633
|
+
// Will create "legacy" sessions.
|
|
634
|
+
const legacyApp = express();
|
|
635
|
+
legacyApp.use(
|
|
636
|
+
createSessionMiddleware({
|
|
637
|
+
store,
|
|
638
|
+
secret: TEST_SECRET,
|
|
639
|
+
cookie: {
|
|
640
|
+
name: 'legacy_session',
|
|
641
|
+
},
|
|
642
|
+
}),
|
|
643
|
+
);
|
|
644
|
+
legacyApp.get('/', (req, res) => res.send(req.session.id.toString()));
|
|
645
|
+
|
|
646
|
+
// Will create "new" sessions and upgrade "legacy" sessions.
|
|
647
|
+
const app = express();
|
|
648
|
+
app.use(
|
|
649
|
+
createSessionMiddleware({
|
|
650
|
+
store,
|
|
651
|
+
secret: TEST_SECRET,
|
|
652
|
+
cookie: {
|
|
653
|
+
name: ['session', 'legacy_session'],
|
|
654
|
+
},
|
|
655
|
+
}),
|
|
656
|
+
);
|
|
657
|
+
app.get('/', (req, res) => res.send(req.session.id.toString()));
|
|
658
|
+
|
|
659
|
+
let legacySessionId: string | null = null;
|
|
660
|
+
|
|
661
|
+
await withServer(legacyApp, async ({ url }) => {
|
|
662
|
+
// Generate a legacy session.
|
|
663
|
+
const res = await fetchWithCookies(url);
|
|
664
|
+
assert.equal(res.status, 200);
|
|
665
|
+
|
|
666
|
+
legacySessionId = await res.text();
|
|
667
|
+
});
|
|
668
|
+
|
|
669
|
+
await withServer(app, async ({ url }) => {
|
|
670
|
+
const res = await fetchWithCookies(url);
|
|
671
|
+
assert.equal(res.status, 200);
|
|
672
|
+
|
|
673
|
+
const newSessionId = await res.text();
|
|
674
|
+
|
|
675
|
+
// Ensure that the new session cookie was set.
|
|
676
|
+
const header = res.headers.get('set-cookie');
|
|
677
|
+
assert.isNotNull(header);
|
|
678
|
+
const cookies = parseSetCookie(header ?? '');
|
|
679
|
+
assert.equal(cookies.length, 1);
|
|
680
|
+
assert.equal(cookies[0].name, 'session');
|
|
681
|
+
|
|
682
|
+
// Ensure that the legacy session is migrated to a new session.
|
|
683
|
+
assert.equal(newSessionId, legacySessionId);
|
|
684
|
+
});
|
|
685
|
+
});
|
|
628
686
|
});
|
package/src/index.ts
CHANGED
|
@@ -5,7 +5,12 @@ import asyncHandler from 'express-async-handler';
|
|
|
5
5
|
|
|
6
6
|
import { SessionStore } from './store';
|
|
7
7
|
import { beforeEnd } from './before-end';
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
type CookieSecure,
|
|
10
|
+
shouldSecureCookie,
|
|
11
|
+
getSessionCookie,
|
|
12
|
+
getSessionIdFromCookie,
|
|
13
|
+
} from './cookie';
|
|
9
14
|
import { type Session, generateSessionId, loadSession, hashSession } from './session';
|
|
10
15
|
|
|
11
16
|
declare global {
|
|
@@ -22,7 +27,13 @@ export interface SessionOptions {
|
|
|
22
27
|
store: SessionStore;
|
|
23
28
|
canSetCookie?: (req: Request) => boolean;
|
|
24
29
|
cookie?: {
|
|
25
|
-
|
|
30
|
+
/**
|
|
31
|
+
* If multiple names are provided, the first one is used as the primary
|
|
32
|
+
* name for setting the cookie. The other names are used as fallbacks when
|
|
33
|
+
* reading the cookie in requests. If a fallback name is found in a request,
|
|
34
|
+
* the cookie value will be transparently re-written to the primary name.
|
|
35
|
+
*/
|
|
36
|
+
name?: string | string[];
|
|
26
37
|
secure?: CookieSecure;
|
|
27
38
|
httpOnly?: boolean;
|
|
28
39
|
sameSite?: boolean | 'none' | 'lax' | 'strict';
|
|
@@ -37,7 +48,8 @@ const DEFAULT_COOKIE_MAX_AGE = 86400000; // 1 day
|
|
|
37
48
|
|
|
38
49
|
export function createSessionMiddleware(options: SessionOptions) {
|
|
39
50
|
const secrets = Array.isArray(options.secret) ? options.secret : [options.secret];
|
|
40
|
-
const
|
|
51
|
+
const cookieNames = getCookieNames(options.cookie?.name);
|
|
52
|
+
const primaryCookieName = cookieNames[0];
|
|
41
53
|
const cookieMaxAge = options.cookie?.maxAge ?? DEFAULT_COOKIE_MAX_AGE;
|
|
42
54
|
const store = options.store;
|
|
43
55
|
|
|
@@ -46,7 +58,8 @@ export function createSessionMiddleware(options: SessionOptions) {
|
|
|
46
58
|
res: Response,
|
|
47
59
|
next: NextFunction,
|
|
48
60
|
) {
|
|
49
|
-
const
|
|
61
|
+
const sessionCookie = getSessionCookie(req, cookieNames);
|
|
62
|
+
const cookieSessionId = getSessionIdFromCookie(sessionCookie?.value, secrets);
|
|
50
63
|
const sessionId = cookieSessionId ?? (await generateSessionId());
|
|
51
64
|
req.session = await loadSession(sessionId, req, store, cookieMaxAge);
|
|
52
65
|
|
|
@@ -60,7 +73,12 @@ export function createSessionMiddleware(options: SessionOptions) {
|
|
|
60
73
|
if (cookieSessionId) {
|
|
61
74
|
// If the request arrived with a session cookie but the session was
|
|
62
75
|
// destroyed, clear the cookie.
|
|
63
|
-
|
|
76
|
+
//
|
|
77
|
+
// To cover all our bases, we'll clear *all* known session cookies to
|
|
78
|
+
// ensure that state sessions aren't left behind.
|
|
79
|
+
cookieNames.forEach((cookieName) => {
|
|
80
|
+
res.clearCookie(cookieName);
|
|
81
|
+
});
|
|
64
82
|
return;
|
|
65
83
|
}
|
|
66
84
|
|
|
@@ -74,12 +92,13 @@ export function createSessionMiddleware(options: SessionOptions) {
|
|
|
74
92
|
return;
|
|
75
93
|
}
|
|
76
94
|
|
|
95
|
+
const needsRotation = sessionCookie?.name && sessionCookie?.name !== primaryCookieName;
|
|
77
96
|
const isNewSession = !cookieSessionId || cookieSessionId !== req.session.id;
|
|
78
97
|
const didExpirationChange =
|
|
79
98
|
originalExpirationDate.getTime() !== req.session.getExpirationDate().getTime();
|
|
80
|
-
if (canSetCookie && (isNewSession || didExpirationChange)) {
|
|
99
|
+
if (canSetCookie && (isNewSession || didExpirationChange || needsRotation)) {
|
|
81
100
|
const signedSessionId = signSessionId(req.session.id, secrets[0]);
|
|
82
|
-
res.cookie(
|
|
101
|
+
res.cookie(primaryCookieName, signedSessionId, {
|
|
83
102
|
secure: secureCookie,
|
|
84
103
|
httpOnly: options.cookie?.httpOnly ?? true,
|
|
85
104
|
sameSite: options.cookie?.sameSite ?? false,
|
|
@@ -123,6 +142,18 @@ export function createSessionMiddleware(options: SessionOptions) {
|
|
|
123
142
|
});
|
|
124
143
|
}
|
|
125
144
|
|
|
145
|
+
function getCookieNames(cookieName: string | string[] | undefined): string[] {
|
|
146
|
+
if (!cookieName) {
|
|
147
|
+
return [DEFAULT_COOKIE_NAME];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (Array.isArray(cookieName) && cookieName.length === 0) {
|
|
151
|
+
throw new Error('cookie.name must not be an empty array');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return Array.isArray(cookieName) ? cookieName : [cookieName];
|
|
155
|
+
}
|
|
156
|
+
|
|
126
157
|
function signSessionId(sessionId: string, secret: string): string {
|
|
127
158
|
return signature.sign(sessionId, secret);
|
|
128
159
|
}
|