87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
import { execFileSync } from "node:child_process";
|
|
import grabSystemSetupStatus from "@/src/functions/backend/setup/grab-system-setup-status";
|
|
|
|
const CADDY_SERVICE_NAME = "wgui-caddy";
|
|
|
|
function run({ command, args }: { command: string; args: string[] }) {
|
|
try {
|
|
const output = execFileSync(command, args, {
|
|
encoding: "utf-8",
|
|
stdio: "pipe",
|
|
timeout: 30000,
|
|
}).trim();
|
|
|
|
return {
|
|
success: true as const,
|
|
msg: output,
|
|
};
|
|
} catch (error: any) {
|
|
const stdout = error?.stdout ? String(error.stdout).trim() : "";
|
|
const stderr = error?.stderr ? String(error.stderr).trim() : "";
|
|
|
|
return {
|
|
success: false as const,
|
|
msg: [stdout, stderr, error.message]
|
|
.filter(Boolean)
|
|
.join("\n")
|
|
.trim(),
|
|
};
|
|
}
|
|
}
|
|
|
|
function caddyServiceIsActive({
|
|
init_system,
|
|
}: {
|
|
init_system: ReturnType<typeof grabSystemSetupStatus>["init_system"];
|
|
}) {
|
|
if (init_system == "systemd") {
|
|
const status = run({
|
|
command: "systemctl",
|
|
args: ["is-active", CADDY_SERVICE_NAME],
|
|
});
|
|
|
|
return status.success && status.msg == "active";
|
|
}
|
|
|
|
if (init_system == "openrc") {
|
|
return run({
|
|
command: "rc-service",
|
|
args: [CADDY_SERVICE_NAME, "status"],
|
|
}).success;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
export default function reloadCaddyService() {
|
|
const setup_status = grabSystemSetupStatus();
|
|
const service_active = caddyServiceIsActive({
|
|
init_system: setup_status.init_system,
|
|
});
|
|
|
|
if (setup_status.is_dev && !service_active) {
|
|
return {
|
|
success: true as const,
|
|
msg: `Development mode — Caddy service is not running, reload skipped`,
|
|
};
|
|
}
|
|
|
|
switch (setup_status.init_system) {
|
|
case "systemd":
|
|
return run({
|
|
command: "systemctl",
|
|
args: ["reload", CADDY_SERVICE_NAME],
|
|
});
|
|
case "openrc":
|
|
return run({
|
|
command: "rc-service",
|
|
args: [CADDY_SERVICE_NAME, "reload"],
|
|
});
|
|
default:
|
|
return {
|
|
success: false as const,
|
|
msg: `No supported init system found for wgui-caddy`,
|
|
};
|
|
}
|
|
}
|