From 23b4bd85c8713a3663046721852f5c8096968485 Mon Sep 17 00:00:00 2001
From: Bernd Storath <999999bst@gmail.com>
Date: Tue, 12 Nov 2024 13:04:58 +0100
Subject: [PATCH] improve client edit page, add mtu
---
src/app/components/base/Switch.vue | 16 +++
src/app/components/form/ActionField.vue | 11 ++
src/app/components/form/ArrayField.vue | 38 ++++++
src/app/components/form/Group.vue | 9 ++
src/app/components/form/Heading.vue | 5 +
src/app/components/form/NumberField.vue | 17 +++
src/app/components/form/SwitchField.vue | 11 ++
src/app/components/form/TextField.vue | 17 +++
src/app/components/ui/UserMenu.vue | 2 +-
src/app/pages/clients/[id].vue | 131 ++++++-------------
src/server/api/setup/migrate.post.ts | 1 +
src/server/utils/WireGuard.ts | 1 +
src/server/utils/ip.ts | 3 +
src/server/utils/wgHelper.ts | 2 +-
src/services/database/repositories/client.ts | 1 +
15 files changed, 172 insertions(+), 93 deletions(-)
create mode 100644 src/app/components/base/Switch.vue
create mode 100644 src/app/components/form/ActionField.vue
create mode 100644 src/app/components/form/ArrayField.vue
create mode 100644 src/app/components/form/Group.vue
create mode 100644 src/app/components/form/Heading.vue
create mode 100644 src/app/components/form/NumberField.vue
create mode 100644 src/app/components/form/SwitchField.vue
create mode 100644 src/app/components/form/TextField.vue
diff --git a/src/app/components/base/Switch.vue b/src/app/components/base/Switch.vue
new file mode 100644
index 00000000..a8d254f6
--- /dev/null
+++ b/src/app/components/base/Switch.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/src/app/components/form/ActionField.vue b/src/app/components/form/ActionField.vue
new file mode 100644
index 00000000..d86840b3
--- /dev/null
+++ b/src/app/components/form/ActionField.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/src/app/components/form/ArrayField.vue b/src/app/components/form/ArrayField.vue
new file mode 100644
index 00000000..ac50483f
--- /dev/null
+++ b/src/app/components/form/ArrayField.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/src/app/components/form/Group.vue b/src/app/components/form/Group.vue
new file mode 100644
index 00000000..468ffed9
--- /dev/null
+++ b/src/app/components/form/Group.vue
@@ -0,0 +1,9 @@
+
+
+
diff --git a/src/app/components/form/Heading.vue b/src/app/components/form/Heading.vue
new file mode 100644
index 00000000..04c9473f
--- /dev/null
+++ b/src/app/components/form/Heading.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/app/components/form/NumberField.vue b/src/app/components/form/NumberField.vue
new file mode 100644
index 00000000..a11e5baa
--- /dev/null
+++ b/src/app/components/form/NumberField.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
diff --git a/src/app/components/form/SwitchField.vue b/src/app/components/form/SwitchField.vue
new file mode 100644
index 00000000..a8adf822
--- /dev/null
+++ b/src/app/components/form/SwitchField.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/src/app/components/form/TextField.vue b/src/app/components/form/TextField.vue
new file mode 100644
index 00000000..3e9d499b
--- /dev/null
+++ b/src/app/components/form/TextField.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
diff --git a/src/app/components/ui/UserMenu.vue b/src/app/components/ui/UserMenu.vue
index 8b368ea1..096f0563 100644
--- a/src/app/components/ui/UserMenu.vue
+++ b/src/app/components/ui/UserMenu.vue
@@ -9,7 +9,7 @@
class="inline-flex h-8 w-8 select-none items-center justify-center overflow-hidden rounded-full align-middle mr-2"
>
{{ fallbackName }}
diff --git a/src/app/pages/clients/[id].vue b/src/app/pages/clients/[id].vue
index 9c7f2325..0fcd2550 100644
--- a/src/app/pages/clients/[id].vue
+++ b/src/app/pages/clients/[id].vue
@@ -5,108 +5,57 @@
-
-
-
-
+
+
+ Actions
+
+
+
diff --git a/src/server/api/setup/migrate.post.ts b/src/server/api/setup/migrate.post.ts
index be44d9bd..ab5c8742 100644
--- a/src/server/api/setup/migrate.post.ts
+++ b/src/server/api/setup/migrate.post.ts
@@ -78,6 +78,7 @@ export default defineEventHandler(async (event) => {
serverAllowedIPs: [],
persistentKeepalive: 0,
address6: address6,
+ mtu: 1420,
});
}
diff --git a/src/server/utils/WireGuard.ts b/src/server/utils/WireGuard.ts
index 86567309..968bcc37 100644
--- a/src/server/utils/WireGuard.ts
+++ b/src/server/utils/WireGuard.ts
@@ -152,6 +152,7 @@ class WireGuard {
allowedIPs: [...system.userConfig.allowedIps],
serverAllowedIPs: null,
persistentKeepalive: system.userConfig.persistentKeepalive,
+ mtu: system.userConfig.mtu,
};
if (expireDate) {
diff --git a/src/server/utils/ip.ts b/src/server/utils/ip.ts
index 270bc1a7..a2d66e86 100644
--- a/src/server/utils/ip.ts
+++ b/src/server/utils/ip.ts
@@ -17,6 +17,9 @@ export function nextIPv6(
return nextIP(6, system, clients);
}
+// TODO: above functions should probably have a lock
+// TODO(general): what happens if multiple users create client at the same time?
+
function nextIP(
version: 4 | 6,
system: DeepReadonly,
diff --git a/src/server/utils/wgHelper.ts b/src/server/utils/wgHelper.ts
index f55c4d81..70b9cc6d 100644
--- a/src/server/utils/wgHelper.ts
+++ b/src/server/utils/wgHelper.ts
@@ -48,7 +48,7 @@ PostDown = ${system.iptables.PostDown}`;
PrivateKey = ${client.privateKey}
Address = ${client.address4}/${cidr4Block}, ${client.address6}/${cidr6Block}
DNS = ${system.userConfig.defaultDns.join(', ')}
-MTU = ${system.userConfig.mtu}
+MTU = ${client.mtu}
[Peer]
PublicKey = ${system.interface.publicKey}
diff --git a/src/services/database/repositories/client.ts b/src/services/database/repositories/client.ts
index 48e6adc7..0ef096fe 100644
--- a/src/services/database/repositories/client.ts
+++ b/src/services/database/repositories/client.ts
@@ -25,6 +25,7 @@ export type Client = {
updatedAt: string;
enabled: boolean;
persistentKeepalive: number;
+ mtu: number;
};
export type NewClient = Omit;