import type { BUN_SQLITE_WGUI_CLIENT_ROUTES } from "@/db/types/db"; import { TlsData } from "@/src/data/tls-data"; import { decrypt } from "@/src/utils/crypt"; import readAcmeEnv from "./read-acme-env"; type Params = { route?: BUN_SQLITE_WGUI_CLIENT_ROUTES | null; }; export type RouteAcmeConfig = { provider: string; email: string; staging: boolean; values: Record; source: "route" | "env"; }; export default async function readRouteAcmeConfig({ route, }: Params): Promise< | { success: true; config: RouteAcmeConfig } | { success: false; msg: string } > { const acme_env = readAcmeEnv(); let route_values: Record = {}; if (route?.acme_credentials) { try { const decrypted = await decrypt(route.acme_credentials); const parsed = JSON.parse(decrypted) as Record; route_values = parsed || {}; } catch { return { success: false, msg: `Could not decrypt the saved ACME credentials for this route`, }; } } const provider = route?.acme_dns_provider?.trim() || acme_env.values.ACME_DNS_PROVIDER || TlsData.DefaultDnsProvider; const email = route?.acme_email?.trim() || acme_env.values.ACME_EMAIL || ""; const source = route?.acme_dns_provider ? "route" : "env"; const values = source == "route" ? route_values : acme_env.values; return { success: true, config: { provider, email, staging: route?.acme_staging == 1 || TlsData.AcmeStaging, values, source, }, }; }