1 | document.addEventListener('DOMContentLoaded', function() {
|
---|
2 | const loginForm = document.getElementById('loginForm');
|
---|
3 | const registerForm = document.getElementById('registerForm');
|
---|
4 | const loginResponse = document.getElementById('loginResponse');
|
---|
5 | const registerResponse = document.getElementById('registerResponse');
|
---|
6 |
|
---|
7 | checkSession();
|
---|
8 |
|
---|
9 | loginForm.addEventListener('submit', function(event) {
|
---|
10 | event.preventDefault();
|
---|
11 |
|
---|
12 | const email = loginForm.email.value;
|
---|
13 | const password = loginForm.password.value;
|
---|
14 |
|
---|
15 | const data = {
|
---|
16 | email: email,
|
---|
17 | password: password
|
---|
18 | };
|
---|
19 |
|
---|
20 | fetch('/account/login', {
|
---|
21 | method: 'POST',
|
---|
22 | headers: {
|
---|
23 | 'Content-Type': 'application/json'
|
---|
24 | },
|
---|
25 | body: JSON.stringify(data)
|
---|
26 | })
|
---|
27 | .then(response => response.json())
|
---|
28 | .then(data => {
|
---|
29 | if (data.sessionId) {
|
---|
30 | loginResponse.textContent = data.message;
|
---|
31 | sessionStorage.setItem('loggedIn', 'true');
|
---|
32 | sessionStorage.setItem('user', JSON.stringify(email));
|
---|
33 | sessionStorage.setItem('isAdmin', data.isAdmin);
|
---|
34 | document.cookie = `sessionId=${data.sessionId}; path=/`;
|
---|
35 | showLoggedInState();
|
---|
36 | closeLoginPopup();
|
---|
37 | } else {
|
---|
38 | throw new Error(data.message);
|
---|
39 | }
|
---|
40 | })
|
---|
41 | .catch(error => {
|
---|
42 | showMessage('loginResponse', 'error', error.message);
|
---|
43 | });
|
---|
44 | });
|
---|
45 |
|
---|
46 | registerForm.addEventListener('submit', function(event) {
|
---|
47 | event.preventDefault();
|
---|
48 |
|
---|
49 | const username = registerForm.username.value;
|
---|
50 | const email = registerForm.email.value;
|
---|
51 | const password = registerForm.password.value;
|
---|
52 |
|
---|
53 | const data = {
|
---|
54 | username: username,
|
---|
55 | email: email,
|
---|
56 | password: password
|
---|
57 | };
|
---|
58 |
|
---|
59 | fetch('/account/register', {
|
---|
60 | method: 'POST',
|
---|
61 | headers: {
|
---|
62 | 'Content-Type': 'application/json'
|
---|
63 | },
|
---|
64 | body: JSON.stringify(data)
|
---|
65 | })
|
---|
66 | .then(response => response.json())
|
---|
67 | .then(data => {
|
---|
68 | if (response.ok) {
|
---|
69 | showMessage('registerResponse', 'success', data.message);
|
---|
70 | closeRegisterPopup();
|
---|
71 | } else {
|
---|
72 | throw new Error(data.message);
|
---|
73 | }
|
---|
74 | })
|
---|
75 | .catch(error => {
|
---|
76 | showMessage('registerResponse', 'error', error.message);
|
---|
77 | });
|
---|
78 | });
|
---|
79 | });
|
---|
80 |
|
---|
81 | function checkSession() {
|
---|
82 | fetch('/account/session', {
|
---|
83 | method: 'GET',
|
---|
84 | credentials: 'include'
|
---|
85 | })
|
---|
86 | .then(response => response.json())
|
---|
87 | .then(data => {
|
---|
88 | if (data.loggedIn) {
|
---|
89 | sessionStorage.setItem('loggedIn', 'true');
|
---|
90 | sessionStorage.setItem('user', JSON.stringify(data.user));
|
---|
91 | sessionStorage.setItem('isAdmin', data.isAdmin);
|
---|
92 | showLoggedInState();
|
---|
93 | } else {
|
---|
94 | sessionStorage.clear();
|
---|
95 | showLoggedOutState();
|
---|
96 | }
|
---|
97 | })
|
---|
98 | .catch(error => {
|
---|
99 | console.error('Error checking session:', error);
|
---|
100 | sessionStorage.clear();
|
---|
101 | showLoggedOutState();
|
---|
102 | });
|
---|
103 | }
|
---|
104 |
|
---|
105 | function logout() {
|
---|
106 | fetch('/account/logout', {
|
---|
107 | method: 'POST',
|
---|
108 | credentials: 'include'
|
---|
109 | })
|
---|
110 | .then(response => {
|
---|
111 | if (response.ok) {
|
---|
112 | sessionStorage.clear();
|
---|
113 | document.cookie = "sessionId=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
|
---|
114 | showLoggedOutState();
|
---|
115 | } else {
|
---|
116 | throw new Error('Logout failed');
|
---|
117 | }
|
---|
118 | })
|
---|
119 | .catch(error => {
|
---|
120 | console.error('Error logging out:', error);
|
---|
121 | });
|
---|
122 | }
|
---|
123 |
|
---|
124 |
|
---|
125 | function handleCredentialResponse(response) {
|
---|
126 | const email = JSON.parse(atob(response.credential.split('.')[1])).email;
|
---|
127 | fetch('/account/login', {
|
---|
128 | method: 'POST',
|
---|
129 | headers: {
|
---|
130 | 'Content-Type': 'application/json'
|
---|
131 | },
|
---|
132 | body: JSON.stringify({ id_token: response.credential })
|
---|
133 | })
|
---|
134 | .then(response => response.json())
|
---|
135 | .then(data => {
|
---|
136 | if (data.sessionId) {
|
---|
137 | sessionStorage.setItem('loggedIn', 'true');
|
---|
138 | sessionStorage.setItem('user', JSON.stringify(email));
|
---|
139 | sessionStorage.setItem('isAdmin', data.isAdmin);
|
---|
140 | document.cookie = `sessionId=${data.sessionId}; path=/`;
|
---|
141 | showLoggedInState();
|
---|
142 | closeLoginPopup();
|
---|
143 | } else {
|
---|
144 | throw new Error(data.message);
|
---|
145 | }
|
---|
146 | })
|
---|
147 | .catch(error => {
|
---|
148 | console.error(error);
|
---|
149 | showMessage('loginResponse', 'error', 'Google login failed');
|
---|
150 | });
|
---|
151 | }
|
---|
152 |
|
---|
153 |
|
---|
154 |
|
---|