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 ( <>