62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
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<string, string>;
|
|
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<string, string> = {};
|
|
|
|
if (route?.acme_credentials) {
|
|
try {
|
|
const decrypted = await decrypt(route.acme_credentials);
|
|
const parsed = JSON.parse(decrypted) as Record<string, string>;
|
|
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,
|
|
},
|
|
};
|
|
}
|