import { prisma } from "@/lib/db"; import { encryptSecret } from "@/lib/crypto"; // settings field -> (config key, is secret) const FIELDS: Record = { qobuzEmail: { key: "qobuz.email", secret: false }, qobuzPassword: { key: "qobuz.password", secret: true }, qobuzUserId: { key: "qobuz.user_id", secret: false }, qobuzToken: { key: "qobuz.auth_token", secret: true }, slskdUrl: { key: "slskd.url", secret: false }, slskdApiKey: { key: "slskd.api_key", secret: true }, }; export async function PUT(request: Request) { let body: Record; try { body = (await request.json()) as Record; } catch { return Response.json({ error: "invalid JSON" }, { status: 400 }); } for (const [field, { key, secret }] of Object.entries(FIELDS)) { const raw = body[field]; if (typeof raw !== "string" || raw === "") continue; // absent or "unchanged" const value = secret ? encryptSecret(raw) : raw; await prisma.config.upsert({ where: { key }, create: { key, value, secret }, update: { value, secret }, }); } return Response.json({ ok: true }); } export async function GET() { const rows = await prisma.config.findMany(); const byKey = new Map(rows.map((r) => [r.key, r])); return Response.json({ qobuzEmail: byKey.get("qobuz.email")?.value ?? "", qobuzUserId: byKey.get("qobuz.user_id")?.value ?? "", slskdUrl: byKey.get("slskd.url")?.value ?? "", qobuzPasswordSet: byKey.has("qobuz.password"), qobuzTokenSet: byKey.has("qobuz.auth_token"), slskdApiKeySet: byKey.has("slskd.api_key"), }); }