diff --git a/src/components/general/host-wg-ip-field.tsx b/src/components/general/host-wg-ip-field.tsx index ab34254..69a53dc 100644 --- a/src/components/general/host-wg-ip-field.tsx +++ b/src/components/general/host-wg-ip-field.tsx @@ -88,7 +88,7 @@ export default function HostWgIpField({ { onChange?.(v); }} diff --git a/src/components/general/setup-main-host-button.tsx b/src/components/general/setup-main-host-button.tsx index 72f0349..adcff92 100755 --- a/src/components/general/setup-main-host-button.tsx +++ b/src/components/general/setup-main-host-button.tsx @@ -25,13 +25,6 @@ export default function SetupMainHostButton({ button_props }: Props) { return ( - {/* */} - {status?.error && status.msg ? ( )} diff --git a/src/pages/admin/hosts/add/(functions)/fetch-ip.ts b/src/pages/admin/hosts/add/(functions)/fetch-ip.ts new file mode 100644 index 0000000..9686fde --- /dev/null +++ b/src/pages/admin/hosts/add/(functions)/fetch-ip.ts @@ -0,0 +1,45 @@ +import type { BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db"; +import fetchApi from "@/src/components/twui/utils/fetch/fetchApi"; +import type useFormInit from "@/src/hooks/use-form-init"; +import type { ApiReqParams } from "@/src/types"; +import type { APIResponseObject } from "@moduletrace/bunext/types"; +import type { Dispatch, SetStateAction } from "react"; + +type Params = { + iface: string; + local: boolean; + setLoading: Dispatch>; + setForm: Dispatch>; +}; + +export default async function clientFetchIP({ + iface, + local, + setLoading, + setForm, +}: Params) { + if (!iface) return; + + const endpoint = local + ? `/api/admin/interface-local-ip?interface=${iface}` + : `/api/admin/public-ip?interface=${iface}`; + + setLoading(true); + + fetchApi(endpoint, { + method: "GET", + }) + .then((res) => { + if (res.success && res.stringRes) { + setForm((prev) => ({ + ...prev, + public_ip_address: res.stringRes!, + })); + } + }) + .finally(() => { + setTimeout(() => { + setLoading(false); + }, 1000); + }); +} diff --git a/src/pages/admin/hosts/add/(functions)/submit-add-host-form.ts b/src/pages/admin/hosts/add/(functions)/submit-add-host-form.ts index 6e1ef15..220dcc5 100644 --- a/src/pages/admin/hosts/add/(functions)/submit-add-host-form.ts +++ b/src/pages/admin/hosts/add/(functions)/submit-add-host-form.ts @@ -13,7 +13,9 @@ export default async function submitAddHostForm({ existing_full, }: ReturnType>) { try { - const confirm_msg = existing_full?.id + const is_updating_host = typeof existing_full?.id == "number"; + + const confirm_msg = is_updating_host ? `Update this host?` : `Create this new host?`; @@ -24,12 +26,10 @@ export default async function submitAddHostForm({ setLoading(true); const res = await fetchApi( - existing_full?.id - ? `/api/admin/update-host` - : `/api/admin/add-host`, + is_updating_host ? `/api/admin/update-host` : `/api/admin/add-host`, { method: "POST", - body: existing_full?.id + body: is_updating_host ? { host_id: existing_full.id, update_data: form, @@ -49,10 +49,7 @@ export default async function submitAddHostForm({ }, ); - const host_id = - typeof existing_full?.id == "number" - ? existing_full.id - : res.numberRes; + const host_id = is_updating_host ? existing_full.id : res.numberRes; if (res.success) { clearLocalForm(); diff --git a/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-action.tsx b/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-action.tsx index e3d9651..f428241 100644 --- a/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-action.tsx +++ b/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-action.tsx @@ -16,13 +16,15 @@ export default function AddHostFormAction({ return null; } + const is_updating_host = typeof existing_full?.id == "number"; + return ( ); } diff --git a/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-interface.tsx b/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-interface.tsx index 2047187..76b5543 100644 --- a/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-interface.tsx +++ b/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-interface.tsx @@ -17,7 +17,7 @@ export default function AddHostFormInterface({ if (existing_full?.interface) { return ( >; @@ -19,82 +22,78 @@ export default function AddHostFormPublicIP({ app_context, existing_full, }: Props) { - const [useLocalIP, setUseLocalIP] = useState(false); + const is_existing_local_ip = isLocalIPAddress( + existing_full?.public_ip_address, + ) + ? true + : false; + + const [useLocalIP, setUseLocalIP] = useState(is_existing_local_ip); const { loading, setLoading } = useStatus({ - initialLoading: existing_full?.id ? false : true, + initialLoading: true, }); - function fetchIP(iface: string, local: boolean) { - if (!iface) return; - - const endpoint = local - ? `/api/admin/interface-local-ip?interface=${iface}` - : `/api/admin/public-ip?interface=${iface}`; - - setLoading(true); - - fetchApi(endpoint, { - method: "GET", - }) - .then((res) => { - if (res.success && res.stringRes) { - setForm((prev) => ({ - ...prev, - public_ip_address: res.stringRes!, - })); - } - }) - .finally(() => { - setTimeout(() => { - setLoading(false); - }, 1000); - }); - } - useEffect(() => { - if (!form.interface) return; - fetchIP(form.interface, useLocalIP); + if (!form.interface) { + setLoading(false); + return; + } + + clientFetchIP({ + iface: form.interface, + local: useLocalIP, + setForm, + setLoading, + }); }, [form.interface, useLocalIP]); - if (existing_full?.public_ip_address) { - return ( - - ); - } + // if (existing_full?.public_ip_address) { + // return ( + // + // ); + // } return ( - {loading ? : null} - { - setForm((prev) => ({ - ...prev, - public_ip_address: v, - })); - }} - /> - { - setUseLocalIP(checked); - }} - label={ - Use Local IP? - } - defaultChecked={ - useLocalIP || Boolean(app_context.pageProps?.is_local_ip) - } - /> + {loading ? ( + + ) : ( + <> + { + setForm((prev) => ({ + ...prev, + public_ip_address: v, + })); + }} + /> + { + setUseLocalIP(checked); + }} + label={ + + Use Local IP? + + } + defaultChecked={ + useLocalIP || + isLocalIPAddress(form.public_ip_address) + } + /> + + )} ); } diff --git a/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-wg-ip-address.tsx b/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-wg-ip-address.tsx index 98d7865..988430c 100644 --- a/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-wg-ip-address.tsx +++ b/src/pages/admin/hosts/add/(partials)/add-host-form/add-host-form-wg-ip-address.tsx @@ -19,7 +19,7 @@ export default function AddHostFormWgIpAddress({ return ( diff --git a/src/pages/admin/settings/(sections)/change-password-section.tsx b/src/pages/admin/settings/(sections)/change-password-section.tsx index 1ee2c56..b3bd4ac 100644 --- a/src/pages/admin/settings/(sections)/change-password-section.tsx +++ b/src/pages/admin/settings/(sections)/change-password-section.tsx @@ -87,7 +87,7 @@ export default function ChangePasswordSection() { onChange={(e) => { setNewPassword(e.target.value); }} - value={new_password} + defaultValue={new_password} /> { setConfirmPassword(e.target.value); }} - value={confirm_password} + defaultValue={confirm_password} /> {status?.error && status.msg ? ( @@ -137,4 +137,4 @@ export default function ChangePasswordSection() { ); -} \ No newline at end of file +} diff --git a/src/pages/admin/setup/(partials)/setup-update-wg-ui-action.tsx b/src/pages/admin/setup/(partials)/setup-update-wg-ui-action.tsx index 7a3e246..b473590 100644 --- a/src/pages/admin/setup/(partials)/setup-update-wg-ui-action.tsx +++ b/src/pages/admin/setup/(partials)/setup-update-wg-ui-action.tsx @@ -78,7 +78,7 @@ export default function SetupUpdateWgUiAction({ setup }: Props) { label="Repository URL" placeholder={SiteData["RepoURL"]} - value={repoUrl} + defaultValue={repoUrl} onChange={(e) => { setRepoUrl(e.target.value); }} @@ -88,7 +88,7 @@ export default function SetupUpdateWgUiAction({ setup }: Props) { label="Branch" placeholder="main" - value={branch} + defaultValue={branch} onChange={(e) => { setBranch(e.target.value); }} diff --git a/src/pages/api/admin/update-host.ts b/src/pages/api/admin/update-host.ts index 72bcb59..6928098 100644 --- a/src/pages/api/admin/update-host.ts +++ b/src/pages/api/admin/update-host.ts @@ -1,7 +1,6 @@ import type { BUN_SQLITE_WGUI_HOSTS } from "@/db/types/db"; import checkUserAccess from "@/src/functions/backend/auth/check-user-access"; import userAuth from "@/src/functions/backend/auth/user-auth"; -import createWireguardHost from "@/src/functions/backend/setup/create-wireguard-host"; import setupWireguardHost from "@/src/functions/backend/setup/setup-wireguard-host"; import type { ApiReqParams, TableType } from "@/src/types"; import BunSQLite from "@moduletrace/bun-sqlite"; diff --git a/src/utils/is-local-ip-address.ts b/src/utils/is-local-ip-address.ts new file mode 100644 index 0000000..9b699dc --- /dev/null +++ b/src/utils/is-local-ip-address.ts @@ -0,0 +1,3 @@ +export default function isLocalIPAddress(ip: string | undefined) { + return Boolean(ip?.match(/^(192|10)\./)); +}