This repository has been archived on 2023-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
web/js/auth.js

79 lines
2.3 KiB
JavaScript
Raw Normal View History

/*
Auth process: User Requests Key => Server emails key to user =>
user opens link to auth.html =>
website POSTs key to server => Server checks validity =>
Server responds with the users auth key =>
auth.js adds this to localStorage
*/
const cmd = document.getElementById('cmd') // Assign element to const
versionDisplay() // Show web version in footer
init() // Run init function
async function sendHome(){
await delay(2000)
location.replace('./')
}
async function cmdOut(message) {
html = '<p>' + message + '</p>'
cmd.insertAdjacentHTML('beforeend', html)
}
async function registerKey(key) { // Posts key to server and listens for response.
const url = `${window.location.origin}/api/v1/register/register`
const res = await fetch(url, { // The response will contain the UUID which will be registered
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
redirect: 'follow',
body: JSON.stringify({uuid: key})
})
const data = await res.json()
return res.status === 201
? (localStorage.setItem('uuid', data.api_key), true)
: false
}
async function checkAuth(key) {
const url = `${window.location.origin}/api/v1/auth/test`
const res = await fetch(url, {
method: 'GET',
redirect: 'follow',
headers: {
'uuid': key
}
})
return res.status === 200 ? true : false
}
async function init(){ // Reads registration key from query, and calls registerKey(key)
cmdOut('Reading authorisation code')
const key = await getQuery('key')
if (key === 'false') {
cmdOut('No valid key found')
cmdOut('Try clicking the link again or request a new activation link')
hideLoading()
return
}
cmdOut('Requesting API Key from server')
if (!await registerKey(key)) {
cmdOut('Failed to register or invalid key')
cmdOut('Try again later or request a new link')
hideLoading()
return
}
showLoading()
if (! await checkAuth(localStorage.getItem('uuid'))) {
cmdOut('Authentication Check failed')
cmdOut('Please logout and request a new link')
hideLoading()
await delay(2000)
location.replace('./')
}
hideLoading()
cmdOut('Authentication succesful')
cmdOut('Redirecting to home')
await delay(3000)
location.replace('./')
}