Files
enstrayedapi/website/helpdesk/static/login.js
2025-10-01 09:50:32 -07:00

68 lines
2.7 KiB
JavaScript

var globalLoggedIn = false
function useGlobalDialog(title,body) {
document.getElementById("globalDialogHeader").innerText = title
document.getElementById("globalDialogText").innerText = body
document.getElementById("globalDialog").showModal()
}
document.addEventListener("DOMContentLoaded", function () {
fetch(`/api/auth/whoami`).then(fetchRes => {
fetchRes.json().then(jsonRes => {
if (jsonRes.loggedIn) {
globalLoggedIn = true
document.getElementById("loginButton").innerText = `Logout ${jsonRes.username}`
if (jsonRes.scopes.includes("helpdesk")) {
let targetElements = document.getElementsByClassName("helpdeskScopeOnly")
// cant do a for loop since targetElements dynamically updates, this is easier but stupid
while (targetElements.length > 0) {
targetElements[0].classList.toggle("helpdeskScopeOnly")
}
}
} else {
globalLoggedIn = false
document.getElementById("loginButton").innerText = `Login`
}
})
})
})
function loginFunction() {
if (globalLoggedIn === true) {
fetch(`/api/auth/logout`).then(fetchRes => {
if (fetchRes.status === 200) {
location.reload()
} else {
fetchRes.text().then(textRes => {
useGlobalDialog("Error", `An error occurred during logout: ${textRes}`)
})
}
})
} else {
let loginWindow = window.open(`/api/auth/login?state=close`, `_blank`)
let loginWatcher = setInterval(() => {
if (loginWindow.closed) {
fetch(`/api/auth/whoami`).then(fetchRes => {
fetchRes.json().then(jsonRes => {
if (jsonRes.loggedIn) {
globalLoggedIn = true
document.getElementById("loginButton").innerText = `Logout ${jsonRes.username}`
if (jsonRes.scopes.includes("helpdesk")) {
let targetElements = document.getElementsByClassName("helpdeskScopeOnly")
while (targetElements.length > 0) {
targetElements[0].classList.toggle("helpdeskScopeOnly")
}
}
} else {
useGlobalDialog("Error", `You are not logged in. Please try logging in again.`)
}
clearInterval(loginWatcher);
})
})
}
}, 500);
}
}