datasquirel/client/auth/logout.js

148 lines
6.3 KiB
JavaScript
Raw Normal View History

2023-06-24 12:09:26 +00:00
/**
* 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
*
2023-06-24 13:31:15 +00:00
* @param {object|null} params - Single object passed
2023-06-24 13:28:36 +00:00
* @param {string|null} params.googleClientId - Google client Id if applicable
*
2023-06-24 12:09:26 +00:00
* @requires localStorageUser - a "user" JSON string stored in local storage with all
* the necessary user data gotten from the server
*
* @returns {Promise<boolean>} - Return
*/
2023-06-24 13:28:36 +00:00
module.exports = async function logout(params) {
2023-06-24 12:09:26 +00:00
/**
* == 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();
2023-06-24 13:38:39 +00:00
const socialId = cookies?.datasquirel_social_id && typeof cookies.datasquirel_social_id == "string" && !cookies.datasquirel_social_id.match(/^null$/i) ? cookies.datasquirel_social_id : null;
2023-06-24 12:09:26 +00:00
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
localStorage.setItem("user", "{}");
localStorage.removeItem("csrf");
document.cookie = `datasquirel_social_id=null;samesite=strict;path=/`;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
const response = await new Promise((resolve, reject) => {
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
2023-06-24 13:38:39 +00:00
if (socialId && !socialId?.match(/^null$/i)) {
2023-06-24 13:31:15 +00:00
const googleClientId = params?.googleClientId;
2023-06-24 12:09:26 +00:00
2023-06-24 13:28:36 +00:00
if (googleClientId) {
const googleScript = document.createElement("script");
googleScript.src = "https://accounts.google.com/gsi/client";
googleScript.className = "social-script-tag";
2023-06-24 12:09:26 +00:00
2023-06-24 13:28:36 +00:00
document.body.appendChild(googleScript);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
2023-06-24 12:09:26 +00:00
2023-06-24 13:28:36 +00:00
googleScript.onload = function (e) {
if (google) {
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
2023-06-24 12:09:26 +00:00
2023-06-24 13:28:36 +00:00
google.accounts.id.initialize({
client_id: googleClientId,
});
2023-06-24 12:09:26 +00:00
2023-06-24 13:28:36 +00:00
google.accounts.id.revoke(socialId, (done) => {
console.log(done.error);
2023-06-24 12:09:26 +00:00
2023-06-24 13:28:36 +00:00
resolve(true);
});
2023-06-24 12:09:26 +00:00
2023-06-24 13:28:36 +00:00
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
};
2023-06-24 13:38:39 +00:00
} else {
resolve(true);
2023-06-24 13:28:36 +00:00
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
2023-06-24 13:23:22 +00:00
} else {
resolve(true);
2023-06-24 12:09:26 +00:00
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
});
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
return response;
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
};