Skip to content

Commit d0ac3a5

Browse files
author
catlog22
committed
fix(csrf): prevent undefined token when session at max capacity
Root cause: generateToken() returned undefined when session already had maxTokensPerSession (5) tokens, causing ERR_HTTP_INVALID_HEADER_VALUE. Fix: Force generate token even when at capacity, ensuring we always return a valid token string. Related: v7.1.1 CLI process hang fix
1 parent 0939510 commit d0ac3a5

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

ccw/src/core/auth/csrf-manager.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,26 @@ export class CsrfTokenManager {
5656
*/
5757
generateToken(sessionId: string): string {
5858
const tokens = this.generateTokens(sessionId, 1);
59+
// If no slots available (session at max capacity), force generate anyway
60+
// This ensures we always return a valid token
61+
if (tokens.length === 0) {
62+
const token = randomBytes(32).toString('hex');
63+
const expiresAtMs = Date.now() + this.tokenTtlMs;
64+
const record: CsrfTokenRecord = {
65+
sessionId,
66+
expiresAtMs,
67+
used: false,
68+
};
69+
// Get or create session map
70+
let sessionMap = this.sessionTokens.get(sessionId);
71+
if (!sessionMap) {
72+
sessionMap = new Map();
73+
this.sessionTokens.set(sessionId, sessionMap);
74+
}
75+
sessionMap.set(token, record);
76+
this.tokenToSession.set(token, sessionId);
77+
return token;
78+
}
5979
return tokens[0];
6080
}
6181

0 commit comments

Comments
 (0)