From 48bba9ee07483a60e822f19923cc9269333df07a Mon Sep 17 00:00:00 2001 From: Bernd Storath <999999bst@gmail.com> Date: Mon, 5 Aug 2024 12:01:53 +0200 Subject: [PATCH] add wireguard routes --- src/server/api/wireguard/backup.ts | 9 +++++++++ src/server/api/wireguard/client.ts | 5 ----- .../api/wireguard/client/[clientId]/address.ts | 12 ++++++++++++ .../wireguard/client/[clientId]/configuration.ts | 16 ++++++++++++++++ .../api/wireguard/client/[clientId]/disable.ts | 11 +++++++++++ .../api/wireguard/client/[clientId]/enable.ts | 11 +++++++++++ .../api/wireguard/client/[clientId]/index.ts | 8 ++++++++ .../api/wireguard/client/[clientId]/name.ts | 12 ++++++++++++ .../wireguard/client/[clientId]/qrcode.svg.ts | 9 +++++++++ src/server/api/wireguard/client/index.ts | 11 +++++++++++ src/server/api/wireguard/restore.ts | 8 ++++++++ 11 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 src/server/api/wireguard/backup.ts delete mode 100644 src/server/api/wireguard/client.ts create mode 100644 src/server/api/wireguard/client/[clientId]/address.ts create mode 100644 src/server/api/wireguard/client/[clientId]/configuration.ts create mode 100644 src/server/api/wireguard/client/[clientId]/disable.ts create mode 100644 src/server/api/wireguard/client/[clientId]/enable.ts create mode 100644 src/server/api/wireguard/client/[clientId]/index.ts create mode 100644 src/server/api/wireguard/client/[clientId]/name.ts create mode 100644 src/server/api/wireguard/client/[clientId]/qrcode.svg.ts create mode 100644 src/server/api/wireguard/client/index.ts create mode 100644 src/server/api/wireguard/restore.ts diff --git a/src/server/api/wireguard/backup.ts b/src/server/api/wireguard/backup.ts new file mode 100644 index 00000000..b3660cf3 --- /dev/null +++ b/src/server/api/wireguard/backup.ts @@ -0,0 +1,9 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "GET"); + const config = await WireGuard.backupConfiguration(); + setHeader(event, 'Content-Disposition', 'attachment; filename="wg0.json"'); + setHeader(event, 'Content-Type', 'text/json'); + return config; +}) \ No newline at end of file diff --git a/src/server/api/wireguard/client.ts b/src/server/api/wireguard/client.ts deleted file mode 100644 index 69350b0c..00000000 --- a/src/server/api/wireguard/client.ts +++ /dev/null @@ -1,5 +0,0 @@ -import WireGuard from "~/utils/WireGuard"; - -export default defineEventHandler(() => { - return WireGuard.getClients(); -}) \ No newline at end of file diff --git a/src/server/api/wireguard/client/[clientId]/address.ts b/src/server/api/wireguard/client/[clientId]/address.ts new file mode 100644 index 00000000..5ebd0996 --- /dev/null +++ b/src/server/api/wireguard/client/[clientId]/address.ts @@ -0,0 +1,12 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "PUT"); + const clientId = getRouterParam(event, 'clientId'); + if (clientId === '__proto__' || clientId === 'constructor' || clientId === 'prototype') { + throw createError({ status: 403 }); + } + const { address } = await readBody(event); + await WireGuard.updateClientAddress({ clientId, address }); + return { success: true }; +}) \ No newline at end of file diff --git a/src/server/api/wireguard/client/[clientId]/configuration.ts b/src/server/api/wireguard/client/[clientId]/configuration.ts new file mode 100644 index 00000000..5c43c434 --- /dev/null +++ b/src/server/api/wireguard/client/[clientId]/configuration.ts @@ -0,0 +1,16 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "GET"); + const clientId = getRouterParam(event, 'clientId'); + const client = await WireGuard.getClient({ clientId }); + const config = await WireGuard.getClientConfiguration({ clientId }); + const configName = client.name + .replace(/[^a-zA-Z0-9_=+.-]/g, '-') + .replace(/(-{2,}|-$)/g, '-') + .replace(/-$/, '') + .substring(0, 32); + setHeader(event, 'Content-Disposition', `attachment; filename="${configName || clientId}.conf"`); + setHeader(event, 'Content-Type', 'text/plain'); + return config; +}) \ No newline at end of file diff --git a/src/server/api/wireguard/client/[clientId]/disable.ts b/src/server/api/wireguard/client/[clientId]/disable.ts new file mode 100644 index 00000000..960970c7 --- /dev/null +++ b/src/server/api/wireguard/client/[clientId]/disable.ts @@ -0,0 +1,11 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "POST"); + const clientId = getRouterParam(event, 'clientId'); + if (clientId === '__proto__' || clientId === 'constructor' || clientId === 'prototype') { + throw createError({ status: 403 }); + } + await WireGuard.disableClient({ clientId }); + return { success: true }; +}) \ No newline at end of file diff --git a/src/server/api/wireguard/client/[clientId]/enable.ts b/src/server/api/wireguard/client/[clientId]/enable.ts new file mode 100644 index 00000000..a428097e --- /dev/null +++ b/src/server/api/wireguard/client/[clientId]/enable.ts @@ -0,0 +1,11 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "POST"); + const clientId = getRouterParam(event, 'clientId'); + if (clientId === '__proto__' || clientId === 'constructor' || clientId === 'prototype') { + throw createError({ status: 403 }); + } + await WireGuard.enableClient({ clientId }); + return { success: true }; +}) \ No newline at end of file diff --git a/src/server/api/wireguard/client/[clientId]/index.ts b/src/server/api/wireguard/client/[clientId]/index.ts new file mode 100644 index 00000000..10c6262a --- /dev/null +++ b/src/server/api/wireguard/client/[clientId]/index.ts @@ -0,0 +1,8 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "DELETE"); + const clientId = getRouterParam(event, 'clientId'); + await WireGuard.deleteClient({ clientId }); + return { success: true }; +}); \ No newline at end of file diff --git a/src/server/api/wireguard/client/[clientId]/name.ts b/src/server/api/wireguard/client/[clientId]/name.ts new file mode 100644 index 00000000..861edf16 --- /dev/null +++ b/src/server/api/wireguard/client/[clientId]/name.ts @@ -0,0 +1,12 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "PUT"); + const clientId = getRouterParam(event, 'clientId'); + if (clientId === '__proto__' || clientId === 'constructor' || clientId === 'prototype') { + throw createError({ status: 403 }); + } + const { name } = await readBody(event); + await WireGuard.updateClientName({ clientId, name }); + return { success: true }; +}) \ No newline at end of file diff --git a/src/server/api/wireguard/client/[clientId]/qrcode.svg.ts b/src/server/api/wireguard/client/[clientId]/qrcode.svg.ts new file mode 100644 index 00000000..de5ce847 --- /dev/null +++ b/src/server/api/wireguard/client/[clientId]/qrcode.svg.ts @@ -0,0 +1,9 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "GET"); + const clientId = getRouterParam(event, 'clientId'); + const svg = await WireGuard.getClientQRCodeSVG({ clientId }); + setHeader(event, 'Content-Type', 'image/svg+xml'); + return svg; +}) \ No newline at end of file diff --git a/src/server/api/wireguard/client/index.ts b/src/server/api/wireguard/client/index.ts new file mode 100644 index 00000000..8d9aeea3 --- /dev/null +++ b/src/server/api/wireguard/client/index.ts @@ -0,0 +1,11 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + if (isMethod(event, "GET")) { + return WireGuard.getClients(); + } else if (isMethod(event, "POST")) { + const { name } = await readBody(event); + await WireGuard.createClient({ name }); + return { success: true }; + } +}) \ No newline at end of file diff --git a/src/server/api/wireguard/restore.ts b/src/server/api/wireguard/restore.ts new file mode 100644 index 00000000..d6f3b522 --- /dev/null +++ b/src/server/api/wireguard/restore.ts @@ -0,0 +1,8 @@ +import WireGuard from "~/utils/WireGuard"; + +export default defineEventHandler(async (event) => { + assertMethod(event, "PUT"); + const { file } = await readBody(event); + await WireGuard.restoreConfiguration(file); + return { success: true }; +}) \ No newline at end of file