refactor: use cookie package for parsing and serializing auth cookies
This commit is contained in:
@@ -1,26 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
const cookie = require("cookie");
|
||||||
|
|
||||||
const COOKIE_NAME = "xartaudio_user";
|
const COOKIE_NAME = "xartaudio_user";
|
||||||
|
|
||||||
function parseCookies(cookieHeader) {
|
function parseCookies(cookieHeader) {
|
||||||
if (!cookieHeader) {
|
if (!cookieHeader || typeof cookieHeader !== "string") {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
return cookie.parse(cookieHeader);
|
||||||
return String(cookieHeader)
|
|
||||||
.split(";")
|
|
||||||
.map((part) => part.trim())
|
|
||||||
.filter(Boolean)
|
|
||||||
.reduce((acc, pair) => {
|
|
||||||
const eq = pair.indexOf("=");
|
|
||||||
if (eq <= 0) {
|
|
||||||
return acc;
|
|
||||||
}
|
|
||||||
const key = pair.slice(0, eq).trim();
|
|
||||||
const value = pair.slice(eq + 1).trim();
|
|
||||||
acc[key] = decodeURIComponent(value);
|
|
||||||
return acc;
|
|
||||||
}, {});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function serializeUserCookie(userId, maxAgeSeconds) {
|
function serializeUserCookie(userId, maxAgeSeconds) {
|
||||||
@@ -28,16 +16,25 @@ function serializeUserCookie(userId, maxAgeSeconds) {
|
|||||||
throw new Error("user_id_required");
|
throw new Error("user_id_required");
|
||||||
}
|
}
|
||||||
|
|
||||||
const encoded = encodeURIComponent(String(userId));
|
|
||||||
const maxAge = Number.isInteger(maxAgeSeconds) && maxAgeSeconds > 0
|
const maxAge = Number.isInteger(maxAgeSeconds) && maxAgeSeconds > 0
|
||||||
? maxAgeSeconds
|
? maxAgeSeconds
|
||||||
: 60 * 60 * 24 * 30;
|
: 60 * 60 * 24 * 30;
|
||||||
|
|
||||||
return `${COOKIE_NAME}=${encoded}; Path=/; HttpOnly; SameSite=Lax; Max-Age=${maxAge}`;
|
return cookie.serialize(COOKIE_NAME, String(userId), {
|
||||||
|
path: "/",
|
||||||
|
httpOnly: true,
|
||||||
|
sameSite: "lax",
|
||||||
|
maxAge,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearUserCookie() {
|
function clearUserCookie() {
|
||||||
return `${COOKIE_NAME}=; Path=/; HttpOnly; SameSite=Lax; Max-Age=0`;
|
return cookie.serialize(COOKIE_NAME, "", {
|
||||||
|
path: "/",
|
||||||
|
httpOnly: true,
|
||||||
|
sameSite: "lax",
|
||||||
|
maxAge: 0,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAuthenticatedUserId(headers) {
|
function getAuthenticatedUserId(headers) {
|
||||||
|
|||||||
Reference in New Issue
Block a user