diff --git a/src/lib/components/common/classes.svelte.ts b/src/lib/components/common/classes.svelte.ts index 6c4ded8..7a80d8d 100644 --- a/src/lib/components/common/classes.svelte.ts +++ b/src/lib/components/common/classes.svelte.ts @@ -16,6 +16,7 @@ export class AppSettingsObject { appLoaded = false // for hiding the screen until hydration has completed sidebarDrawerOpen = false // for determining if the sidebar is open when on a small screen toastAlerts = new SvelteMap(); // for adding or removing alerts + apiTested = true // used to hide the app if the api tests are failing public constructor(init?: Partial) { Object.assign(this, init); diff --git a/src/lib/components/settings/server-settings.svelte b/src/lib/components/settings/server-settings.svelte index 19f0bbf..14d5c34 100644 --- a/src/lib/components/settings/server-settings.svelte +++ b/src/lib/components/settings/server-settings.svelte @@ -1,6 +1,8 @@
@@ -18,5 +20,16 @@ Generate an API key for your headscale instance and place it here. - + + {#if appSettings.apiTested} + + + + {:else} + + {/if} +
diff --git a/src/lib/components/settings/server-settings.svelte.ts b/src/lib/components/settings/server-settings.svelte.ts index 4810dcc..06eebf8 100644 --- a/src/lib/components/settings/server-settings.svelte.ts +++ b/src/lib/components/settings/server-settings.svelte.ts @@ -1,26 +1,25 @@ import { newToastAlert } from "../layout/toast.svelte.ts"; -import { persistentAppSettings } from "../common/state.svelte"; +import { appSettings, persistentAppSettings } from "../common/state.svelte"; export async function testAPIConnectivity(submission: SubmitEvent) { - try { - const response = await fetch(`${persistentAppSettings.headscaleURL}/api/v1/apikey`, { - method: 'GET', - headers: { - 'Authorization': `Bearer ${persistentAppSettings.headscaleAPIKey}`, - 'Content-Type': 'application/json' - } - }); - - if (!response.ok) { - newToastAlert(`HTTP error! Status: ${response.status}`); + const response = await fetch(`${persistentAppSettings.headscaleURL}/api/v1/apikey`, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${persistentAppSettings.headscaleAPIKey}`, + 'Content-Type': 'application/json' } - - const data = await response.json(); - newToastAlert('success!'); - if (persistentAppSettings.debugLogging) { - newToastAlert(`API Response: ${JSON.stringify(data)}`); - } - } catch (error) { - newToastAlert(`Error fetching API key: ${error}`); + }); + + if (!response.ok) { + newToastAlert(`API error! Status: ${response.status}`); + appSettings.apiTested = false; + } + + const data = await response.json(); + newToastAlert('Successfully connected to headscale!'); + appSettings.apiTested = true; + + if (persistentAppSettings.debugLogging) { + newToastAlert(`API Response: ${JSON.stringify(data)}`); } } \ No newline at end of file