async function login(username, password, args = {}) { let res = await post('login', { username: username, password: password, ...args, }) if (res.token) { await setToken(res.token, true) removedRoutes = [] //data.config = null pages = [] routes = [] //await reloadConfig() if (data.isAdmin) { location.href = '#/' return location.reload() } await reloadPages() return true } else { clearToken() return false } } async function logout() { await post('logout', {}) clearToken() //data.pageLoading = true removedRoutes = [] pages = [] routes = [] data.isRouterAlive = false location.href = "" } function tokenIsAdmin() { let token = getToken() if (!token) return false let tdata = parseJWT(token) return tdata?.user?.apu } function getToken() { return localStorage.getItem(getLocalStoragePrefix() + 'token') } async function setToken(token, bypassReload) { localStorage.setItem(getLocalStoragePrefix() + 'token', token) data.token = token data.tokendata = parseJWT(token) data.user = data.tokendata.user //console.log("user", data.user) data.isAdmin = data.user?.apu && data.user?.role == 'apm-admin' socketBoot() reloadNotifications() } function clearToken() { let tprefix = getLocalStoragePrefix() let localKeys = Object.keys(localStorage) for (let lkey of localKeys) { if (!lkey.startsWith(tprefix + 'persist_')) localStorage.removeItem(lkey) } data.tokendata = null data.user = null data.isAdmin = false editmode = false } function getRefreshToken() { return localStorage.getItem(getLocalStoragePrefix() + "rtoken") } async function setRefreshToken(token) { let hasToken = getRefreshToken() localStorage.setItem(getLocalStoragePrefix() + "rtoken", token) } async function clearRefreshToken() { localStorage.removeItem(getLocalStoragePrefix() + "rtoken") } async function refreshToken(){ if (!getRefreshToken()) { clearRefreshToken() clearToken() return false } let res = await post('refreshtoken', { refreshToken: getRefreshToken() }) if (res.token) { await setToken(res.token, true) await setRefreshToken(res.refreshToken, true) return true } else { clearRefreshToken() clearToken() return false } }