138 lines
5.7 KiB
JavaScript
138 lines
5.7 KiB
JavaScript
|
/**
|
||
|
* 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
|
||
|
*
|
||
|
* @param {object} params - Single object passed
|
||
|
* @param {string|null} params.googleClientId - Google client Id if applicable
|
||
|
*
|
||
|
* @requires localStorageUser - a "user" JSON string stored in local storage with all
|
||
|
* the necessary user data gotten from the server
|
||
|
*
|
||
|
* @returns {Promise<boolean>} - Return
|
||
|
*/
|
||
|
module.exports = async function logout({ googleClientId }) {
|
||
|
/**
|
||
|
* == 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 (googleClientId) {
|
||
|
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) {
|
||
|
if (readyStateDispatch) readyStateDispatch(true);
|
||
|
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
|
||
|
google.accounts.id.initialize({
|
||
|
client_id: clientId,
|
||
|
});
|
||
|
|
||
|
google.accounts.id.revoke(socialId, (done) => {
|
||
|
console.log(done.error);
|
||
|
|
||
|
resolve(true);
|
||
|
});
|
||
|
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
});
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
return response;
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
};
|