Files
opal/web/js/auth.js
2025-12-29 22:05:31 +10:00

70 lines
2.0 KiB
JavaScript

const accessToken = localStorage.getItem('accessToken');
async function isAccessTokenOkay() {
try {
const response = await fetch('/auth/check_access_token', {
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`,
}
});
if (response.status === 200) return true;
if (response.status === 401) return false;
console.error('Error: server sent unexpected HTTP status code', response.status);
return false;
} catch (err) {
console.error('Network or server error:', err);
return false;
}
}
(async () => {
if (!accessToken) return;
const valid = await isAccessTokenOkay();
if (valid && window.location.pathname === '/web/login') {
window.location.href = '/web/libraries';
}
if (!valid) {
window.location.href = '/web/login';
}
})();
//used in /web/login, not a general purpose function
async function getAccessToken() {
const username = document.getElementById('username').value;
const password = document.getElementById('password').value;
try {
const response = await fetch('/auth/user_and_pass', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ username, password })
});
if (response.status === 200) {
const data = await response.json();
const accessToken = data.AccessToken;
if (!accessToken) {
alert('Login failed: no token returned');
return;
}
localStorage.setItem('accessToken', accessToken);
window.location.href = '/web/libraries';
} else if (response.status === 401) {
alert('Invalid username or password');
} else {
alert('Server error, please try again later.');
}
} catch (err) {
alert('Network error, please try again later.');
}
}