2024-01-12 00:01:44 +01:00
|
|
|
import { serialize, parse } from "cookie";
|
2020-04-23 01:15:12 +02:00
|
|
|
|
2024-01-12 00:01:44 +01:00
|
|
|
const TOKEN_NAME = "token";
|
2020-12-29 18:43:47 +01:00
|
|
|
|
2024-01-12 00:01:44 +01:00
|
|
|
export const MAX_AGE = 60 * 60 * 8; // 8 hours
|
2020-04-23 01:15:12 +02:00
|
|
|
|
|
|
|
export function setTokenCookie(res, token) {
|
|
|
|
const cookie = serialize(TOKEN_NAME, token, {
|
|
|
|
maxAge: MAX_AGE,
|
|
|
|
expires: new Date(Date.now() + MAX_AGE * 1000),
|
|
|
|
httpOnly: true,
|
2024-01-12 00:01:44 +01:00
|
|
|
secure: process.env.NODE_ENV === "production",
|
|
|
|
path: "/",
|
|
|
|
sameSite: "lax",
|
|
|
|
});
|
2020-12-29 18:43:47 +01:00
|
|
|
|
2024-01-12 00:01:44 +01:00
|
|
|
res.setHeader("Set-Cookie", cookie);
|
2020-04-23 01:15:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export function removeTokenCookie(res) {
|
2024-01-12 00:01:44 +01:00
|
|
|
const cookie = serialize(TOKEN_NAME, "", {
|
2020-04-23 01:15:12 +02:00
|
|
|
maxAge: -1,
|
2024-01-12 00:01:44 +01:00
|
|
|
path: "/",
|
|
|
|
});
|
2020-04-23 01:15:12 +02:00
|
|
|
|
2024-01-12 00:01:44 +01:00
|
|
|
res.setHeader("Set-Cookie", cookie);
|
2020-04-23 01:15:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export function parseCookies(req) {
|
|
|
|
// For API Routes we don't need to parse the cookies.
|
2024-01-12 00:01:44 +01:00
|
|
|
if (req.cookies) return req.cookies;
|
2020-04-23 01:15:12 +02:00
|
|
|
|
|
|
|
// For pages we do need to parse the cookies.
|
2024-01-12 00:01:44 +01:00
|
|
|
const cookie = req.headers?.cookie;
|
|
|
|
return parse(cookie || "");
|
2020-04-23 01:15:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export function getTokenCookie(req) {
|
2024-01-12 00:01:44 +01:00
|
|
|
const cookies = parseCookies(req);
|
|
|
|
return cookies[TOKEN_NAME];
|
2020-04-23 01:15:12 +02:00
|
|
|
}
|