-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaccountManagement.js
64 lines (59 loc) · 2.39 KB
/
accountManagement.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
signed_in = false
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
// Function to decode JWT
function parseJwt (token) {
const base64Url = token.split('.')[1];
const base64 = decodeURIComponent(atob(base64Url).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
return JSON.parse(base64);
}
function handleCredentialResponse(response) {
document.cookie = "id_token=" + response.credential + "; path=/; max-age=3600; secure; sameSite=Lax";
const accountButton = document.querySelector('#accountButton');
const decoded = parseJwt(response.credential);
document.querySelector('#accountName').innerText = decoded.given_name;
document.querySelector('#accountButton img').src = decoded.picture;
accountButton.style.display = 'block';
document.getElementById("googleLoginButton").style.display = 'none';
tippy("#accountButton", {
content: "Signed in as " + decoded.name + " (" + decoded.email + ")",
placement: "top",
});
signed_in = true
}
function signOut() {
document.cookie = "id_token=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; secure; sameSite=Lax";
google.accounts.id.disableAutoSelect();
location.reload();
}
window.onload = function () {
const id_token = getCookie("id_token");
if (!id_token) {
google.accounts.id.initialize({
client_id: "712821347110-2uma4qc17qvav309ngmvcovdi0a6cdj3.apps.googleusercontent.com",
callback: handleCredentialResponse
});
google.accounts.id.renderButton(
document.getElementById("googleLoginButton"),
{ theme: "outline", size: "large" }
);
google.accounts.id.prompt();
} else {
// Decode the JWT to get user info
const decoded = parseJwt(id_token);
const accountButton = document.querySelector('#accountButton');
document.querySelector('#accountName').innerText = decoded.given_name;
document.querySelector('#accountButton img').src = decoded.picture;
accountButton.style.display = 'block';
tippy("#accountButton", {
content: "Signed in as " + decoded.name + " (" + decoded.email + ")",
placement: "top",
});
signed_in = true
}
}