const { DOMAIN } = require('../../config.js'); const AUTH_TOKEN = 'auth_token'; const SAVED_PASSWORD = 'saved_password'; const domain = typeof window === 'object' && window.location.hostname.includes('localhost') ? window.location.hostname : DOMAIN; const isProduction = process.env.NODE_ENV === 'production'; const maxExpiration = 2147483647; let sessionPassword; function setCookie(name, value, expirationDaysOnWeb) { let expires = ''; if (expirationDaysOnWeb) { let date = new Date(); date.setTime(date.getTime() + expirationDaysOnWeb * 24 * 60 * 60 * 1000); // If on PC, set to not expire (max) expires = `expires=${maxExpiration};`; } let cookie = `${name}=${value || ''}; ${expires} path=/;`; if (isProduction) { cookie += ` SameSite=None;`; } if (!isProduction) { cookie += ` SameSite=Lax;`; } if (isProduction) { cookie += ` domain=${domain}; Secure;`; } document.cookie = cookie; } function getCookie(name) { const nameEQ = name + '='; const cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { let cookie = cookies[i]; while (cookie.charAt(0) === ' ') { cookie = cookie.substring(1, cookie.length); } if (cookie.indexOf(nameEQ) === 0) { return cookie.substring(nameEQ.length, cookie.length); } } return null; } function deleteCookie(name) { document.cookie = name + `=; Max-Age=-99999999; domain=${domain}; path=/;`; // Legacy // Adding this here to delete any old cookies before we removed the "." in front of the domain // Remove this if you see it after March 11th, 2021 // https://github.com/lbryio/lbry-desktop/pull/3830 document.cookie = name + `=; Max-Age=-99999999; domain=.${domain}; path=/;`; } function setSavedPassword(value, saveToDisk) { return new Promise((resolve) => { const password = value === undefined || value === null ? '' : value; sessionPassword = password; if (saveToDisk) { if (password) { setCookie(SAVED_PASSWORD, password, 14); } else { deleteSavedPassword(); } } }); } function getSavedPassword() { return new Promise((resolve) => { if (sessionPassword) { resolve(sessionPassword); } return getPasswordFromCookie().then((p) => resolve(p)); }); } function getPasswordFromCookie() { return new Promise((resolve) => { let password; password = getCookie(SAVED_PASSWORD); resolve(password); }); } function deleteSavedPassword() { return new Promise((resolve) => { deleteCookie(SAVED_PASSWORD); resolve(); }); } function getAuthToken() { return getCookie(AUTH_TOKEN); } function setAuthToken(value) { return setCookie(AUTH_TOKEN, value, 365); } function deleteAuthToken() { return new Promise((resolve) => { deleteCookie(AUTH_TOKEN); resolve(); }); } function doSignOutCleanup() { return new Promise((resolve) => { // delete passwords, tokens resolve(); }); } function doAuthTokenRefresh() { const authToken = getAuthToken(); if (authToken) { deleteAuthToken(); setAuthToken(authToken); } } module.exports = { setSavedPassword, getSavedPassword, getPasswordFromCookie, deleteSavedPassword, getAuthToken, setAuthToken, deleteAuthToken, doSignOutCleanup, doAuthTokenRefresh, };