diff --git a/src/server/api/admin/general.get.ts b/src/server/api/admin/general.get.ts index 965cebe2..075eefce 100644 --- a/src/server/api/admin/general.get.ts +++ b/src/server/api/admin/general.get.ts @@ -1,4 +1,4 @@ -export default definePermissionEventHandler(actions.ADMIN, async () => { +export default definePermissionEventHandler('admin', 'any', async () => { const generalConfig = await Database.general.getConfig(); return generalConfig; }); diff --git a/src/server/api/admin/general.post.ts b/src/server/api/admin/general.post.ts index 4a28cf29..414af6d7 100644 --- a/src/server/api/admin/general.post.ts +++ b/src/server/api/admin/general.post.ts @@ -1,7 +1,8 @@ import { GeneralUpdateSchema } from '#db/repositories/general/types'; export default definePermissionEventHandler( - actions.ADMIN, + 'admin', + 'any', async ({ event }) => { const data = await readValidatedBody( event, diff --git a/src/server/api/admin/hooks.get.ts b/src/server/api/admin/hooks.get.ts index ec493ce0..035cc252 100644 --- a/src/server/api/admin/hooks.get.ts +++ b/src/server/api/admin/hooks.get.ts @@ -1,4 +1,4 @@ -export default definePermissionEventHandler(actions.ADMIN, async () => { +export default definePermissionEventHandler('admin', 'any', async () => { const hooks = await Database.hooks.get(); return hooks; }); diff --git a/src/server/api/admin/hooks.post.ts b/src/server/api/admin/hooks.post.ts index e3c02bea..1acb94c2 100644 --- a/src/server/api/admin/hooks.post.ts +++ b/src/server/api/admin/hooks.post.ts @@ -1,7 +1,8 @@ import { HooksUpdateSchema } from '#db/repositories/hooks/types'; export default definePermissionEventHandler( - actions.ADMIN, + 'admin', + 'any', async ({ event }) => { const data = await readValidatedBody( event, diff --git a/src/server/api/admin/interface/cidr.post.ts b/src/server/api/admin/interface/cidr.post.ts index 2d48d874..95e239cf 100644 --- a/src/server/api/admin/interface/cidr.post.ts +++ b/src/server/api/admin/interface/cidr.post.ts @@ -1,7 +1,8 @@ import { InterfaceCidrUpdateSchema } from '#db/repositories/interface/types'; export default definePermissionEventHandler( - actions.ADMIN, + 'admin', + 'any', async ({ event }) => { const data = await readValidatedBody( event, diff --git a/src/server/api/admin/interface/index.get.ts b/src/server/api/admin/interface/index.get.ts index f060637f..7161aecc 100644 --- a/src/server/api/admin/interface/index.get.ts +++ b/src/server/api/admin/interface/index.get.ts @@ -1,4 +1,4 @@ -export default definePermissionEventHandler(actions.ADMIN, async () => { +export default definePermissionEventHandler('admin', 'any', async () => { const wgInterface = await Database.interfaces.get(); return { diff --git a/src/server/api/admin/interface/index.post.ts b/src/server/api/admin/interface/index.post.ts index 24fd041a..d6beedbe 100644 --- a/src/server/api/admin/interface/index.post.ts +++ b/src/server/api/admin/interface/index.post.ts @@ -1,7 +1,8 @@ import { InterfaceUpdateSchema } from '#db/repositories/interface/types'; export default definePermissionEventHandler( - actions.ADMIN, + 'admin', + 'any', async ({ event }) => { const data = await readValidatedBody( event, diff --git a/src/server/api/admin/userconfig.get.ts b/src/server/api/admin/userconfig.get.ts index 81211580..b41a81bd 100644 --- a/src/server/api/admin/userconfig.get.ts +++ b/src/server/api/admin/userconfig.get.ts @@ -1,4 +1,4 @@ -export default definePermissionEventHandler(actions.ADMIN, async () => { +export default definePermissionEventHandler('admin', 'any', async () => { const userConfig = await Database.userConfigs.get(); return userConfig; }); diff --git a/src/server/api/admin/userconfig.post.ts b/src/server/api/admin/userconfig.post.ts index 623dd463..ff150b0c 100644 --- a/src/server/api/admin/userconfig.post.ts +++ b/src/server/api/admin/userconfig.post.ts @@ -1,7 +1,8 @@ import { UserConfigUpdateSchema } from '#db/repositories/userConfig/types'; export default definePermissionEventHandler( - actions.ADMIN, + 'admin', + 'any', async ({ event }) => { const data = await readValidatedBody( event, diff --git a/src/server/api/wireguard/backup.get.ts b/src/server/api/wireguard/backup.get.ts deleted file mode 100644 index 648b95e9..00000000 --- a/src/server/api/wireguard/backup.get.ts +++ /dev/null @@ -1,9 +0,0 @@ -export default definePermissionEventHandler( - actions.ADMIN, - async (/*{ event }*/) => { - /*const config = await WireGuard.backupConfiguration(); - setHeader(event, 'Content-Disposition', 'attachment; filename="wg0.json"'); - setHeader(event, 'Content-Type', 'text/json'); - return config;*/ - } -); diff --git a/src/server/api/wireguard/restore.put.ts b/src/server/api/wireguard/restore.put.ts deleted file mode 100644 index c7a95ba5..00000000 --- a/src/server/api/wireguard/restore.put.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default definePermissionEventHandler( - actions.ADMIN, - async (/*{ event }*/) => { - /*const { file } = await readValidatedBody(event, validateZod(fileType)); - await WireGuard.restoreConfiguration(file); - return { success: true };*/ - } -); diff --git a/src/server/database/repositories/client/service.ts b/src/server/database/repositories/client/service.ts index fb9f8af6..10a75d2a 100644 --- a/src/server/database/repositories/client/service.ts +++ b/src/server/database/repositories/client/service.ts @@ -19,7 +19,10 @@ function createPreparedStatement(db: DBType) { .findFirst({ where: eq(client.id, sql.placeholder('id')) }) .prepare(), findByUserId: db.query.client - .findMany({ where: eq(client.userId, sql.placeholder('userId')) }) + .findMany({ + where: eq(client.userId, sql.placeholder('userId')), + with: { oneTimeLink: true }, + }) .prepare(), toggle: db .update(client) diff --git a/src/server/routes/cnf/[oneTimeLink].ts b/src/server/routes/cnf/[oneTimeLink].ts index 1b7c695b..79592533 100644 --- a/src/server/routes/cnf/[oneTimeLink].ts +++ b/src/server/routes/cnf/[oneTimeLink].ts @@ -5,7 +5,7 @@ export default defineEventHandler(async (event) => { event, validateZod(OneTimeLinkGetSchema) ); - const clients = await WireGuard.getClients(); + const clients = await WireGuard.getAllClients(); const client = clients.find( (client) => client.oneTimeLink?.oneTimeLink === oneTimeLink ); diff --git a/src/server/routes/metrics/json.get.ts b/src/server/routes/metrics/json.get.ts index ff757e8c..ae9b2879 100644 --- a/src/server/routes/metrics/json.get.ts +++ b/src/server/routes/metrics/json.get.ts @@ -3,7 +3,7 @@ export default defineMetricsHandler('json', async () => { }); async function getMetricsJSON() { - const clients = await WireGuard.getClients(); + const clients = await WireGuard.getAllClients(); let wireguardPeerCount = 0; let wireguardEnabledPeersCount = 0; let wireguardConnectedPeersCount = 0; diff --git a/src/server/routes/metrics/prometheus.get.ts b/src/server/routes/metrics/prometheus.get.ts index bf4d9e80..837a094e 100644 --- a/src/server/routes/metrics/prometheus.get.ts +++ b/src/server/routes/metrics/prometheus.get.ts @@ -5,7 +5,7 @@ export default defineMetricsHandler('prometheus', async ({ event }) => { async function getPrometheusResponse() { const wgInterface = await Database.interfaces.get(); - const clients = await WireGuard.getClients(); + const clients = await WireGuard.getAllClients(); let wireguardPeerCount = 0; let wireguardEnabledPeersCount = 0; let wireguardConnectedPeersCount = 0; diff --git a/src/shared/utils/permissions.ts b/src/shared/utils/permissions.ts index 4c5adac0..138527ad 100644 --- a/src/shared/utils/permissions.ts +++ b/src/shared/utils/permissions.ts @@ -43,6 +43,10 @@ export type Permissions = { dataType: ClientType; action: 'view' | 'create' | 'update' | 'delete' | 'custom'; }; + admin: { + dataType: never; + action: 'any'; + }; }; export const ROLES = { @@ -54,6 +58,9 @@ export const ROLES = { delete: true, custom: true, }, + admin: { + any: true, + }, }, CLIENT: { clients: { @@ -63,6 +70,9 @@ export const ROLES = { delete: (user, client) => user.id === client.userId, custom: true, }, + admin: { + any: false, + }, }, } as const satisfies RolesWithPermissions;