Spaces:
Sleeping
Sleeping
| import { config } from "$lib/server/config"; | |
| import type { Session } from "$lib/types/Session"; | |
| import { logger } from "./logger"; | |
| import { v4 } from "uuid"; | |
| class AdminTokenManager { | |
| private token = config.ADMIN_TOKEN || v4(); | |
| // contains all session ids that are currently admin sessions | |
| private adminSessions: Array<Session["sessionId"]> = []; | |
| public get enabled() { | |
| // if open id is configured, disable the feature | |
| return config.ADMIN_CLI_LOGIN === "true"; | |
| } | |
| public isAdmin(sessionId: Session["sessionId"]) { | |
| if (!this.enabled) return false; | |
| return this.adminSessions.includes(sessionId); | |
| } | |
| public checkToken(token: string, sessionId: Session["sessionId"]) { | |
| if (!this.enabled) return false; | |
| if (token === this.token) { | |
| logger.info(`[ADMIN] Token validated`); | |
| this.adminSessions.push(sessionId); | |
| this.token = config.ADMIN_TOKEN || v4(); | |
| return true; | |
| } | |
| return false; | |
| } | |
| public removeSession(sessionId: Session["sessionId"]) { | |
| this.adminSessions = this.adminSessions.filter((id) => id !== sessionId); | |
| } | |
| public displayToken() { | |
| // if admin token is set, don't display it | |
| if (!this.enabled || config.ADMIN_TOKEN) return; | |
| let port = process.argv.includes("--port") | |
| ? parseInt(process.argv[process.argv.indexOf("--port") + 1]) | |
| : undefined; | |
| if (!port) { | |
| const mode = process.argv.find((arg) => arg === "preview" || arg === "dev"); | |
| if (mode === "preview") { | |
| port = 4173; | |
| } else if (mode === "dev") { | |
| port = 5173; | |
| } else { | |
| port = 3000; | |
| } | |
| } | |
| const url = (config.PUBLIC_ORIGIN || `http://localhost:${port}`) + "?token="; | |
| logger.info(`[ADMIN] You can login with ${url + this.token}`); | |
| } | |
| } | |
| export const adminTokenManager = new AdminTokenManager(); | |