const { DOMAIN } = require('config.js'); const AUTH_TOKEN = 'auth_token'; const SAVED_PASSWORD = 'saved_password'; const DEPRECATED_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=${IS_WEB ? date.toUTCString() : 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); } // will take oidc token getter function getTokens() { return { auth_token: getAuthToken(), access_token: null }; } 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) => { deleteAuthToken(); deleteSavedPassword(); resolve(); }); } function doAuthTokenRefresh() { const { auth_token: authToken } = getAuthToken(); if (authToken) { deleteAuthToken(); setCookie(AUTH_TOKEN, authToken, 365); } } function doDeprecatedPasswordMigrationMarch2020() { const savedPassword = getCookie(DEPRECATED_SAVED_PASSWORD); if (savedPassword) { deleteCookie(DEPRECATED_SAVED_PASSWORD); setSavedPassword(savedPassword, true); } } module.exports = { setCookie, getCookie, deleteCookie, setSavedPassword, getSavedPassword, getPasswordFromCookie, deleteSavedPassword, getAuthToken, setAuthToken, getTokens, deleteAuthToken, doSignOutCleanup, doAuthTokenRefresh, doDeprecatedPasswordMigrationMarch2020, };