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

+ + {{ $t('me.sectionGeneral') }} -

- - - - + + -
-
-

- {{ 'Address' }} -

- - - - -
-
-

- {{ 'Advanced' }} -

- - + + Address + + + + + Allowed IPs + + + + Advanced + + -
-
-

- {{ 'Action' }} -

- - - - -
+ + + 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;