-
-
- Interface Settings
-
-
-
-
-
- Scripts
-
-
-
-
-
-
+
+
+
+ Interface Settings
+
+
+
+
+
+ Actions
+
+
+
+
+
-
+
diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json
index f675c48b..fb9ab6f4 100644
--- a/src/i18n/locales/en.json
+++ b/src/i18n/locales/en.json
@@ -81,7 +81,8 @@
"hostMin": "Host must contain at least 1 character",
"port": "Port must be a valid number",
"portMin": "Port must be at least 1",
- "portMax": "Port must be at most 65535"
+ "portMax": "Port must be at most 65535",
+ "sessionTimeout": "Session Timeout must be a valid number"
},
"name": "Name",
"username": "Username",
diff --git a/src/nuxt.config.ts b/src/nuxt.config.ts
index 34264ea9..25904814 100644
--- a/src/nuxt.config.ts
+++ b/src/nuxt.config.ts
@@ -29,11 +29,6 @@ export default defineNuxtConfig({
language: 'en-US',
name: 'English',
},
- {
- code: 'de',
- language: 'de-DE',
- name: 'Deutsch',
- },
],
defaultLocale: 'en',
vueI18n: './i18n.config.ts',
diff --git a/src/server/api/admin/general.post.ts b/src/server/api/admin/general.post.ts
new file mode 100644
index 00000000..738c1c41
--- /dev/null
+++ b/src/server/api/admin/general.post.ts
@@ -0,0 +1,8 @@
+export default defineEventHandler(async (event) => {
+ const data = await readValidatedBody(
+ event,
+ validateZod(generalUpdateType, event)
+ );
+ await Database.system.updateGeneral(data);
+ return { success: true };
+});
diff --git a/src/server/api/admin/interface.get.ts b/src/server/api/admin/interface.get.ts
new file mode 100644
index 00000000..709de9ca
--- /dev/null
+++ b/src/server/api/admin/interface.get.ts
@@ -0,0 +1,5 @@
+export default defineEventHandler(async () => {
+ const system = await Database.system.get();
+ // TODO: handle through wireguard to update conf accordingly
+ return system.interface;
+});
diff --git a/src/server/api/admin/interface.post.ts b/src/server/api/admin/interface.post.ts
new file mode 100644
index 00000000..d0f59a12
--- /dev/null
+++ b/src/server/api/admin/interface.post.ts
@@ -0,0 +1,8 @@
+export default defineEventHandler(async (event) => {
+ const data = await readValidatedBody(
+ event,
+ validateZod(interfaceUpdateType, event)
+ );
+ await Database.system.updateInterface(data);
+ return { success: true };
+});
diff --git a/src/server/utils/types.ts b/src/server/utils/types.ts
index b6bffec3..f74cdf97 100644
--- a/src/server/utils/types.ts
+++ b/src/server/utils/types.ts
@@ -157,6 +157,16 @@ export const clientUpdateType = z.object({
persistentKeepalive: z.number({ message: 'zod.persistentKeepalive' }),
});
+export const generalUpdateType = z.object({
+ sessionTimeout: z.number({ message: 'zod.sessionTimeout' }),
+});
+
+export const interfaceUpdateType = z.object({
+ mtu: z.number({ message: 'zod.mtu' }),
+ port: port,
+ device: z.string({ message: 'zod.device' }),
+});
+
// from https://github.com/airjp73/rvf/blob/7e7c35d98015ea5ecff5affaf89f78296e84e8b9/packages/zod-form-data/src/helpers.ts#L117
type FormDataLikeInput = {
[Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;
diff --git a/src/services/database/lowdb.ts b/src/services/database/lowdb.ts
index 3983286c..c2575e85 100644
--- a/src/services/database/lowdb.ts
+++ b/src/services/database/lowdb.ts
@@ -19,7 +19,11 @@ import {
type CreateClient,
type OneTimeLink,
} from './repositories/client';
-import { SystemRepository } from './repositories/system';
+import {
+ SystemRepository,
+ type General,
+ type UpdateWGInterface,
+} from './repositories/system';
import { SetupRepository, type Steps } from './repositories/setup';
import type { DeepReadonly } from 'vue';
@@ -81,6 +85,24 @@ class LowDBSystem extends SystemRepository {
v.system.userConfig.port = port;
});
}
+
+ async updateGeneral(general: General) {
+ DEBUG('Update General');
+ this.#db.update((v) => {
+ v.system.general = general;
+ });
+ }
+
+ async updateInterface(wgInterface: UpdateWGInterface) {
+ DEBUG('Update Interface');
+ this.#db.update((v) => {
+ const oldInterface = v.system.interface;
+ v.system.interface = {
+ ...oldInterface,
+ ...wgInterface,
+ };
+ });
+ }
}
class LowDBUser extends UserRepository {
diff --git a/src/services/database/migrations/1.ts b/src/services/database/migrations/1.ts
index c0f48a79..1bdf04dd 100644
--- a/src/services/database/migrations/1.ts
+++ b/src/services/database/migrations/1.ts
@@ -64,6 +64,8 @@ export async function run1(db: Low