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