1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-30 22:26:24 -07:00
gochan/frontend/ts/cookies.ts
2023-06-22 07:46:04 -07:00

69 lines
1.7 KiB
TypeScript
Executable file

import $ from "jquery";
const YEAR_IN_MS = 365*24*60*60*1000;
/**
* @param {string} name
*/
export function getCookie(name: string, defaultVal = "") {
let val = defaultVal;
const cookieArr = document.cookie.split("; ");
for(const cookie of cookieArr) {
const pair = cookie.split("=");
if(pair[0] !== name) continue;
try {
val = decodeURIComponent(pair[1]).replace("+", " ");
} catch(err) {
console.error(`Error parsing cookie value for "${name}": ${err}`);
return defaultVal;
}
}
return val;
}
export function getNumberCookie(name: string, defaultVal = "0") {
return parseFloat(getCookie(name, defaultVal));
}
export function getBooleanCookie(name: string, defaultVal = "true") {
return getCookie(name, defaultVal) === "true";
}
function randomPassword(len = 8) {
const validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-.^_`|~";
let pass = "";
for(let p = 0; p < len; p++) {
pass += validChars[Math.floor(Math.random() * validChars.length)];
}
return pass;
}
/**
* Set a cookie
*/
export function setCookie(name: string, value: string, expires = "", root = webroot) {
let expiresStr = "";
if(expires === "") {
expiresStr = ";expires=";
const d = new Date();
d.setTime(d.getTime() + YEAR_IN_MS);
expiresStr += d.toUTCString();
}
document.cookie = `${name}=${value}${expiresStr};path=${root};sameSite=strict`;
}
export function initCookies() {
let pwCookie = getCookie("password");
if(pwCookie === "") {
pwCookie = randomPassword();
setCookie("password", pwCookie);
}
$("input[name=postname]").val(getCookie("name"));
$("input[name=postemail]").val(getCookie("email"));
$("input[name=postpassword]").val(pwCookie);
$("input[name=delete-password]").val(pwCookie);
}
$(initCookies);