Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | 45x 2x 2x 2x 2x 45x 49x 58x 58x 58x 57x 57x 57x 12x 12x 11x 46x 6x 2x 2x 2x 2x 2x 5x 1x | import { ServerApiContext } from "types/serverContext";
import { isServer } from "utils";
function getArrCookies(cookies: string[]): Record<string, string> {
const cookiesObject: Record<string, string> = {};
cookies.forEach((cookie) => {
const [key] = cookie.split(";")[0].split("=");
cookiesObject[key] = cookie;
});
return cookiesObject;
}
function getAllServerCookies(context: ServerApiContext) {
const reqCookies = context.req.cookies;
const modReqCookies = Object.entries(reqCookies).map(([key, value]) => {
return `${key}=${value}`;
});
const setCookies = context.res.getHeader("Set-Cookie");
const resCookies =
setCookies && Array.isArray(setCookies) ? getArrCookies(setCookies) : {};
const allCookiesObj = Object.assign(modReqCookies, resCookies);
return Object.values(allCookiesObj);
}
function getExpires(age?: number) {
const expireCookieDate = new Date();
const maxAge = age ?? 60 * 60 * 24 * 30;
expireCookieDate.setTime(expireCookieDate.getTime() + maxAge * 1000);
return expireCookieDate.toUTCString();
}
const getCookie = (context: ServerApiContext, key: string) => {
const allCookies = getAllServerCookies(context);
const cookie = allCookies.find((val) => val.startsWith(`${key}=`));
Iif (cookie) {
const cookieParts = cookie.split(";");
const cookieValue = cookieParts[0].split("=")[1];
return cookieValue;
}
return null;
};
/**
* Get the value of the cookie
* @param cookieName The name of the cookie to get
* @param context ServerApiContext
* @returns value of the cookie string
*/
export function takeCookie(
cookieName: string | undefined,
context?: ServerApiContext
): string | null {
Iif (!cookieName) return null;
Iif (context && isServer()) {
const cookie = getCookie(context, cookieName);
return cookie;
} else if (global.document) {
const allCookies = `; ${document.cookie}`;
const parts = allCookies.split(`; ${cookieName}=`);
if (parts.length === 2) {
const cookiesValue = parts.pop()?.split(";").shift();
if (!cookiesValue) return null;
return cookiesValue;
}
}
return null;
}
/**
* Create a cookie
* @param {Object} params - The params to create a cookie
* @param {string} params.name - the name of the cookie to set
* @param {string} params.value - value
* @param {number} params.age - the expire time in milliseconds string
* @param {Object} params.context - ServerApiContext
*/
export function makeCookie({
name,
value,
age,
context,
}: {
name: string;
value: string;
age?: number;
context?: ServerApiContext;
}): void {
const expires = getExpires(age);
const isLocalhost =
typeof window !== "undefined"
? window.location.hostname === "localhost" ||
window.location.hostname === "127.0.0.1"
: context?.req.headers.host?.includes("localhost") ||
context?.req.headers.host?.includes("127.0.0.1");
const secureFlag = isLocalhost ? "" : "Secure;";
Iif (context) {
const setCookies = context.res.getHeader("Set-Cookie");
const cookies =
setCookies && Array.isArray(setCookies) ? getArrCookies(setCookies) : {};
const val = `${name}=${value}; Path=/; expires=${expires}; SameSite=Lax; ${secureFlag}`;
context.res.setHeader("Set-Cookie", [...Object.values(cookies), val]);
} else {
document.cookie = `${name}=${value}; Expires=${expires}; Path=/; SameSite=lax; ${secureFlag}`;
}
}
/**
* Remove a cookie
* @param cookieName the name of the cookie to remove
*/
export function eatCookie(cookieName: string): void {
document.cookie = `${cookieName}=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT; SameSite=Lax;`;
}
|