Initialize client forms

This commit is contained in:
2026-09-17 07:22:20 +01:00
parent e0d105beb9
commit 90ee3debf0
28 changed files with 584 additions and 145 deletions
@@ -3,25 +3,18 @@ import type {
BUN_SQLITE_WGUI_HOSTS,
BUN_SQLITE_WGUI_VARIABLES,
} from "@/db/types/db";
import { AppData } from "@/src/data/app-data";
import grabDirNames from "@/src/utils/grab-dir-names";
import deriveWireguardInterfaceName from "@/src/utils/derive-wireguard-interface-name";
import { execSync } from "node:child_process";
import path from "node:path";
import grabHostNetworkInterface from "./grab-host-network-interface";
import type { APIResponseObject } from "@moduletrace/bunext/types";
import BunSQLite from "@moduletrace/bun-sqlite";
import type { TableType, User } from "@/src/types";
import checkPrivateIPAvailability from "./check-private-ip-availability";
import manageWireguardHost from "./manage-wireguard-host";
import grabHostDirnames from "./grab-host-dir-names";
const {
WGUI_LIB_HOSTS_CONFIGS_DIR,
WIREGUARD_PRIVATE_KEY_FILE_NAME,
WIREGUARD_PUBLIC_KEY_FILE_NAME,
WGUI_LIB_HOST_CLIENTS_DIR_NAME,
WGUI_LIB_HOST_IPTABLES_DIR_NAME,
} = grabDirNames();
const { WIREGUARD_PRIVATE_KEY_FILE_NAME, WIREGUARD_PUBLIC_KEY_FILE_NAME } =
grabDirNames();
type Params = {
host?: BUN_SQLITE_WGUI_HOSTS;
@@ -34,29 +27,18 @@ export default async function setupWireguardHost({
wg_subnet_ip,
user,
}: Params): Promise<APIResponseObject> {
const host_id = host?.id || AppData["WireguardHostID"];
const INTERFACE_NAME = deriveWireguardInterfaceName({ host_id });
const HOST_CONFIG_DIR = path.join(
WGUI_LIB_HOSTS_CONFIGS_DIR,
String(host_id),
);
const HOST_CLIENTS_DIR = path.join(
WGUI_LIB_HOSTS_CONFIGS_DIR,
WGUI_LIB_HOST_CLIENTS_DIR_NAME,
);
const HOST_IPTABLES_DIR = path.join(
WGUI_LIB_HOSTS_CONFIGS_DIR,
WGUI_LIB_HOST_IPTABLES_DIR_NAME,
);
const HOST_CONFIG_FILE = path.join(
const {
HOST_CLIENTS_DIR,
HOST_CONFIG_DIR,
`${INTERFACE_NAME}.conf`,
);
HOST_CONFIG_FILE,
HOST_ID,
HOST_IPTABLES_DIR,
HOST_PRIVATE_KEY_FILE,
HOST_PUBLIC_KEY_FILE,
INTERFACE_NAME,
POST_DOWN_PATH,
POST_UP_PATH,
} = grabHostDirnames({ host });
const variables_res = await BunSQLite.select<
BUN_SQLITE_WGUI_VARIABLES,
@@ -75,7 +57,7 @@ export default async function setupWireguardHost({
query: {
query: {
host_id: {
value: host_id,
value: HOST_ID,
},
},
},
@@ -111,6 +93,8 @@ export default async function setupWireguardHost({
pre_sh += `set -e\n`;
pre_sh += `mkdir -p ${HOST_CONFIG_DIR}\n`;
pre_sh += `mkdir -p ${HOST_CLIENTS_DIR}\n`;
pre_sh += `mkdir -p ${HOST_IPTABLES_DIR}\n`;
pre_sh += `cd ${HOST_CONFIG_DIR}\n`;
pre_sh += `if [ ! -f ${WIREGUARD_PRIVATE_KEY_FILE_NAME} ]; then\n`;
pre_sh += ` wg genkey | tee ${WIREGUARD_PRIVATE_KEY_FILE_NAME} | wg pubkey > ${WIREGUARD_PUBLIC_KEY_FILE_NAME}\n`;
@@ -126,17 +110,15 @@ export default async function setupWireguardHost({
}
try {
const HOST_PUBLIC_KEY = execSync(
`cat ${path.join(HOST_CONFIG_DIR, WIREGUARD_PUBLIC_KEY_FILE_NAME)}`,
{ encoding: "utf-8" },
).trim();
const HOST_PUBLIC_KEY = execSync(`cat ${HOST_PUBLIC_KEY_FILE}`, {
encoding: "utf-8",
}).trim();
const HOST_PRIVATE_KEY = execSync(
`cat ${path.join(HOST_CONFIG_DIR, WIREGUARD_PRIVATE_KEY_FILE_NAME)}`,
{ encoding: "utf-8" },
).trim();
const HOST_PRIVATE_KEY = execSync(`cat ${HOST_PRIVATE_KEY_FILE}`, {
encoding: "utf-8",
}).trim();
if (host_id == 0) {
if (HOST_ID == 0) {
const update_variables = await BunSQLite.insert<
BUN_SQLITE_WGUI_VARIABLES,
TableType
@@ -155,12 +137,10 @@ export default async function setupWireguardHost({
update_on_duplicate: true,
});
console.log("update_variables", update_variables);
if (!update_variables.success) {
throw new Error(`Couldn't update host variables`);
}
} else if (host_id) {
} else if (HOST_ID) {
const update_host = await BunSQLite.insert<
BUN_SQLITE_WGUI_HOSTS,
TableType
@@ -168,7 +148,7 @@ export default async function setupWireguardHost({
table: "hosts",
data: [
{
id: host_id,
id: HOST_ID,
user_id: user.id,
wg_ip_address: HOST_WG_IP,
public_key: HOST_PUBLIC_KEY,
@@ -182,9 +162,6 @@ export default async function setupWireguardHost({
sh += `set -e\n`;
const POST_UP_PATH = path.join(HOST_IPTABLES_DIR, `up.sh`);
const POST_DOWN_PATH = path.join(HOST_IPTABLES_DIR, `down.sh`);
sh += `cd ${HOST_CONFIG_DIR}\n`;
sh += `cat > ${POST_UP_PATH} << EOF\n`;
@@ -247,7 +224,7 @@ export default async function setupWireguardHost({
const exec = execSync(sh, { encoding: "utf-8" });
const manage_res = manageWireguardHost({
host_id,
host_id: HOST_ID,
action: "restart",
});