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',
});
}