mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-04-29 18:42:28 +00:00
85 lines
1.7 KiB
TypeScript
85 lines
1.7 KiB
TypeScript
import { TokenResponse } from "src/api/npm";
|
|
|
|
export const TOKEN_KEY = "authentications";
|
|
|
|
export class AuthStore {
|
|
// Get all tokens from stack
|
|
get tokens() {
|
|
const t = localStorage.getItem(TOKEN_KEY);
|
|
let tokens = [];
|
|
if (t !== null) {
|
|
try {
|
|
tokens = JSON.parse(t);
|
|
} catch (e) {
|
|
// do nothing
|
|
}
|
|
}
|
|
return tokens;
|
|
}
|
|
|
|
// Get last token from stack
|
|
get token() {
|
|
const t = this.tokens;
|
|
if (t.length) {
|
|
return t[t.length - 1];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Get expires from last token
|
|
get expires() {
|
|
const t = this.token;
|
|
if (t && typeof t.expires !== "undefined") {
|
|
const expires = Number(t.expires);
|
|
if (expires && !isNaN(expires)) {
|
|
return expires;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Filter out invalid tokens and return true if we find one that is valid
|
|
hasActiveToken() {
|
|
const t = this.tokens;
|
|
if (!t.length) {
|
|
return false;
|
|
}
|
|
|
|
const now = Math.round(new Date().getTime() / 1000);
|
|
const oneMinuteBuffer = 60;
|
|
for (let i = t.length - 1; i >= 0; i--) {
|
|
const valid = t[i].expires - oneMinuteBuffer > now;
|
|
if (valid) {
|
|
return true;
|
|
} else {
|
|
this.drop();
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Set a single token on the stack
|
|
set({ token, expires }: TokenResponse) {
|
|
localStorage.setItem(TOKEN_KEY, JSON.stringify([{ token, expires }]));
|
|
}
|
|
|
|
// Add a token to the stack
|
|
add({ token, expires }: TokenResponse) {
|
|
const t = this.tokens;
|
|
t.push({ token, expires });
|
|
localStorage.setItem(TOKEN_KEY, t);
|
|
}
|
|
|
|
// Drop a token from the stack
|
|
drop() {
|
|
const t = this.tokens;
|
|
localStorage.setItem(TOKEN_KEY, t.splice(-1, 1));
|
|
}
|
|
|
|
clear() {
|
|
localStorage.removeItem(TOKEN_KEY);
|
|
}
|
|
}
|
|
|
|
export default new AuthStore();
|