diff --git a/src/components/general/client-row.tsx b/src/components/general/client-row.tsx
index 6ce15ba..a25c3fd 100644
--- a/src/components/general/client-row.tsx
+++ b/src/components/general/client-row.tsx
@@ -10,9 +10,10 @@ import type {
BUN_SQLITE_WGUI_CLIENT_RULES,
} from "@/db/types/db";
import deriveClientAccessLabel from "@/src/functions/frontend/derive-client-access-label";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
type Props = {
- client: BUN_SQLITE_WGUI_CLIENTS;
+ client: BUN_SQLITE_WGUI_CLIENTS_JOIN;
rules?: BUN_SQLITE_WGUI_CLIENT_RULES[];
};
@@ -21,6 +22,8 @@ export default function ClientRow({ client, rules }: Props) {
const host_id = Number(client.host_id || 0);
const access = deriveClientAccessLabel({ rules });
+ const host_name =
+ host_id == 0 ? "Main" : client.host_name || `Host #${host_id}`;
async function handleDelete() {
if (
@@ -64,7 +67,7 @@ export default function ClientRow({ client, rules }: Props) {
href={`/admin/hosts/${host_id}`}
className="tabular text-[13px] text-foreground-light/60 dark:text-foreground-dark/60 hover:text-secondary dark:hover:text-secondary whitespace-nowrap"
>
- {host_id == 0 ? "Main" : `Host #${host_id}`}
+ {host_name}
) : (
diff --git a/src/components/general/clients-table.tsx b/src/components/general/clients-table.tsx
index 90c11f7..3c1688e 100644
--- a/src/components/general/clients-table.tsx
+++ b/src/components/general/clients-table.tsx
@@ -1,11 +1,9 @@
import ClientRow from "@/src/components/general/client-row";
-import type {
- BUN_SQLITE_WGUI_CLIENTS,
- BUN_SQLITE_WGUI_CLIENT_RULES,
-} from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_CLIENT_RULES } from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
type Props = {
- clients: BUN_SQLITE_WGUI_CLIENTS[];
+ clients: BUN_SQLITE_WGUI_CLIENTS_JOIN[];
rules_by_client_id: Map;
accessLabel?: string;
minWidthClass?: string;
diff --git a/src/functions/backend/db/clients/grab-clients.ts b/src/functions/backend/db/clients/grab-clients.ts
new file mode 100644
index 0000000..26e9308
--- /dev/null
+++ b/src/functions/backend/db/clients/grab-clients.ts
@@ -0,0 +1,134 @@
+import { AppData } from "@/src/data/app-data";
+import type { ApiReqParams, SQLInsertGenValueType } from "@/src/types";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
+import type { ServerQueryParamOrder } from "@moduletrace/bun-sqlite/dist/types";
+import BunSQLite from "@moduletrace/bun-sqlite";
+import type { APIResponseObject } from "@moduletrace/bunext/types";
+
+type Params = {
+ query?: ApiReqParams;
+ /**
+ * For search terms (ie `search_term_*`) parameters.
+ * This forces all searches to `=` instead of `LIKE`
+ */
+ exact_match?: boolean;
+ host_id?: string | number;
+ user_id?: string | number;
+ client_id?: string | number;
+};
+
+const ORDERABLE_FIELDS = [
+ "id",
+ "created_at",
+ "updated_at",
+ "user_id",
+ "host_id",
+ "name",
+ "wg_ip_address",
+ "public_ip_address",
+ "public_key",
+ "allowed_ips",
+ "allow_all_ips",
+ "notes",
+ "host_name",
+] as const;
+
+export default async function grabClients(
+ params?: Params,
+): Promise> {
+ const { query } = params || {};
+ const sql_query = query?.sql_query;
+
+ try {
+ const LIMIT = AppData["DefaultQueryLimit"];
+
+ let sql = ``;
+ let values: SQLInsertGenValueType[] = [];
+
+ sql += `SELECT\n`;
+ sql += ` c.*,\n`;
+ sql += ` h.name AS host_name\n`;
+ sql += `FROM clients c\n`;
+ sql += `LEFT JOIN hosts h ON c.host_id = h.id\n`;
+ sql += `WHERE 1=1\n`;
+
+ const target_host_id = params?.host_id || query?.host_id;
+ const target_user_id = params?.user_id || query?.user_id;
+ const target_client_id = params?.client_id || query?.client_id || query?.id;
+
+ if (target_host_id) {
+ sql += ` AND c.host_id=?\n`;
+ values.push(target_host_id);
+ }
+
+ if (target_user_id) {
+ sql += ` AND c.user_id=?\n`;
+ values.push(target_user_id);
+ }
+
+ if (target_client_id) {
+ sql += ` AND c.id=?\n`;
+ values.push(target_client_id);
+ }
+
+ let search_terms = [
+ { field: "name", value: query?.name },
+ { field: "wg_ip_address", value: query?.wg_ip_address },
+ ] as const;
+
+ for (const term of search_terms) {
+ if (term.value) {
+ const match_value = params?.exact_match ? "=" : "LIKE";
+ const match_value_param = params?.exact_match
+ ? term.value
+ : `%${term.value.replace(/ /g, "%")}%`;
+ sql += ` AND c.${term.field} ${match_value} ?\n`;
+ values.push(match_value_param);
+ }
+ }
+
+ const order = sql_query?.order as
+ | ServerQueryParamOrder
+ | ServerQueryParamOrder[]
+ | undefined;
+
+ const order_terms = (Array.isArray(order) ? order : order ? [order] : [])
+ .filter((o) => ORDERABLE_FIELDS.includes(o?.field as any))
+ .map((o) => {
+ const is_host_field = o.field === "host_name";
+ return `${is_host_field ? "h" : "c"}.${String(o.field)} ${o.strategy === "DESC" ? "DESC" : "ASC"}`;
+ });
+
+ let sql_order = ``;
+ if (order_terms[0]) {
+ sql_order += `ORDER BY ${order_terms.join(", ")}\n`;
+ }
+
+ let sql_limit = ``;
+ const target_limit = sql_query?.limit || LIMIT;
+ const target_page = sql_query?.page || query?.page;
+ sql_limit += `LIMIT ${target_limit}\n`;
+ if (target_page) {
+ const offset = target_limit * (target_page - 1);
+ sql_limit += `OFFSET ${offset}\n`;
+ }
+
+ const res = await BunSQLite.sql({
+ sql: `${sql}\n${sql_order}\n${sql_limit}`,
+ values,
+ });
+
+ if (query?.count) {
+ const count_sql = `SELECT COUNT(*) AS count FROM (${sql})`;
+ const count_res = await BunSQLite.sql({ sql: count_sql, values });
+ res.count = count_res.singleRes?.count;
+ }
+
+ return res;
+ } catch (error: any) {
+ return {
+ success: false,
+ msg: error.message,
+ };
+ }
+}
\ No newline at end of file
diff --git a/src/pages/admin/(hooks)/use-dashboard-data.ts b/src/pages/admin/(hooks)/use-dashboard-data.ts
index cabc885..dc9a59a 100644
--- a/src/pages/admin/(hooks)/use-dashboard-data.ts
+++ b/src/pages/admin/(hooks)/use-dashboard-data.ts
@@ -1,8 +1,9 @@
import { useAdminCrudGet } from "@/src/hooks/use-admin-crud-get";
-import type { BUN_SQLITE_WGUI_CLIENTS, BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
export default function useDashboardData() {
- const clients_res = useAdminCrudGet({
+ const clients_res = useAdminCrudGet({
table: "clients",
sql_query: {
order: { field: "created_at", strategy: "DESC" },
diff --git a/src/pages/admin/(sections)/peers-table-section.tsx b/src/pages/admin/(sections)/peers-table-section.tsx
index 59e56cb..d0f4de6 100644
--- a/src/pages/admin/(sections)/peers-table-section.tsx
+++ b/src/pages/admin/(sections)/peers-table-section.tsx
@@ -7,10 +7,10 @@ import Span from "@/src/components/twui/layout/Span";
import AdminCard from "@/src/components/general/admin-card";
import ClientsTable from "@/src/components/general/clients-table";
import useClientRulesMap from "@/src/hooks/use-client-rules-map";
-import type { BUN_SQLITE_WGUI_CLIENTS } from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
type Props = {
- clients?: BUN_SQLITE_WGUI_CLIENTS[];
+ clients?: BUN_SQLITE_WGUI_CLIENTS_JOIN[];
};
const RECENT_LIMIT = 8;
diff --git a/src/pages/admin/clients/(sections)/clients-table-section.tsx b/src/pages/admin/clients/(sections)/clients-table-section.tsx
index 52bcf02..7d87108 100644
--- a/src/pages/admin/clients/(sections)/clients-table-section.tsx
+++ b/src/pages/admin/clients/(sections)/clients-table-section.tsx
@@ -10,7 +10,7 @@ import Stack from "@/src/components/twui/layout/Stack";
import ClientFormModal from "../(partials)/client-form-modal";
import useClientRulesMap from "@/src/hooks/use-client-rules-map";
import { useAdminCrudGet } from "@/src/hooks/use-admin-crud-get";
-import type { BUN_SQLITE_WGUI_CLIENTS } from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
type Props = {
addOpen: boolean;
@@ -20,7 +20,7 @@ type Props = {
export default function ClientsTableSection({ addOpen, setAddOpen }: Props) {
const [query, setQuery] = useState("");
- const { res } = useAdminCrudGet({
+ const { res } = useAdminCrudGet({
table: "clients",
sql_query: {
order: { field: "created_at", strategy: "DESC" },
diff --git a/src/pages/admin/hosts/(functions)/derive-host-config.ts b/src/pages/admin/hosts/(functions)/derive-host-config.ts
index 9a42d34..2d54ab8 100644
--- a/src/pages/admin/hosts/(functions)/derive-host-config.ts
+++ b/src/pages/admin/hosts/(functions)/derive-host-config.ts
@@ -1,11 +1,10 @@
import { AppData } from "@/src/data/app-data";
import deriveWireguardInterfaceName from "@/src/utils/derive-wireguard-interface-name";
-import type { BUN_SQLITE_WGUI_CLIENTS } from "@/db/types/db";
-import type { BUN_SQLITE_WGUI_HOSTS_JOIN } from "@/src/types/sql-joins";
+import type { BUN_SQLITE_WGUI_HOSTS_JOIN, BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
type Params = {
host?: BUN_SQLITE_WGUI_HOSTS_JOIN;
- clients?: BUN_SQLITE_WGUI_CLIENTS[];
+ clients?: BUN_SQLITE_WGUI_CLIENTS_JOIN[];
};
export default function deriveHostConfig({ host, clients }: Params) {
diff --git a/src/pages/admin/hosts/(hooks)/use-host-data.ts b/src/pages/admin/hosts/(hooks)/use-host-data.ts
index df8573f..3226382 100644
--- a/src/pages/admin/hosts/(hooks)/use-host-data.ts
+++ b/src/pages/admin/hosts/(hooks)/use-host-data.ts
@@ -1,8 +1,6 @@
import { useAdminCrudGet } from "@/src/hooks/use-admin-crud-get";
-import type {
- BUN_SQLITE_WGUI_CLIENTS,
- BUN_SQLITE_WGUI_HOSTS,
-} from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
import { useContext } from "react";
import { AppContext } from "@/src/pages/__root";
@@ -15,7 +13,7 @@ export default function useHostData() {
initial_res: pageProps?.hosts || undefined,
});
- const clients_res = useAdminCrudGet({
+ const clients_res = useAdminCrudGet({
table: "clients",
limit: 100,
initial_res: pageProps?.clients || undefined,
diff --git a/src/pages/admin/hosts/(partials)/host-card.tsx b/src/pages/admin/hosts/(partials)/host-card.tsx
index 237224c..42bb0fb 100644
--- a/src/pages/admin/hosts/(partials)/host-card.tsx
+++ b/src/pages/admin/hosts/(partials)/host-card.tsx
@@ -1,4 +1,4 @@
-import { GlobeCheck, Server } from "lucide-react";
+import { Edit2, Eye, GlobeCheck, Server } from "lucide-react";
import AdminCard from "@/src/components/general/admin-card";
import DeleteHostButton from "@/src/components/general/delete-host-button";
import Button from "@/src/components/twui/layout/Button";
@@ -8,6 +8,7 @@ import Stack from "@/src/components/twui/layout/Stack";
import Tag from "@/src/components/twui/elements/Tag";
import type { BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db";
import { AppData } from "@/src/data/app-data";
+import Link from "@/src/components/twui/layout/Link";
type Props = {
host: BUN_SQLITE_WGUI_HOSTS;
@@ -17,47 +18,54 @@ type Props = {
export default function HostCard({ host, client_count }: Props) {
const host_id = host.id || 0;
- const title = host_id == 0 ? "Main Host" : ` Host #${host_id}`;
+ const host_url = `/admin/hosts/${host_id}`;
+ const edit_url = `/admin/hosts/${host_id}/edit`;
+ const clients_url = `/admin/hosts/${host_id}/clients`;
+
+ const title = host_id == 0 ? "Main Host" : host.name || `Host #${host_id}`;
return (
-
-
-
-
- {title}
+
+
+
+
+
+ {title}
+
+
+
+ {host.wg_ip_address || "Not configured"}
-
-
- {host.wg_ip_address || "Not configured"}
-
-
+
+
-
-
+
+
+
diff --git a/src/pages/admin/hosts/(partials)/host-stat-cell.tsx b/src/pages/admin/hosts/(partials)/host-stat-cell.tsx
index c5cf144..be05264 100644
--- a/src/pages/admin/hosts/(partials)/host-stat-cell.tsx
+++ b/src/pages/admin/hosts/(partials)/host-stat-cell.tsx
@@ -3,7 +3,7 @@ import Stack from "@/src/components/twui/layout/Stack";
type Props = {
label: string;
- value: string;
+ value: string | number;
};
export default function HostStatCell({ label, value }: Props) {
@@ -17,4 +17,4 @@ export default function HostStatCell({ label, value }: Props) {
);
-}
\ No newline at end of file
+}
diff --git a/src/pages/admin/hosts/(sections)/interface-config-section.tsx b/src/pages/admin/hosts/(sections)/interface-config-section.tsx
index 24941de..f29765d 100644
--- a/src/pages/admin/hosts/(sections)/interface-config-section.tsx
+++ b/src/pages/admin/hosts/(sections)/interface-config-section.tsx
@@ -8,22 +8,19 @@ import Row from "@/src/components/twui/layout/Row";
import Span from "@/src/components/twui/layout/Span";
import Stack from "@/src/components/twui/layout/Stack";
import deriveHostConfig from "../(functions)/derive-host-config";
-import type { BUN_SQLITE_WGUI_CLIENTS } from "@/db/types/db";
import Divider from "@/src/components/twui/layout/Divider";
import H3 from "@/src/components/twui/layout/H3";
import type { BUN_SQLITE_WGUI_HOSTS_JOIN } from "@/src/types/sql-joins";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
import { useContext } from "react";
import { AppContext } from "@/src/pages/__root";
type Props = {
host?: BUN_SQLITE_WGUI_HOSTS_JOIN;
- clients?: BUN_SQLITE_WGUI_CLIENTS[];
+ clients?: BUN_SQLITE_WGUI_CLIENTS_JOIN[];
};
-export default function InterfaceConfigSection({
- host,
- clients,
-}: Props) {
+export default function InterfaceConfigSection({ host, clients }: Props) {
const { pageProps } = useContext(AppContext);
const final_host: BUN_SQLITE_WGUI_HOSTS_JOIN = host
@@ -96,14 +93,14 @@ export default function InterfaceConfigSection({
/>
);
})}
-
+ {/*
# Public key ·{" "}
{config.public_key
? `${config.public_key.slice(0, 24)}…`
: "Not generated"}
-
+
*/}
);
diff --git a/src/pages/admin/hosts/(sections)/main-host-status-section.tsx b/src/pages/admin/hosts/(sections)/main-host-status-section.tsx
index ee382ac..144cf45 100644
--- a/src/pages/admin/hosts/(sections)/main-host-status-section.tsx
+++ b/src/pages/admin/hosts/(sections)/main-host-status-section.tsx
@@ -5,12 +5,12 @@ import Span from "@/src/components/twui/layout/Span";
import Stack from "@/src/components/twui/layout/Stack";
import deriveHostConfig from "../(functions)/derive-host-config";
import { twMerge } from "tailwind-merge";
-import type { BUN_SQLITE_WGUI_CLIENTS } from "@/db/types/db";
import type { BUN_SQLITE_WGUI_HOSTS_JOIN } from "@/src/types/sql-joins";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
type Props = {
host?: BUN_SQLITE_WGUI_HOSTS_JOIN;
- clients?: BUN_SQLITE_WGUI_CLIENTS[];
+ clients?: BUN_SQLITE_WGUI_CLIENTS_JOIN[];
};
export default function MainHostStatusSection({ host, clients }: Props) {
@@ -30,10 +30,12 @@ export default function MainHostStatusSection({ host, clients }: Props) {
value: String(config.client_count),
},
{
- label: "Public key",
- value: config.public_key
- ? `${config.public_key.slice(0, 20)}…`
- : "Not generated",
+ label: "Public IP",
+ value: host?.public_ip_address || "Not generated",
+ },
+ {
+ label: "Listen Port",
+ value: host?.listen_port || "No Listen Port",
},
];
@@ -64,7 +66,7 @@ export default function MainHostStatusSection({ host, clients }: Props) {
{config.config_path}
-
+
{stats.map((stat) => (
({
+ const { res: clients } = useAdminCrudGet({
table: "clients",
sql_query: {
query: {
diff --git a/src/pages/admin/hosts/[host_id]/clients/[client_id]/(partials)/add-client-rule-form.tsx b/src/pages/admin/hosts/[host_id]/clients/[client_id]/(partials)/add-client-rule-form.tsx
index d439021..941cfdf 100644
--- a/src/pages/admin/hosts/[host_id]/clients/[client_id]/(partials)/add-client-rule-form.tsx
+++ b/src/pages/admin/hosts/[host_id]/clients/[client_id]/(partials)/add-client-rule-form.tsx
@@ -1,6 +1,6 @@
import { useState } from "react";
import { Plus } from "lucide-react";
-import type { BUN_SQLITE_WGUI_CLIENTS } from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
import Button from "@/src/components/twui/layout/Button";
import Stack from "@/src/components/twui/layout/Stack";
import Tag from "@/src/components/twui/elements/Tag";
@@ -13,7 +13,7 @@ import {
} from "../../(partials)/client-rules/client-rule-draft";
type Props = {
- client: BUN_SQLITE_WGUI_CLIENTS;
+ client: BUN_SQLITE_WGUI_CLIENTS_JOIN;
};
export default function AddClientRuleForm({ client }: Props) {
diff --git a/src/pages/admin/hosts/[host_id]/clients/[client_id]/(partials)/client-detail-actions.tsx b/src/pages/admin/hosts/[host_id]/clients/[client_id]/(partials)/client-detail-actions.tsx
index 2b3696a..d83762e 100644
--- a/src/pages/admin/hosts/[host_id]/clients/[client_id]/(partials)/client-detail-actions.tsx
+++ b/src/pages/admin/hosts/[host_id]/clients/[client_id]/(partials)/client-detail-actions.tsx
@@ -2,10 +2,10 @@ import { useState } from "react";
import { Pencil, Trash2 } from "lucide-react";
import Button from "@/src/components/twui/layout/Button";
import adminCrudHandler from "@/src/functions/frontend/admin-crud-handler";
-import type { BUN_SQLITE_WGUI_CLIENTS } from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_CLIENTS_JOIN } from "@/src/types/sql-joins";
type Props = {
- client: BUN_SQLITE_WGUI_CLIENTS;
+ client: BUN_SQLITE_WGUI_CLIENTS_JOIN;
};
export default function ClientDetailActions({ client }: Props) {
diff --git a/src/pages/admin/hosts/[host_id]/clients/[client_id]/edit/index.server.ts b/src/pages/admin/hosts/[host_id]/clients/[client_id]/edit/index.server.ts
index 7ecd937..b98637c 100644
--- a/src/pages/admin/hosts/[host_id]/clients/[client_id]/edit/index.server.ts
+++ b/src/pages/admin/hosts/[host_id]/clients/[client_id]/edit/index.server.ts
@@ -1,7 +1,6 @@
-import type { BUN_SQLITE_WGUI_CLIENTS } from "@/db/types/db";
+import grabClients from "@/src/functions/backend/db/clients/grab-clients";
import grabClientRules from "@/src/functions/backend/db/client-rules/grab-client-rules";
-import type { PagePropsType, PageQueryObject, TableType } from "@/src/types";
-import BunSQLite from "@moduletrace/bun-sqlite";
+import type { PagePropsType, PageQueryObject } from "@/src/types";
import type { BunextPageServerFn } from "@moduletrace/bunext/types";
type ClientEditPageQuery = PageQueryObject & {
@@ -11,12 +10,8 @@ type ClientEditPageQuery = PageQueryObject & {
const server: BunextPageServerFn = async ({ query }) => {
const page_query = query as ClientEditPageQuery;
- const client_res = await BunSQLite.select<
- BUN_SQLITE_WGUI_CLIENTS,
- TableType
- >({
- table: "clients",
- targetId: page_query.client_id,
+ const client_res = await grabClients({
+ client_id: page_query.client_id,
});
const client = client_res.singleRes || null;
diff --git a/src/pages/admin/hosts/[host_id]/clients/[client_id]/index.server.ts b/src/pages/admin/hosts/[host_id]/clients/[client_id]/index.server.ts
index 6bb2bec..e29804e 100644
--- a/src/pages/admin/hosts/[host_id]/clients/[client_id]/index.server.ts
+++ b/src/pages/admin/hosts/[host_id]/clients/[client_id]/index.server.ts
@@ -1,8 +1,6 @@
-import type {
- BUN_SQLITE_WGUI_CLIENTS,
- BUN_SQLITE_WGUI_HOSTS,
-} from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db";
import { AppData } from "@/src/data/app-data";
+import grabClients from "@/src/functions/backend/db/clients/grab-clients";
import grabClientRules from "@/src/functions/backend/db/client-rules/grab-client-rules";
import generateWireguardClientQR from "@/src/functions/backend/setup/generate-wireguard-client-qr";
import readWireguardClientConfig from "@/src/functions/backend/setup/read-wireguard-client-config";
@@ -17,12 +15,8 @@ type ClientPageQuery = PageQueryObject & {
const server: BunextPageServerFn = async ({ query }) => {
const page_query = query as ClientPageQuery;
- const client_res = await BunSQLite.select<
- BUN_SQLITE_WGUI_CLIENTS,
- TableType
- >({
- table: "clients",
- targetId: page_query.client_id,
+ const client_res = await grabClients({
+ client_id: page_query.client_id,
});
const client = client_res.singleRes || null;
diff --git a/src/pages/admin/hosts/[host_id]/clients/index.server.ts b/src/pages/admin/hosts/[host_id]/clients/index.server.ts
index 707e875..9c356f4 100644
--- a/src/pages/admin/hosts/[host_id]/clients/index.server.ts
+++ b/src/pages/admin/hosts/[host_id]/clients/index.server.ts
@@ -1,7 +1,5 @@
-import type {
- BUN_SQLITE_WGUI_CLIENTS,
- BUN_SQLITE_WGUI_HOSTS,
-} from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db";
+import grabClients from "@/src/functions/backend/db/clients/grab-clients";
import grabClientRules from "@/src/functions/backend/db/client-rules/grab-client-rules";
import type { PagePropsType, PageQueryObject, TableType } from "@/src/types";
import BunSQLite from "@moduletrace/bun-sqlite";
@@ -19,18 +17,8 @@ const server: BunextPageServerFn = async ({
TableType
>({ table: "hosts", targetId: page_query.host_id });
- const host_clients = await BunSQLite.select<
- BUN_SQLITE_WGUI_CLIENTS,
- TableType
- >({
- table: "clients",
- query: {
- query: {
- host_id: {
- value: page_query.host_id,
- },
- },
- },
+ const host_clients = await grabClients({
+ host_id: page_query.host_id,
});
const clients = host_clients.payload || null;
diff --git a/src/pages/admin/hosts/[host_id]/index.server.ts b/src/pages/admin/hosts/[host_id]/index.server.ts
index a4269c5..b58811b 100644
--- a/src/pages/admin/hosts/[host_id]/index.server.ts
+++ b/src/pages/admin/hosts/[host_id]/index.server.ts
@@ -1,7 +1,5 @@
-import type {
- BUN_SQLITE_WGUI_CLIENTS,
- BUN_SQLITE_WGUI_HOSTS,
-} from "@/db/types/db";
+import type { BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db";
+import grabClients from "@/src/functions/backend/db/clients/grab-clients";
import grabHostDirnames from "@/src/functions/backend/setup/grab-host-dir-names";
import type { PagePropsType, PageQueryObject, TableType } from "@/src/types";
import BunSQLite from "@moduletrace/bun-sqlite";
@@ -24,18 +22,8 @@ const server: BunextPageServerFn = async ({ query }) => {
}
: null;
- const host_clients = await BunSQLite.select<
- BUN_SQLITE_WGUI_CLIENTS,
- TableType
- >({
- table: "clients",
- query: {
- query: {
- host_id: {
- value: page_query.host_id,
- },
- },
- },
+ const host_clients = await grabClients({
+ host_id: page_query.host_id,
});
return {
diff --git a/src/pages/admin/hosts/[host_id]/index.tsx b/src/pages/admin/hosts/[host_id]/index.tsx
index 74f2a76..132434a 100644
--- a/src/pages/admin/hosts/[host_id]/index.tsx
+++ b/src/pages/admin/hosts/[host_id]/index.tsx
@@ -35,13 +35,16 @@ export default function AdminSingleHostPage() {
);
}
- const title = host_id == 0 ? "Main Host" : `Host #${host_id}`;
+ const title = host_id == 0 ? "Main Host" : host?.name || `Host #${host_id}`;
return (
<>