| | 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(); |
| | |
| | private adminSessions: Array<Session["sessionId"]> = []; |
| |
|
| | public get enabled() { |
| | |
| | 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 (!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(); |
| |
|