/** * Type Definitions * =============================================================================== */ const parseClientCookies = require("../utils/parseClientCookies"); ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// /** * Login with Google Function * =============================================================================== * @description This function uses google identity api to login a user with datasquirel * * @async * * @requires localStorageUser - a "user" JSON string stored in local storage with all * the necessary user data gotten from the server * * @returns {Promise} - Return */ module.exports = async function logout() { /** * == Initialize * * @description Initialize */ const localUser = localStorage.getItem("user"); let targetUser; try { targetUser = JSON.parse(localUser); } catch (error) { console.log(error); } if (!targetUser) { window.alert("NO client user object found in localStorage"); return false; } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// const cookies = parseClientCookies(); const socialId = cookies.datasquirel_social_id; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// localStorage.setItem("user", "{}"); localStorage.removeItem("csrf"); document.cookie = `datasquirel_social_id=null;samesite=strict;path=/`; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// const response = await new Promise((resolve, reject) => { ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// if (socialId) { const googleScript = document.createElement("script"); googleScript.src = "https://accounts.google.com/gsi/client"; googleScript.className = "social-script-tag"; document.body.appendChild(googleScript); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// googleScript.onload = function (e) { if (google) { //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// google.accounts.id.initialize({ client_id: clientId, }); google.accounts.id.revoke(socialId, (done) => { console.log(done.error); resolve(true); }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } }; } else { resolve(true); } ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// }); ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// return response; ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// };