From 5249f2e8e4206e3d2d5cdc822c380f554bf94821 Mon Sep 17 00:00:00 2001
From: Bernd Storath <999999bst@gmail.com>
Date: Sun, 25 Aug 2024 18:21:03 +0200
Subject: [PATCH] Fix various issues
fix router param
fix max age
unit is seconds not ms
fix regressions
fix missing expire date in client create dialog
fix wrong type rules
fix wrong api endpoint
properly catch error running cron job
fix type issues
---
src/components/Clients/CreateDialog.vue | 18 ++++++++++++++++++
...sOnteTimeLink.ts => [clientOneTimeLink].ts} | 0
src/server/utils/WireGuard.ts | 15 +++++++--------
src/server/utils/config.ts | 2 +-
src/server/utils/types.ts | 7 +++----
src/stores/modal.ts | 4 ++--
src/utils/api.ts | 2 +-
7 files changed, 32 insertions(+), 16 deletions(-)
rename src/server/api/cnf/{:clientsOnteTimeLink.ts => [clientOneTimeLink].ts} (100%)
diff --git a/src/components/Clients/CreateDialog.vue b/src/components/Clients/CreateDialog.vue
index 5488ee05..81affb69 100644
--- a/src/components/Clients/CreateDialog.vue
+++ b/src/components/Clients/CreateDialog.vue
@@ -71,6 +71,23 @@
/>
+
+
+
+
+
+
@@ -110,4 +127,5 @@
diff --git a/src/server/api/cnf/:clientsOnteTimeLink.ts b/src/server/api/cnf/[clientOneTimeLink].ts
similarity index 100%
rename from src/server/api/cnf/:clientsOnteTimeLink.ts
rename to src/server/api/cnf/[clientOneTimeLink].ts
diff --git a/src/server/utils/WireGuard.ts b/src/server/utils/WireGuard.ts
index 82041773..144f5a1e 100644
--- a/src/server/utils/WireGuard.ts
+++ b/src/server/utils/WireGuard.ts
@@ -43,7 +43,6 @@ class WireGuard {
}
debug('Loading configuration...');
- // TODO: Better way to invalidate cache
this.#configCache = null;
try {
const config = await fs.readFile(path.join(WG_PATH, 'wg0.json'), 'utf8');
@@ -261,7 +260,7 @@ Endpoint = ${WG_HOST}:${WG_CONFIG_PORT}`;
expireDate,
}: {
name: string;
- expireDate: string;
+ expireDate: string | null;
}) {
if (!name) {
throw new Error('Missing: Name');
@@ -418,7 +417,7 @@ Endpoint = ${WG_HOST}:${WG_CONFIG_PORT}`;
expireDate,
}: {
clientId: string;
- expireDate: string;
+ expireDate: string | null;
}) {
const client = await this.getClient({ clientId });
@@ -577,13 +576,13 @@ Endpoint = ${WG_HOST}:${WG_CONFIG_PORT}`;
}
const inst = new WireGuard();
-inst.getConfig().catch((err) => {
- console.error(err);
- process.exit(1);
-});
+// This also has to also start the WireGuard Server
async function cronJobEveryMinute() {
- await inst.cronJobEveryMinute();
+ await inst.cronJobEveryMinute().catch((err) => {
+ debug('Running Cron Job failed.');
+ console.error(err);
+ });
setTimeout(cronJobEveryMinute, 60 * 1000);
}
cronJobEveryMinute();
diff --git a/src/server/utils/config.ts b/src/server/utils/config.ts
index f7b6cf2e..675af12a 100644
--- a/src/server/utils/config.ts
+++ b/src/server/utils/config.ts
@@ -9,7 +9,7 @@ export const PORT = process.env.PORT || '51821';
export const WEBUI_HOST = process.env.WEBUI_HOST || '0.0.0.0';
export const PASSWORD_HASH = process.env.PASSWORD_HASH;
export const MAX_AGE = process.env.MAX_AGE
- ? parseInt(process.env.MAX_AGE, 10) * 1000 * 60
+ ? parseInt(process.env.MAX_AGE, 10) * 60
: 0;
export const WG_PATH = process.env.WG_PATH || '/etc/wireguard/';
export const WG_DEVICE = process.env.WG_DEVICE || 'eth0';
diff --git a/src/server/utils/types.ts b/src/server/utils/types.ts
index bb97abcc..3b19c4a2 100644
--- a/src/server/utils/types.ts
+++ b/src/server/utils/types.ts
@@ -30,14 +30,13 @@ const password = z
.string({ message: 'Password must be a valid string' })
.pipe(safeStringRefine);
-const remember = z
- .boolean({ message: 'Remember must be a valid boolean' })
- .optional();
+const remember = z.boolean({ message: 'Remember must be a valid boolean' });
const expireDate = z
.string({ message: 'expiredDate must be a valid string' })
.min(1, 'expiredDate must be at least 1 Character')
- .pipe(safeStringRefine);
+ .pipe(safeStringRefine)
+ .nullable();
export const clientIdType = z.object(
{
diff --git a/src/stores/modal.ts b/src/stores/modal.ts
index 99e5c3ca..c44fa7ab 100644
--- a/src/stores/modal.ts
+++ b/src/stores/modal.ts
@@ -5,12 +5,12 @@ export const useModalStore = defineStore('Modal', () => {
const clientDelete = ref(null);
const clientCreate = ref(null);
const clientCreateName = ref('');
- const clientExpireDate = ref(null);
+ const clientExpireDate = ref('');
const qrcode = ref(null);
function createClient() {
const name = clientCreateName.value;
- const expireDate = clientExpireDate.value;
+ const expireDate = clientExpireDate.value || null;
if (!name) return;
api
diff --git a/src/utils/api.ts b/src/utils/api.ts
index a3a0f133..15553875 100644
--- a/src/utils/api.ts
+++ b/src/utils/api.ts
@@ -93,7 +93,7 @@ class API {
}
async showOneTimeLink({ clientId }: { clientId: string }) {
- return $fetch(`/api/wireguard/${clientId}/:clientId/generateOneTimeLink`, {
+ return $fetch(`/api/wireguard/client/${clientId}/generateOneTimeLink`, {
method: 'post',
});
}