"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = logoutUser; const get_auth_cookie_names_1 = __importDefault(require("../../functions/backend/cookies/get-auth-cookie-names")); const decrypt_1 = __importDefault(require("../../functions/dsql/decrypt")); const ejson_1 = __importDefault(require("../../utils/ejson")); const write_auth_files_1 = require("../../functions/backend/auth/write-auth-files"); const parseCookies_1 = __importDefault(require("../../utils/backend/parseCookies")); const grab_host_names_1 = __importDefault(require("../../utils/grab-host-names")); /** * # Logout user */ function logoutUser({ response, database, dsqlUserId, encryptedUserString, request, cookieString, debug, }) { /** * Check Encryption Keys * * @description Check Encryption Keys */ try { const { user_id } = (0, grab_host_names_1.default)({ userId: dsqlUserId }); const cookieNames = (0, get_auth_cookie_names_1.default)({ database, userId: user_id, }); if (debug) { console.log("logoutUser:cookieNames", cookieNames); } const authKeyName = cookieNames.keyCookieName; const csrfName = cookieNames.csrfCookieName; const oneTimeCodeName = cookieNames.oneTimeCodeName; const decryptedUserJSON = (() => { try { if (request) { const cookiesObject = (0, parseCookies_1.default)({ request, cookieString, }); return (0, decrypt_1.default)({ encryptedString: cookiesObject[authKeyName], }); } else if (encryptedUserString) { return (0, decrypt_1.default)({ encryptedString: encryptedUserString, }); } else { return undefined; } } catch ( /** @type {any} */error) { console.log("Error getting decrypted User JSON to logout:", error.message); return undefined; } })(); if (debug) { console.log("logoutUser:decryptedUserJSON", decryptedUserJSON); } if (!decryptedUserJSON) throw new Error("Invalid User"); const userObject = ejson_1.default.parse(decryptedUserJSON); if (!(userObject === null || userObject === void 0 ? void 0 : userObject.csrf_k)) throw new Error("Invalid User. Please check key"); response === null || response === void 0 ? void 0 : response.setHeader("Set-Cookie", [ `${authKeyName}=null;max-age=0`, `${csrfName}=null;max-age=0`, `${oneTimeCodeName}=null;max-age=0`, ]); const csrf = userObject.csrf_k; (0, write_auth_files_1.deleteAuthFile)(csrf); return { success: true, msg: "User Logged Out", cookieNames, }; } catch (error) { console.log("Logout Error:", error.message); return { success: false, msg: "Logout Failed", }; } }