/* 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 = '
' + message + '
' 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('./') }