104 lines
3.7 KiB
TypeScript
104 lines
3.7 KiB
TypeScript
|
import parseClientCookies from "../utils/parseClientCookies";
|
||
|
/**
|
||
|
* Login with Google Function
|
||
|
* ===============================================================================
|
||
|
* @description This function uses google identity api to login a user with datasquirel
|
||
|
*/
|
||
|
export default async function logout(
|
||
|
params: { [s: string]: any } | null
|
||
|
): Promise<boolean> {
|
||
|
try {
|
||
|
const localUser = localStorage.getItem("user");
|
||
|
let targetUser;
|
||
|
|
||
|
try {
|
||
|
targetUser = JSON.parse(localUser || "");
|
||
|
} catch (error) {
|
||
|
console.log(error);
|
||
|
}
|
||
|
|
||
|
if (!targetUser) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
|
||
|
const cookies = parseClientCookies();
|
||
|
const socialId =
|
||
|
cookies?.datasquirel_social_id &&
|
||
|
typeof cookies.datasquirel_social_id == "string" &&
|
||
|
!cookies.datasquirel_social_id.match(/^null$/i)
|
||
|
? cookies.datasquirel_social_id
|
||
|
: null;
|
||
|
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
|
||
|
localStorage.setItem("user", "{}");
|
||
|
localStorage.removeItem("csrf");
|
||
|
|
||
|
document.cookie = `datasquirel_social_id=null;samesite=strict;path=/`;
|
||
|
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
|
||
|
const response: boolean = await new Promise((resolve, reject) => {
|
||
|
if (socialId && !socialId?.match(/^null$/i)) {
|
||
|
const googleClientId = params?.googleClientId;
|
||
|
|
||
|
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) {
|
||
|
// @ts-ignore
|
||
|
const google = window.google;
|
||
|
|
||
|
if (google) {
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
|
||
|
google.accounts.id.initialize({
|
||
|
client_id: googleClientId,
|
||
|
});
|
||
|
|
||
|
google.accounts.id.revoke(socialId, (done: any) => {
|
||
|
console.log(done.error);
|
||
|
resolve(true);
|
||
|
});
|
||
|
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
}
|
||
|
};
|
||
|
} else {
|
||
|
resolve(true);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
////////////////////////////////////////
|
||
|
} else {
|
||
|
resolve(true);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return response;
|
||
|
} catch (error) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|