import { NextResponse } from "next/server"; import { getSettings, updateSettings } from "@/lib/localDb"; import { applyOutboundProxyEnv } from "@/lib/network/outboundProxy"; import bcrypt from "bcryptjs"; export async function GET() { try { const settings = await getSettings(); const { password, ...safeSettings } = settings; const enableRequestLogs = process.env.ENABLE_REQUEST_LOGS === "true"; const enableTranslator = process.env.ENABLE_TRANSLATOR === "true"; return NextResponse.json({ ...safeSettings, enableRequestLogs, enableTranslator, hasPassword: !!password }); } catch (error) { console.log("Error getting settings:", error); return NextResponse.json({ error: error.message }, { status: 500 }); } } export async function PATCH(request) { try { const body = await request.json(); // If updating password, hash it if (body.newPassword) { const settings = await getSettings(); const currentHash = settings.password; // Verify current password if it exists if (currentHash) { if (!body.currentPassword) { return NextResponse.json({ error: "Current password required" }, { status: 400 }); } const isValid = await bcrypt.compare(body.currentPassword, currentHash); if (!isValid) { return NextResponse.json({ error: "Invalid current password" }, { status: 401 }); } } else { // First time setting password, no current password needed // Allow empty currentPassword or default "123456" if (body.currentPassword && body.currentPassword !== "123456") { return NextResponse.json({ error: "Invalid current password" }, { status: 401 }); } } const salt = await bcrypt.genSalt(10); body.password = await bcrypt.hash(body.newPassword, salt); delete body.newPassword; delete body.currentPassword; } const settings = await updateSettings(body); // Apply outbound proxy settings immediately (no restart required) if ( Object.prototype.hasOwnProperty.call(body, "outboundProxyEnabled") || Object.prototype.hasOwnProperty.call(body, "outboundProxyUrl") || Object.prototype.hasOwnProperty.call(body, "outboundNoProxy") ) { applyOutboundProxyEnv(settings); } const { password, ...safeSettings } = settings; return NextResponse.json(safeSettings); } catch (error) { console.log("Error updating settings:", error); return NextResponse.json({ error: error.message }, { status: 500 }); } }