import { db } from '~/drizzle/db' import { systemSettings } from '~/drizzle/schema' import { kuGouFetch } from '~~/server/services/kugouService' export default defineEventHandler(async (event) => { const user = event.context.user if (!user) throw createError({ statusCode: 401, message: '未登录' }) if (!['ADMIN', 'SUPER_ADMIN'].includes(user.role)) throw createError({ statusCode: 403, message: '仅管理员可访问' }) const query = getQuery(event) const base = String(query.baseUrl || '').trim() if (base && !/^https?:\/\//i.test(base)) { throw createError({ statusCode: 400, message: 'baseUrl 需要是合法的 http(s) URL' }) } const rows = await db.select().from(systemSettings).limit(1) const settings = rows[0] as any const usedBase = base || settings?.kugouApiBaseUrl || process.env.KUGOU_API_BASE || '' let serviceOk: boolean let serviceMessage: string let loginStatus: any = null const envCookie = !!(process.env.KUGOU_ADMIN_COOKIE || '').trim() const envToken = !!(process.env.KUGOU_ADMIN_TOKEN || '').trim() try { const r = await kuGouFetch('/login/status', { timestamp: Date.now() }) loginStatus = r serviceOk = Number((r as any)?.status ?? 0) === 1 || !!((r as any)?.data?.profile || (r as any)?.data?.account) serviceMessage = serviceOk ? '服务在线,且账号已绑定登录' : 'sidecar 在线,但酷狗账号未登录' } catch (e: any) { serviceOk = false serviceMessage = '无法连接 sidecar (' + usedBase + '):' + (e?.message || String(e)) } return { ok: true, service: { baseUrl: usedBase, serviceOk, serviceMessage, loginStatus, }, // 环境变量兜底(KUGOU_ADMIN_COOKIE / KUGOU_ADMIN_TOKEN):配一次永久用;库里绑定的优先 bound: { hasToken: !!settings?.kugouAdminToken || envToken, hasCookie: !!settings?.kugouAdminCookie || envCookie, // 让界面能说清"这份凭证从哪来",排错时很关键 source: settings?.kugouAdminCookie || settings?.kugouAdminToken ? 'db' : envCookie || envToken ? 'env' : 'none', boundAt: settings?.kugouAdminBoundAt || null, user: settings?.kugouAdminUser || null, }, } })