From 38e0de269651011b87ccad8bff6061a135c064aa Mon Sep 17 00:00:00 2001 From: Chris Bisset Date: Tue, 20 May 2025 00:20:22 +0000 Subject: [PATCH 01/13] fix api calls for preauth keys --- package-lock.json | 4 ++-- src/lib/common/apiFunctions.svelte | 12 ++++++------ src/lib/users/UserCard/PreAuthKeys.svelte | 4 ++-- .../users/UserCard/PreAuthKeys/NewPreAuthKey.svelte | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b830fa..a036237 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "headscale-ui", - "version": "2025.03.14", + "version": "2025.03.21", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "headscale-ui", - "version": "2025.03.14", + "version": "2025.03.21", "devDependencies": { "@sveltejs/adapter-auto": "^4", "@sveltejs/adapter-static": "^3", diff --git a/src/lib/common/apiFunctions.svelte b/src/lib/common/apiFunctions.svelte index bbaa328..26d4939 100644 --- a/src/lib/common/apiFunctions.svelte +++ b/src/lib/common/apiFunctions.svelte @@ -329,7 +329,7 @@ return apiKeys; } - export async function getPreauthKeys(userName: string): Promise { + export async function getPreauthKeys(userID: string): Promise { // variables in local storage let headscaleURL = localStorage.getItem('headscaleURL') || ''; let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; @@ -341,7 +341,7 @@ let headscalePreAuthKey = [new PreAuthKey()]; let headscalePreAuthKeyResponse: Response = new Response(); - await fetch(headscaleURL + endpointURL + '?user=' + userName, { + await fetch(headscaleURL + endpointURL + '?user=' + userID, { method: 'GET', headers: { Accept: 'application/json', @@ -367,7 +367,7 @@ return headscalePreAuthKey; } - export async function newPreAuthKey(userName: string, expiry: string, reusable: boolean, ephemeral: boolean): Promise { + export async function newPreAuthKey(userID: string, expiry: string, reusable: boolean, ephemeral: boolean): Promise { // variables in local storage let headscaleURL = localStorage.getItem('headscaleURL') || ''; let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; @@ -381,7 +381,7 @@ Authorization: `Bearer ${headscaleAPIKey}` }, body: JSON.stringify({ - user: userName, + user: userID, expiration: expiry, reusable: reusable, ephemeral: ephemeral @@ -401,7 +401,7 @@ }); } - export async function removePreAuthKey(userName: string, preAuthKey: string): Promise { + export async function removePreAuthKey(userID: string, preAuthKey: string): Promise { // variables in local storage let headscaleURL = localStorage.getItem('headscaleURL') || ''; let headscaleAPIKey = localStorage.getItem('headscaleAPIKey') || ''; @@ -416,7 +416,7 @@ Authorization: `Bearer ${headscaleAPIKey}` }, body: JSON.stringify({ - user: userName, + user: userID, key: preAuthKey }) }) diff --git a/src/lib/users/UserCard/PreAuthKeys.svelte b/src/lib/users/UserCard/PreAuthKeys.svelte index 7c5ea4c..599c298 100644 --- a/src/lib/users/UserCard/PreAuthKeys.svelte +++ b/src/lib/users/UserCard/PreAuthKeys.svelte @@ -22,7 +22,7 @@ } function getPreauthKeysAction() { - getPreauthKeys(user.name) + getPreauthKeys(user.id) .then((keys) => { keyList = keys; }) @@ -107,7 +107,7 @@ {#if new Date(key.expiration).getTime() > new Date().getTime() && (!key.used || key.reusable)} - { newPreAuthKeyShow = false; getPreauthKeysAction(); @@ -26,7 +26,7 @@ } function getPreauthKeysAction() { - getPreauthKeys(user.name) + getPreauthKeys(user.id) .then((keys) => { keyList = keys; }) From adef58f27d8f849e7ee89f8459488ca5d8816700 Mon Sep 17 00:00:00 2001 From: Chris Bisset Date: Thu, 22 May 2025 04:07:22 +0000 Subject: [PATCH 02/13] fix device route for new API --- src/lib/common/classes.ts | 3 + .../devices/DeviceCard/DeviceRoutes.svelte | 58 ++----------- .../DeviceRoutes/DeviceRoute.svelte | 41 +++++++++ .../DeviceRoutes/DeviceRouteAPI.svelte | 35 ++++++++ .../devices/DeviceCard/DeviceRoutesAPI.svelte | 84 ------------------- 5 files changed, 85 insertions(+), 136 deletions(-) create mode 100644 src/lib/devices/DeviceCard/DeviceRoutes/DeviceRoute.svelte create mode 100644 src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte delete mode 100644 src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte diff --git a/src/lib/common/classes.ts b/src/lib/common/classes.ts index e6b5dd0..5615284 100644 --- a/src/lib/common/classes.ts +++ b/src/lib/common/classes.ts @@ -7,6 +7,9 @@ export class Device { public forcedTags: string[] = []; public validTags: string[] = []; public invalidTags: string[] = []; + public approvedRoutes: string[] = []; + public availableRoutes: string[] = []; + public subnetRoutes: string[] = []; public user: { name: string } = { name: '' }; public online?: boolean; diff --git a/src/lib/devices/DeviceCard/DeviceRoutes.svelte b/src/lib/devices/DeviceCard/DeviceRoutes.svelte index 59f606f..5e37eb4 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutes.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutes.svelte @@ -1,67 +1,21 @@ Device Routes
    - {#each routesList as route, index} + {#each device.availableRoutes as route}
  • - {route.prefix} - {#if route.enabled} - - {:else} - - {/if} +
  • {/each}
+ import { getDevices } from '$lib/common/apiFunctions.svelte'; + import { Device } from '$lib/common/classes'; + import { alertStore } from '$lib/common/stores'; + import { approveDeviceRoute } from './DeviceRouteAPI.svelte'; + + export let route = "" + export let device = new Device(); + + let routeDisabled = false; + function approveRouteAction() { + approveDeviceRoute(device.id, [route]) + .then(() => { + // refresh users after editing + getDevices(); + }) + .catch((error) => { + $alertStore = error; + }); + } + + + +{route} +{#if device.approvedRoutes.includes(route)} + +{:else} + +{/if} +{#if device.subnetRoutes.includes(route)} + +{/if} diff --git a/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte b/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte new file mode 100644 index 0000000..3c1c4e6 --- /dev/null +++ b/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte @@ -0,0 +1,35 @@ + diff --git a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte b/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte deleted file mode 100644 index 4ffff36..0000000 --- a/src/lib/devices/DeviceCard/DeviceRoutesAPI.svelte +++ /dev/null @@ -1,84 +0,0 @@ - From 907ab6af57faf871ee3001d48297750c03ae38c4 Mon Sep 17 00:00:00 2001 From: Chris Bisset Date: Thu, 22 May 2025 04:13:58 +0000 Subject: [PATCH 03/13] remove old route class --- src/lib/common/classes.ts | 16 ++-------------- .../DeviceRoutes/DeviceRouteAPI.svelte | 1 - 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/src/lib/common/classes.ts b/src/lib/common/classes.ts index 5615284..2bd9120 100644 --- a/src/lib/common/classes.ts +++ b/src/lib/common/classes.ts @@ -21,19 +21,7 @@ export class Device { export class ACL { public groups: { [key: string]: [string] } = {}; - public constructor(init?: Partial) { - Object.assign(this, init); - } -} - -export class Route { - // current (hs 18+) method of handling a route - advertised: boolean = true; - prefix: string = ''; - enabled: boolean = false; - id: number = 0; - - public constructor(init?: Partial) { + public constructor(init?: Partial) { Object.assign(this, init); } } @@ -45,7 +33,7 @@ export class APIKey { createdAt: string = ''; lastSeen: string = ''; - public constructor(init?: Partial) { + public constructor(init?: Partial) { Object.assign(this, init); } } diff --git a/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte b/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte index 3c1c4e6..23e24a6 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte @@ -1,5 +1,4 @@ {route} {#if device.approvedRoutes.includes(route)} - + {:else} {/if} diff --git a/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte b/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte index 23e24a6..1f28ecb 100644 --- a/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte +++ b/src/lib/devices/DeviceCard/DeviceRoutes/DeviceRouteAPI.svelte @@ -1,6 +1,6 @@ {#if !cardEditing} - {user.id}: {user.name} + {user.id}: {user.name.length > 1 ? user.name : user.email}