diff --git a/.env.example b/.env.example index a21e7f83..c3cc17d0 100644 --- a/.env.example +++ b/.env.example @@ -10,6 +10,8 @@ NUXT_CLOUDFLARE_API_TOKEN= NUXT_STORAGE_DRIVER= NUXT_STORAGE_FS_BASE= +NUXT_ADMIN_KEY= + NUXT_PUBLIC_DISABLE_VERSION_CHECK= NUXT_GITHUB_CLIENT_ID= diff --git a/nuxt.config.ts b/nuxt.config.ts index 62be1b68..5c768289 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -76,6 +76,7 @@ export default defineNuxtConfig({ }, }, runtimeConfig: { + adminKey: '', cloudflare: { accountId: '', namespaceId: '', diff --git a/server/api/[server]/clear.ts b/server/api/[server]/clear.ts new file mode 100644 index 00000000..af0a54ad --- /dev/null +++ b/server/api/[server]/clear.ts @@ -0,0 +1,13 @@ +import { deleteApp } from '~~/server/shared' + +export default defineEventHandler(async (event) => { + const { server } = getRouterParams(event) + const { key } = getQuery(event) + + if (key !== String(useRuntimeConfig().adminKey)) + return { status: false, error: 'incorrect key' } + + await deleteApp(server) + + return { status: true } +}) diff --git a/server/shared.ts b/server/shared.ts index e205b737..6fd82fb1 100644 --- a/server/shared.ts +++ b/server/shared.ts @@ -63,6 +63,12 @@ export async function getApp(origin: string, server: string) { } } +export async function deleteApp(server: string) { + const keys = (await storage.getKeys('servers:')).filter(k => k.endsWith(`${server}.json`)) + for (const key of keys) + await storage.removeItem(key) +} + export async function listServers() { const keys = await storage.getKeys('servers:') const servers = new Set()