chore: disable auto imports (#2672)

* disable auto imports

* fix imports

* improve cli imports

* fix imports

* fix import cycle

* fix imports
This commit is contained in:
Bernd Storath
2026-06-19 15:24:42 +02:00
committed by GitHub
parent e7ea65a898
commit 2af5cd04b4
97 changed files with 473 additions and 65 deletions
+2 -2
View File
@@ -2,8 +2,8 @@ import { defineCommand } from 'citty';
import { consola } from 'consola'; import { consola } from 'consola';
import { eq } from 'drizzle-orm'; import { eq } from 'drizzle-orm';
import { db, schema } from '../db'; import { db, schema } from '#cli/db';
import { hashPassword } from '../../server/utils/password'; import { hashPassword } from '#server/utils/password';
export default defineCommand({ export default defineCommand({
meta: { meta: {
+2 -12
View File
@@ -1,6 +1,7 @@
// @ts-check // @ts-check
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import esbuild from 'esbuild'; import esbuild from 'esbuild';
esbuild.build({ esbuild.build({
@@ -9,17 +10,6 @@ esbuild.build({
outfile: fileURLToPath(new URL('../.output/server/cli.mjs', import.meta.url)), outfile: fileURLToPath(new URL('../.output/server/cli.mjs', import.meta.url)),
platform: 'node', platform: 'node',
format: 'esm', format: 'esm',
plugins: [ packages: 'external',
{
name: 'make-all-packages-external',
setup(build) {
let filter = /^[^./]|^\.[^./]|^\.\.[^/]/; // Must not start with "/" or "./" or "../"
build.onResolve({ filter }, (args) => ({
path: args.path,
external: true,
}));
},
},
],
logLevel: 'info', logLevel: 'info',
}); });
+1 -1
View File
@@ -1,7 +1,7 @@
import { defineCommand } from 'citty'; import { defineCommand } from 'citty';
import { consola } from 'consola'; import { consola } from 'consola';
import { db } from '../db'; import { db } from '#cli/db';
export default defineCommand({ export default defineCommand({
meta: { meta: {
+3 -3
View File
@@ -2,9 +2,9 @@ import { defineCommand } from 'citty';
import { consola } from 'consola'; import { consola } from 'consola';
import { eq } from 'drizzle-orm'; import { eq } from 'drizzle-orm';
import { wg } from '../../server/utils/wgHelper'; import { db, schema } from '#cli/db';
import { encodeQRCodeTerm } from '../../server/utils/qr'; import { wg } from '#server/utils/wgHelper';
import { db, schema } from '../db'; import { encodeQRCodeTerm } from '#server/utils/qr';
export default defineCommand({ export default defineCommand({
meta: { meta: {
+1 -1
View File
@@ -1,7 +1,7 @@
import { createClient } from '@libsql/client'; import { createClient } from '@libsql/client';
import { drizzle } from 'drizzle-orm/libsql'; import { drizzle } from 'drizzle-orm/libsql';
import * as schema from '../server/database/schema'; import * as schema from '#server/database/schema';
//const client = createClient({ url: 'file:../data/wg-easy.db' }); //const client = createClient({ url: 'file:../data/wg-easy.db' });
const client = createClient({ url: 'file:/etc/wireguard/wg-easy.db' }); const client = createClient({ url: 'file:/etc/wireguard/wg-easy.db' });
+4 -3
View File
@@ -6,9 +6,10 @@ import { defineCommand, runMain } from 'citty';
import packageJson from '../package.json'; import packageJson from '../package.json';
// Commands // Commands
import dbAdminReset from './admin/reset'; import clientsList from '#cli/clients/list';
import clientsList from './clients/list'; import clientsQr from '#cli/clients/qr';
import clientsQr from './clients/qr'; import dbAdminReset from '#cli/admin/reset';
const subCommands = [dbAdminReset, clientsList, clientsQr] as const; const subCommands = [dbAdminReset, clientsList, clientsQr] as const;
// from citty // from citty
+6 -1
View File
@@ -6,7 +6,12 @@
"esModuleInterop": true, "esModuleInterop": true,
"strict": true, "strict": true,
"skipLibCheck": true, "skipLibCheck": true,
"moduleResolution": "bundler" "moduleResolution": "bundler",
"paths": {
"#cli/*": ["./*"],
"#server/*": ["../server/*"],
"#db/*": ["../server/database/*"]
}
}, },
"include": ["./**/*.ts"] "include": ["./**/*.ts"]
} }
+2 -1
View File
@@ -1,10 +1,11 @@
import eslintConfigPrettier from 'eslint-config-prettier'; import eslintConfigPrettier from 'eslint-config-prettier';
import withNuxt from './.nuxt/eslint.config.mjs'; import withNuxt from './.nuxt/eslint.config.mjs';
export default withNuxt([ export default withNuxt([
{ {
rules: { rules: {
'import/order': 'warn', 'import/order': ['warn', { 'newlines-between': 'always' }],
}, },
}, },
eslintConfigPrettier, eslintConfigPrettier,
+11 -2
View File
@@ -1,4 +1,13 @@
export default defineI18nLocaleDetector((event, config) => { import {
tryCookieLocale,
tryHeaderLocale,
tryQueryLocale,
} from '@intlify/utils/h3';
import type { H3Event } from 'h3';
// TODO: use defineI18nLocaleDetector
export default (event: H3Event, config: { defaultLocale: string }) => {
const query = tryQueryLocale(event, { lang: '' }); const query = tryQueryLocale(event, { lang: '' });
if (query) { if (query) {
return query.toString(); return query.toString();
@@ -18,4 +27,4 @@ export default defineI18nLocaleDetector((event, config) => {
} }
return config.defaultLocale; return config.defaultLocale;
}); };
+4 -4
View File
@@ -160,21 +160,21 @@ export default defineNuxtConfig({
}, },
}, },
nitro: { nitro: {
imports: {
autoImport: false,
},
esbuild: { esbuild: {
options: { options: {
// to support big int // to support big int
target: 'node20', target: 'node20',
}, },
}, },
alias: {
'#db': fileURLToPath(new URL('./server/database/', import.meta.url)),
},
externals: { externals: {
traceInclude: [fileURLToPath(new URL('./cli/index.ts', import.meta.url))], traceInclude: [fileURLToPath(new URL('./cli/index.ts', import.meta.url))],
}, },
}, },
alias: { alias: {
// for typecheck reasons (https://github.com/nuxt/cli/issues/323)
'#db': fileURLToPath(new URL('./server/database/', import.meta.url)), '#db': fileURLToPath(new URL('./server/database/', import.meta.url)),
'#cli': fileURLToPath(new URL('./cli', import.meta.url)),
}, },
}); });
+5
View File
@@ -23,6 +23,8 @@
"dependencies": { "dependencies": {
"@eschricht/nuxt-color-mode": "^1.2.0", "@eschricht/nuxt-color-mode": "^1.2.0",
"@heroicons/vue": "^2.2.0", "@heroicons/vue": "^2.2.0",
"@intlify/h3": "^0.7.4",
"@intlify/utils": "^0.14.1",
"@libsql/client": "^0.17.3", "@libsql/client": "^0.17.3",
"@nuxtjs/i18n": "^10.4.0", "@nuxtjs/i18n": "^10.4.0",
"@nuxtjs/tailwindcss": "^6.14.0", "@nuxtjs/tailwindcss": "^6.14.0",
@@ -38,12 +40,15 @@
"consola": "^3.4.2", "consola": "^3.4.2",
"crc-32": "^1.2.2", "crc-32": "^1.2.2",
"drizzle-orm": "^0.45.2", "drizzle-orm": "^0.45.2",
"h3": "^1.15.11",
"ip-bigint": "^9.0.6", "ip-bigint": "^9.0.6",
"is-cidr": "^7.0.0", "is-cidr": "^7.0.0",
"is-ip": "^5.0.1", "is-ip": "^5.0.1",
"js-sha256": "^0.11.1", "js-sha256": "^0.11.1",
"nuxt": "^3.21.8", "nuxt": "^3.21.8",
"nitropack": "^2.13.4",
"obug": "^2.1.2", "obug": "^2.1.2",
"ofetch": "^1.5.1",
"openid-client": "^6.8.4", "openid-client": "^6.8.4",
"otpauth": "^9.5.1", "otpauth": "^9.5.1",
"pinia": "^3.0.4", "pinia": "^3.0.4",
+15
View File
@@ -14,6 +14,12 @@ importers:
'@heroicons/vue': '@heroicons/vue':
specifier: ^2.2.0 specifier: ^2.2.0
version: 2.2.0(vue@3.5.38(typescript@6.0.3)) version: 2.2.0(vue@3.5.38(typescript@6.0.3))
'@intlify/h3':
specifier: ^0.7.4
version: 0.7.4
'@intlify/utils':
specifier: ^0.14.1
version: 0.14.1
'@libsql/client': '@libsql/client':
specifier: ^0.17.3 specifier: ^0.17.3
version: 0.17.3 version: 0.17.3
@@ -59,6 +65,9 @@ importers:
drizzle-orm: drizzle-orm:
specifier: ^0.45.2 specifier: ^0.45.2
version: 0.45.2(@libsql/client@0.17.3) version: 0.45.2(@libsql/client@0.17.3)
h3:
specifier: ^1.15.11
version: 1.15.11
ip-bigint: ip-bigint:
specifier: ^9.0.6 specifier: ^9.0.6
version: 9.0.6 version: 9.0.6
@@ -71,12 +80,18 @@ importers:
js-sha256: js-sha256:
specifier: ^0.11.1 specifier: ^0.11.1
version: 0.11.1 version: 0.11.1
nitropack:
specifier: ^2.13.4
version: 2.13.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3))(oxc-parser@0.132.0)(srvx@0.11.16)
nuxt: nuxt:
specifier: ^3.21.8 specifier: ^3.21.8
version: 3.21.8(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.3)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(vue-tsc@3.3.4(typescript@6.0.3))(yaml@2.9.0) version: 3.21.8(@libsql/client@0.17.3)(@parcel/watcher@2.5.6)(@types/node@25.9.3)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4(@libsql/client@0.17.3)(drizzle-orm@0.45.2(@libsql/client@0.17.3)))(drizzle-orm@0.45.2(@libsql/client@0.17.3))(eslint@9.39.4(jiti@1.21.7))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.3)(vite@7.3.5(@types/node@25.9.3)(jiti@1.21.7)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(vue-tsc@3.3.4(typescript@6.0.3))(yaml@2.9.0)
obug: obug:
specifier: ^2.1.2 specifier: ^2.1.2
version: 2.1.2 version: 2.1.2
ofetch:
specifier: ^1.5.1
version: 1.5.1
openid-client: openid-client:
specifier: ^6.8.4 specifier: ^6.8.4
version: 6.8.4 version: 6.8.4
+3
View File
@@ -1,3 +1,6 @@
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
export default definePermissionEventHandler('admin', 'any', async () => { export default definePermissionEventHandler('admin', 'any', async () => {
const generalConfig = await Database.general.getConfig(); const generalConfig = await Database.general.getConfig();
return generalConfig; return generalConfig;
+5
View File
@@ -1,3 +1,8 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { GeneralUpdateSchema } from '#db/repositories/general/types'; import { GeneralUpdateSchema } from '#db/repositories/general/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
+3
View File
@@ -1,3 +1,6 @@
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
export default definePermissionEventHandler('admin', 'any', async () => { export default definePermissionEventHandler('admin', 'any', async () => {
const hooks = await Database.hooks.get(); const hooks = await Database.hooks.get();
return hooks; return hooks;
+6
View File
@@ -1,3 +1,9 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { HooksUpdateSchema } from '#db/repositories/hooks/types'; import { HooksUpdateSchema } from '#db/repositories/hooks/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,9 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { InterfaceCidrUpdateSchema } from '#db/repositories/interface/types'; import { InterfaceCidrUpdateSchema } from '#db/repositories/interface/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,6 @@
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
export default definePermissionEventHandler('admin', 'any', async () => { export default definePermissionEventHandler('admin', 'any', async () => {
const wgInterface = await Database.interfaces.get(); const wgInterface = await Database.interfaces.get();
@@ -1,3 +1,11 @@
import { createError, readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { WG_ENV } from '#server/utils/config';
import { firewall } from '#server/utils/firewall';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { InterfaceUpdateSchema } from '#db/repositories/interface/types'; import { InterfaceUpdateSchema } from '#db/repositories/interface/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,6 @@
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
export default definePermissionEventHandler('admin', 'any', async () => { export default definePermissionEventHandler('admin', 'any', async () => {
await WireGuard.Restart(); await WireGuard.Restart();
+3
View File
@@ -1,3 +1,6 @@
import { definePermissionEventHandler } from '#server/utils/handler';
import { cachedGetIpInformation } from '#server/utils/ip';
export default definePermissionEventHandler('admin', 'any', async () => { export default definePermissionEventHandler('admin', 'any', async () => {
const result = await cachedGetIpInformation(); const result = await cachedGetIpInformation();
return result; return result;
+3
View File
@@ -1,3 +1,6 @@
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
export default definePermissionEventHandler('admin', 'any', async () => { export default definePermissionEventHandler('admin', 'any', async () => {
const userConfig = await Database.userConfigs.get(); const userConfig = await Database.userConfigs.get();
return userConfig; return userConfig;
+6
View File
@@ -1,3 +1,9 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { UserConfigUpdateSchema } from '#db/repositories/userConfig/types'; import { UserConfigUpdateSchema } from '#db/repositories/userConfig/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,11 @@
import { createError, defineEventHandler, sendRedirect } from 'h3';
import Database from '#server/utils/Database';
import { SERVER_DEBUG } from '#server/utils/config';
import { buildOauthConfig, getUserInfo } from '#server/utils/oauth';
import { useWGSession } from '#server/utils/session';
import { assertUnreachable } from '#server/utils/types';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
const { config, provider, providerConfig } = await buildOauthConfig(event); const { config, provider, providerConfig } = await buildOauthConfig(event);
@@ -1,6 +1,17 @@
import {
defineEventHandler,
getRequestHost,
getValidatedQuery,
sendRedirect,
} from 'h3';
import * as client from 'openid-client'; import * as client from 'openid-client';
import { z } from 'zod'; import { z } from 'zod';
import { WG_ENV } from '#server/utils/config';
import { buildOauthConfig } from '#server/utils/oauth';
import { useWGSession } from '#server/utils/session';
import { validateZod } from '#server/utils/types';
const OauthQuerySchema = z.object({ const OauthQuerySchema = z.object({
link: z.coerce.boolean().optional(), link: z.coerce.boolean().optional(),
}); });
@@ -1,3 +1,10 @@
import { createError, sendRedirect } from 'h3';
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
import { buildOauthConfig, getUserInfo } from '#server/utils/oauth';
import { useWGSession } from '#server/utils/session';
export default definePermissionEventHandler( export default definePermissionEventHandler(
'me', 'me',
'update', 'update',
+4
View File
@@ -1,3 +1,7 @@
import { defineEventHandler } from 'h3';
import { useWGSession } from '#server/utils/session';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
const session = await useWGSession(event); const session = await useWGSession(event);
+6
View File
@@ -1,3 +1,9 @@
import { defineEventHandler } from 'h3';
import { WG_ENV } from '#server/utils/config';
import { OAUTH_PROVIDERS } from '#server/utils/oauth';
import type { OAUTH_PROVIDER } from '#server/utils/oauth';
export default defineEventHandler(() => { export default defineEventHandler(() => {
return { return {
providers: WG_ENV.OAUTH_PROVIDERS?.reduce( providers: WG_ENV.OAUTH_PROVIDERS?.reduce(
+6
View File
@@ -1,3 +1,9 @@
import { createError, defineEventHandler, readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import { SERVER_DEBUG, WG_ENV } from '#server/utils/config';
import { useWGSession } from '#server/utils/session';
import { assertUnreachable, validateZod } from '#server/utils/types';
import { UserLoginSchema } from '#db/repositories/user/types'; import { UserLoginSchema } from '#db/repositories/user/types';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
+4
View File
@@ -1,3 +1,7 @@
import { createError, defineEventHandler } from 'h3';
import { useWGSession } from '#server/utils/session';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
const session = await useWGSession(event); const session = await useWGSession(event);
+3
View File
@@ -1,3 +1,6 @@
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
export default definePermissionEventHandler( export default definePermissionEventHandler(
'me', 'me',
'update', 'update',
+5
View File
@@ -1,3 +1,8 @@
import { createError, defineEventHandler, readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import { useWGSession } from '#server/utils/session';
import { assertUnreachable, validateZod } from '#server/utils/types';
import { Verify2faSchema } from '#db/repositories/user/types'; import { Verify2faSchema } from '#db/repositories/user/types';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
@@ -1,3 +1,9 @@
import { createError, getValidatedRouterParams, setHeader } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { ClientGetSchema } from '#db/repositories/client/types'; import { ClientGetSchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,9 @@
import { getValidatedRouterParams } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { ClientGetSchema } from '#db/repositories/client/types'; import { ClientGetSchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,9 @@
import { createError, getValidatedRouterParams } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { ClientGetSchema } from '#db/repositories/client/types'; import { ClientGetSchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,8 @@
import { getValidatedRouterParams } from 'h3';
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { ClientGetSchema } from '#db/repositories/client/types'; import { ClientGetSchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,9 @@
import { getValidatedRouterParams } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { ClientGetSchema } from '#db/repositories/client/types'; import { ClientGetSchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,9 @@
import { createError, getValidatedRouterParams } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { ClientGetSchema } from '#db/repositories/client/types'; import { ClientGetSchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
@@ -1,3 +1,9 @@
import { getValidatedRouterParams, readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { import {
ClientGetSchema, ClientGetSchema,
ClientUpdateSchema, ClientUpdateSchema,
@@ -1,3 +1,9 @@
import { getValidatedRouterParams, setHeader } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { ClientGetSchema } from '#db/repositories/client/types'; import { ClientGetSchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
+6
View File
@@ -1,3 +1,9 @@
import { getValidatedQuery } from 'h3';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { roles } from '#shared/utils/permissions';
import { ClientQuerySchema } from '#db/repositories/client/types'; import { ClientQuerySchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
+6
View File
@@ -1,3 +1,9 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { ClientCreateSchema } from '#db/repositories/client/types'; import { ClientCreateSchema } from '#db/repositories/client/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
+5
View File
@@ -1,5 +1,10 @@
import { defineEventHandler } from 'h3';
import { gt } from 'semver'; import { gt } from 'semver';
import Database from '#server/utils/Database';
import { RELEASE, WG_ENV } from '#server/utils/config';
import { cachedFetchLatestRelease } from '#server/utils/release';
export default defineEventHandler(async () => { export default defineEventHandler(async () => {
const latestRelease = await cachedFetchLatestRelease(); const latestRelease = await cachedFetchLatestRelease();
const updateAvailable = gt(latestRelease.version, RELEASE); const updateAvailable = gt(latestRelease.version, RELEASE);
+5
View File
@@ -1,3 +1,8 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { UserUpdateSchema } from '#db/repositories/user/types'; import { UserUpdateSchema } from '#db/repositories/user/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
+5
View File
@@ -1,3 +1,8 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { UserUpdatePasswordSchema } from '#db/repositories/user/types'; import { UserUpdatePasswordSchema } from '#db/repositories/user/types';
export default definePermissionEventHandler( export default definePermissionEventHandler(
+5
View File
@@ -1,4 +1,9 @@
import { createError, readValidatedBody } from 'h3';
import { Secret, TOTP } from 'otpauth'; import { Secret, TOTP } from 'otpauth';
import Database from '#server/utils/Database';
import { definePermissionEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { UserUpdateTotpSchema } from '#db/repositories/user/types'; import { UserUpdateTotpSchema } from '#db/repositories/user/types';
type Response = type Response =
+5
View File
@@ -1,3 +1,8 @@
import { createError, defineEventHandler } from 'h3';
import { SERVER_DEBUG } from '#server/utils/config';
import { useWGSession } from '#server/utils/session';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
const session = await useWGSession(event); const session = await useWGSession(event);
const sessionId = session.id; const sessionId = session.id;
+6
View File
@@ -1,3 +1,9 @@
import { createError, defineEventHandler } from 'h3';
import Database from '#server/utils/Database';
import { useWGSession } from '#server/utils/session';
import type { SharedPublicUser } from '#shared/utils/permissions';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
const session = await useWGSession(event); const session = await useWGSession(event);
+5
View File
@@ -1,3 +1,8 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import { defineSetupEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { UserSetupSchema } from '#db/repositories/user/types'; import { UserSetupSchema } from '#db/repositories/user/types';
export default defineSetupEventHandler(2, async ({ event }) => { export default defineSetupEventHandler(2, async ({ event }) => {
+3
View File
@@ -1,3 +1,6 @@
import { defineSetupEventHandler } from '#server/utils/handler';
import { cachedGetIpInformation } from '#server/utils/ip';
export default defineSetupEventHandler(4, async () => { export default defineSetupEventHandler(4, async () => {
const result = await cachedGetIpInformation(); const result = await cachedGetIpInformation();
return result; return result;
+5
View File
@@ -1,3 +1,8 @@
import { readValidatedBody } from 'h3';
import Database from '#server/utils/Database';
import { defineSetupEventHandler } from '#server/utils/handler';
import { validateZod } from '#server/utils/types';
import { UserConfigSetupSchema } from '#db/repositories/userConfig/types'; import { UserConfigSetupSchema } from '#db/repositories/userConfig/types';
export default defineSetupEventHandler(4, async ({ event }) => { export default defineSetupEventHandler(4, async ({ event }) => {
+6
View File
@@ -1,7 +1,13 @@
import { readValidatedBody } from 'h3';
import { parseCidr } from 'cidr-tools'; import { parseCidr } from 'cidr-tools';
import { stringifyIp } from 'ip-bigint'; import { stringifyIp } from 'ip-bigint';
import { z } from 'zod'; import { z } from 'zod';
import Database from '#server/utils/Database';
import { defineSetupEventHandler } from '#server/utils/handler';
import { nextIP } from '#server/utils/ip';
import { FileSchema, validateZod } from '#server/utils/types';
export default defineSetupEventHandler('migrate', async ({ event }) => { export default defineSetupEventHandler('migrate', async ({ event }) => {
const { file } = await readValidatedBody( const { file } = await readValidatedBody(
event, event,
@@ -1,7 +1,9 @@
import { sql, relations } from 'drizzle-orm'; import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { oneTimeLink, user, wgInterface } from '../../schema'; import { wgInterface } from '#db/repositories/interface/schema';
import { oneTimeLink } from '#db/repositories/oneTimeLink/schema';
import { user } from '#db/repositories/user/schema';
/** null means use value from userConfig */ /** null means use value from userConfig */
@@ -1,5 +1,6 @@
import { eq, sql, or, like, and } from 'drizzle-orm'; import { eq, sql, or, like, and } from 'drizzle-orm';
import { containsCidr, parseCidr } from 'cidr-tools'; import { containsCidr, parseCidr } from 'cidr-tools';
import { client } from './schema'; import { client } from './schema';
import type { import type {
ClientCreateFromExistingType, ClientCreateFromExistingType,
@@ -7,6 +8,11 @@ import type {
ClientQueryType, ClientQueryType,
UpdateClientType, UpdateClientType,
} from './types'; } from './types';
import Database from '#server/utils/Database';
import { nextIP } from '#server/utils/ip';
import type { ID } from '#server/utils/types';
import { wg } from '#server/utils/wgHelper';
import type { DBType } from '#db/sqlite'; import type { DBType } from '#db/sqlite';
import { wgInterface, userConfig } from '#db/schema'; import { wgInterface, userConfig } from '#db/schema';
@@ -1,9 +1,28 @@
import type { InferSelectModel } from 'drizzle-orm'; import type { InferSelectModel } from 'drizzle-orm';
import z from 'zod'; import z from 'zod';
import { isIPv4, isIPv6 } from 'is-ip'; import { isIPv4, isIPv6 } from 'is-ip';
import type { client } from './schema'; import type { client } from './schema';
import {
AddressSchema,
AllowedIpsSchema,
DnsSchema,
EnabledSchema,
FirewallIpsSchema,
HookSchema,
ISchema,
JcSchema,
JmaxSchema,
JminSchema,
MtuSchema,
PersistentKeepaliveSchema,
controlStringRefine,
safeStringRefine,
schemaForType,
t,
} from '#server/utils/types';
export type ClientType = InferSelectModel<typeof client>; export type ClientType = InferSelectModel<typeof client>;
export type ClientNextIpType = Pick<ClientType, 'ipv4Address' | 'ipv6Address'>; export type ClientNextIpType = Pick<ClientType, 'ipv4Address' | 'ipv6Address'>;
@@ -1,6 +1,9 @@
import { sql } from 'drizzle-orm'; import { sql } from 'drizzle-orm';
import { general } from './schema'; import { general } from './schema';
import type { GeneralUpdateType } from './types'; import type { GeneralUpdateType } from './types';
import { hashPassword, isValidPasswordHash } from '#server/utils/password';
import type { DBType } from '#db/sqlite'; import type { DBType } from '#db/sqlite';
function createPreparedStatement(db: DBType) { function createPreparedStatement(db: DBType) {
@@ -1,7 +1,10 @@
import type { InferSelectModel } from 'drizzle-orm'; import type { InferSelectModel } from 'drizzle-orm';
import z from 'zod'; import z from 'zod';
import type { general } from './schema'; import type { general } from './schema';
import { safeStringRefine, t } from '#server/utils/types';
export type GeneralType = InferSelectModel<typeof general>; export type GeneralType = InferSelectModel<typeof general>;
const sessionTimeout = z.number({ message: t('zod.general.sessionTimeout') }); const sessionTimeout = z.number({ message: t('zod.general.sessionTimeout') });
@@ -1,7 +1,7 @@
import { sql } from 'drizzle-orm'; import { sql } from 'drizzle-orm';
import { sqliteTable, text } from 'drizzle-orm/sqlite-core'; import { sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { wgInterface } from '../../schema'; import { wgInterface } from '#db/repositories/interface/schema';
export const hooks = sqliteTable('hooks_table', { export const hooks = sqliteTable('hooks_table', {
/** same as `wgInterface.name` */ /** same as `wgInterface.name` */
@@ -1,6 +1,8 @@
import { eq, sql } from 'drizzle-orm'; import { eq, sql } from 'drizzle-orm';
import { hooks } from './schema'; import { hooks } from './schema';
import type { HooksUpdateType } from './types'; import type { HooksUpdateType } from './types';
import type { DBType } from '#db/sqlite'; import type { DBType } from '#db/sqlite';
function createPreparedStatement(db: DBType) { function createPreparedStatement(db: DBType) {
@@ -1,7 +1,10 @@
import type { InferSelectModel } from 'drizzle-orm'; import type { InferSelectModel } from 'drizzle-orm';
import z from 'zod'; import z from 'zod';
import type { hooks } from './schema'; import type { hooks } from './schema';
import { HookSchema, schemaForType } from '#server/utils/types';
export type HooksType = InferSelectModel<typeof hooks>; export type HooksType = InferSelectModel<typeof hooks>;
export type HooksUpdateType = Omit<HooksType, 'id' | 'createdAt' | 'updatedAt'>; export type HooksUpdateType = Omit<HooksType, 'id' | 'createdAt' | 'updatedAt'>;
@@ -1,7 +1,8 @@
import { sql, relations } from 'drizzle-orm'; import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { userConfig, hooks } from '../../schema'; import { hooks } from '#db/repositories/hooks/schema';
import { userConfig } from '#db/repositories/userConfig/schema';
// maybe support multiple interfaces in the future // maybe support multiple interfaces in the future
export const wgInterface = sqliteTable('interfaces_table', { export const wgInterface = sqliteTable('interfaces_table', {
@@ -1,7 +1,10 @@
import { eq, sql } from 'drizzle-orm'; import { eq, sql } from 'drizzle-orm';
import { parseCidr } from 'cidr-tools'; import { parseCidr } from 'cidr-tools';
import { wgInterface } from './schema'; import { wgInterface } from './schema';
import type { InterfaceCidrUpdateType, InterfaceUpdateType } from './types'; import type { InterfaceCidrUpdateType, InterfaceUpdateType } from './types';
import { nextIP } from '#server/utils/ip';
import { client as clientSchema } from '#db/schema'; import { client as clientSchema } from '#db/schema';
import type { DBType } from '#db/sqlite'; import type { DBType } from '#db/sqlite';
@@ -1,8 +1,24 @@
import type { InferSelectModel } from 'drizzle-orm'; import type { InferSelectModel } from 'drizzle-orm';
import z from 'zod'; import z from 'zod';
import isCidr from 'is-cidr'; import isCidr from 'is-cidr';
import type { wgInterface } from './schema'; import type { wgInterface } from './schema';
import {
EnabledSchema,
HSchema,
ISchema,
JcSchema,
JmaxSchema,
JminSchema,
MtuSchema,
PortSchema,
SSchema,
safeStringRefine,
schemaForType,
t,
} from '#server/utils/types';
export type InterfaceType = InferSelectModel<typeof wgInterface>; export type InterfaceType = InferSelectModel<typeof wgInterface>;
export type InterfaceCreateType = Omit< export type InterfaceCreateType = Omit<
@@ -1,7 +1,7 @@
import { sql, relations } from 'drizzle-orm'; import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { client } from '../../schema'; import { client } from '#db/repositories/client/schema';
export const oneTimeLink = sqliteTable('one_time_links_table', { export const oneTimeLink = sqliteTable('one_time_links_table', {
/** same as `client.id` */ /** same as `client.id` */
@@ -1,6 +1,9 @@
import { eq, sql } from 'drizzle-orm'; import { eq, sql } from 'drizzle-orm';
import CRC32 from 'crc-32'; import CRC32 from 'crc-32';
import { oneTimeLink } from './schema'; import { oneTimeLink } from './schema';
import type { ID } from '#server/utils/types';
import type { DBType } from '#db/sqlite'; import type { DBType } from '#db/sqlite';
function createPreparedStatement(db: DBType) { function createPreparedStatement(db: DBType) {
@@ -1,7 +1,10 @@
import type { InferSelectModel } from 'drizzle-orm'; import type { InferSelectModel } from 'drizzle-orm';
import { z } from 'zod'; import { z } from 'zod';
import type { oneTimeLink } from './schema'; import type { oneTimeLink } from './schema';
import { safeStringRefine, t } from '#server/utils/types';
export type OneTimeLinkType = InferSelectModel<typeof oneTimeLink>; export type OneTimeLinkType = InferSelectModel<typeof oneTimeLink>;
const oneTimeLinkType = z const oneTimeLinkType = z
@@ -1,7 +1,9 @@
import { sql, relations } from 'drizzle-orm'; import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core'; import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core';
import { client } from '../../schema'; import { client } from '#db/repositories/client/schema';
import type { Role } from '#shared/utils/permissions';
import type { OAUTH_PROVIDER } from '#server/utils/oauth';
export const user = sqliteTable( export const user = sqliteTable(
'users_table', 'users_table',
@@ -1,7 +1,14 @@
import { eq, sql, and } from 'drizzle-orm'; import { eq, sql, and } from 'drizzle-orm';
import { TOTP } from 'otpauth'; import { TOTP } from 'otpauth';
import { user } from './schema'; import { user } from './schema';
import type { UserType } from './types'; import type { UserType } from './types';
import { WG_ENV } from '#server/utils/config';
import type { OAUTH_PROVIDER } from '#server/utils/oauth';
import { hashPassword, isPasswordValid } from '#server/utils/password';
import type { ID } from '#server/utils/types';
import { roles } from '#shared/utils/permissions';
import type { DBType } from '#db/sqlite'; import type { DBType } from '#db/sqlite';
type LoginResult = type LoginResult =
@@ -1,7 +1,10 @@
import type { InferSelectModel } from 'drizzle-orm'; import type { InferSelectModel } from 'drizzle-orm';
import z from 'zod'; import z from 'zod';
import type { user } from './schema'; import type { user } from './schema';
import { safeStringRefine, t } from '#server/utils/types';
export type UserType = InferSelectModel<typeof user>; export type UserType = InferSelectModel<typeof user>;
const username = z const username = z
@@ -1,7 +1,7 @@
import { sql } from 'drizzle-orm'; import { sql } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { wgInterface } from '../../schema'; import { wgInterface } from '#db/repositories/interface/schema';
// default* means clients store it themselves // default* means clients store it themselves
export const userConfig = sqliteTable('user_configs_table', { export const userConfig = sqliteTable('user_configs_table', {
@@ -1,6 +1,8 @@
import { eq, sql } from 'drizzle-orm'; import { eq, sql } from 'drizzle-orm';
import { userConfig } from './schema'; import { userConfig } from './schema';
import type { UserConfigUpdateType } from './types'; import type { UserConfigUpdateType } from './types';
import { wgInterface } from '#db/schema'; import { wgInterface } from '#db/schema';
import type { DBType } from '#db/sqlite'; import type { DBType } from '#db/sqlite';
@@ -1,7 +1,23 @@
import type { InferSelectModel } from 'drizzle-orm'; import type { InferSelectModel } from 'drizzle-orm';
import z from 'zod'; import z from 'zod';
import type { userConfig } from './schema'; import type { userConfig } from './schema';
import {
AllowedIpsSchema,
DnsSchema,
ISchema,
JcSchema,
JmaxSchema,
JminSchema,
MtuSchema,
PersistentKeepaliveSchema,
PortSchema,
safeStringRefine,
schemaForType,
t,
} from '#server/utils/types';
export type UserConfigType = InferSelectModel<typeof userConfig>; export type UserConfigType = InferSelectModel<typeof userConfig>;
const host = z const host = z
+7 -8
View File
@@ -1,8 +1,7 @@
// Make sure to not use any Path Aliases in these files export * from '#db/repositories/client/schema';
export * from './repositories/client/schema'; export * from '#db/repositories/general/schema';
export * from './repositories/general/schema'; export * from '#db/repositories/hooks/schema';
export * from './repositories/hooks/schema'; export * from '#db/repositories/interface/schema';
export * from './repositories/interface/schema'; export * from '#db/repositories/oneTimeLink/schema';
export * from './repositories/oneTimeLink/schema'; export * from '#db/repositories/user/schema';
export * from './repositories/user/schema'; export * from '#db/repositories/userConfig/schema';
export * from './repositories/userConfig/schema';
+9 -8
View File
@@ -4,14 +4,15 @@ import { createClient } from '@libsql/client';
import { createDebug } from 'obug'; import { createDebug } from 'obug';
import { eq } from 'drizzle-orm'; import { eq } from 'drizzle-orm';
import * as schema from './schema'; import { GeneralService } from '#db/repositories/general/service';
import { ClientService } from './repositories/client/service'; import { UserService } from '#db/repositories/user/service';
import { GeneralService } from './repositories/general/service'; import { UserConfigService } from '#db/repositories/userConfig/service';
import { UserService } from './repositories/user/service'; import { InterfaceService } from '#db/repositories/interface/service';
import { UserConfigService } from './repositories/userConfig/service'; import { HooksService } from '#db/repositories/hooks/service';
import { InterfaceService } from './repositories/interface/service'; import { OneTimeLinkService } from '#db/repositories/oneTimeLink/service';
import { HooksService } from './repositories/hooks/service'; import { ClientService } from '#db/repositories/client/service';
import { OneTimeLinkService } from './repositories/oneTimeLink/service'; import * as schema from '#db/schema';
import { WG_ENV, WG_INITIAL_ENV } from '#server/utils/config';
const DB_DEBUG = createDebug('Database'); const DB_DEBUG = createDebug('Database');
+4
View File
@@ -1,3 +1,7 @@
import { defineEventHandler, getRequestURL, sendRedirect } from 'h3';
import Database from '#server/utils/Database';
/* First setup of wg-easy */ /* First setup of wg-easy */
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
const url = getRequestURL(event); const url = getRequestURL(event);
+5
View File
@@ -1,3 +1,8 @@
import { defineNitroPlugin } from 'nitropack/runtime';
import WireGuard from '#server/utils/WireGuard';
import { RELEASE } from '#server/utils/config';
export default defineNitroPlugin((nitroApp) => { export default defineNitroPlugin((nitroApp) => {
console.log(` console.log(`
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
+10
View File
@@ -1,3 +1,13 @@
import {
createError,
defineEventHandler,
getValidatedRouterParams,
setHeader,
} from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { validateZod } from '#server/utils/types';
import { OneTimeLinkGetSchema } from '#db/repositories/oneTimeLink/types'; import { OneTimeLinkGetSchema } from '#db/repositories/oneTimeLink/types';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
+4
View File
@@ -1,3 +1,7 @@
import WireGuard from '#server/utils/WireGuard';
import { defineMetricsHandler } from '#server/utils/handler';
import { isPeerConnected } from '#shared/utils/time';
export default defineMetricsHandler('json', async () => { export default defineMetricsHandler('json', async () => {
return getMetricsJSON(); return getMetricsJSON();
}); });
@@ -1,3 +1,10 @@
import { setHeader } from 'h3';
import Database from '#server/utils/Database';
import WireGuard from '#server/utils/WireGuard';
import { defineMetricsHandler } from '#server/utils/handler';
import { isPeerConnected } from '#shared/utils/time';
export default defineMetricsHandler('prometheus', async ({ event }) => { export default defineMetricsHandler('prometheus', async ({ event }) => {
setHeader(event, 'Content-Type', 'text/plain'); setHeader(event, 'Content-Type', 'text/plain');
return getPrometheusResponse(); return getPrometheusResponse();
+1
View File
@@ -1,3 +1,4 @@
import WireGuard from '#server/utils/WireGuard';
/** /**
* Changing the Database Provider * Changing the Database Provider
* This design allows for easy swapping of different database implementations. * This design allows for easy swapping of different database implementations.
+9
View File
@@ -1,5 +1,14 @@
import fs from 'node:fs/promises'; import fs from 'node:fs/promises';
import { createDebug } from 'obug'; import { createDebug } from 'obug';
import Database from '#server/utils/Database';
import { OLD_ENV, WG_ENV } from '#server/utils/config';
import { firewall } from '#server/utils/firewall';
import { encodeQRCode } from '#server/utils/qr';
import type { ID } from '#server/utils/types';
import { wg } from '#server/utils/wgHelper';
import { setIntervalImmediately } from '#shared/utils/time';
import type { InterfaceType } from '#db/repositories/interface/types'; import type { InterfaceType } from '#db/repositories/interface/types';
import type { ClientQueryType } from '#db/repositories/client/types'; import type { ClientQueryType } from '#db/repositories/client/types';
+1
View File
@@ -1,4 +1,5 @@
import childProcess from 'child_process'; import childProcess from 'child_process';
import { createDebug } from 'obug'; import { createDebug } from 'obug';
const CMD_DEBUG = createDebug('CMD'); const CMD_DEBUG = createDebug('CMD');
+7
View File
@@ -1,6 +1,13 @@
import { createDebug } from 'obug'; import { createDebug } from 'obug';
import packageJson from '@@/package.json'; import packageJson from '@@/package.json';
import { exec } from '#server/utils/cmd';
import {
OAUTH_PROVIDERS,
isConfiguredOauthProvider,
isValidOauthProvider,
} from '#server/utils/oauth';
export const RELEASE = 'v' + packageJson.version; export const RELEASE = 'v' + packageJson.version;
export const SERVER_DEBUG = createDebug('Server'); export const SERVER_DEBUG = createDebug('Server');
+1
View File
@@ -1,6 +1,7 @@
import { createDebug } from 'obug'; import { createDebug } from 'obug';
import { isIPv6 } from 'is-ip'; import { isIPv6 } from 'is-ip';
import { exec } from '#server/utils/cmd';
import type { ClientType } from '#db/repositories/client/types'; import type { ClientType } from '#db/repositories/client/types';
import type { InterfaceType } from '#db/repositories/interface/types'; import type { InterfaceType } from '#db/repositories/interface/types';
import type { UserConfigType } from '#db/repositories/userConfig/types'; import type { UserConfigType } from '#db/repositories/userConfig/types';
+5
View File
@@ -1,4 +1,9 @@
import { createError, defineEventHandler, getHeader } from 'h3';
import type { EventHandlerRequest, EventHandlerResponse, H3Event } from 'h3'; import type { EventHandlerRequest, EventHandlerResponse, H3Event } from 'h3';
import Database from '#server/utils/Database';
import { isPasswordValid } from '#server/utils/password';
import { getCurrentUser } from '#server/utils/session';
import type { UserType } from '#db/repositories/user/types'; import type { UserType } from '#db/repositories/user/types';
import type { SetupStepType } from '#db/repositories/general/types'; import type { SetupStepType } from '#db/repositories/general/types';
import { import {
+2
View File
@@ -1,8 +1,10 @@
import { Resolver } from 'node:dns/promises'; import { Resolver } from 'node:dns/promises';
import { networkInterfaces } from 'node:os'; import { networkInterfaces } from 'node:os';
import { stringifyIp } from 'ip-bigint'; import { stringifyIp } from 'ip-bigint';
import type { parseCidr } from 'cidr-tools'; import type { parseCidr } from 'cidr-tools';
import { cacheFunction } from '#server/utils/cache';
import type { ClientNextIpType } from '#db/repositories/client/types'; import type { ClientNextIpType } from '#db/repositories/client/types';
type ParsedCidr = ReturnType<typeof parseCidr>; type ParsedCidr = ReturnType<typeof parseCidr>;
+3
View File
@@ -1,6 +1,9 @@
import { createError, getRequestURL, getRouterParam } from 'h3';
import type { H3Event } from 'h3'; import type { H3Event } from 'h3';
import * as client from 'openid-client'; import * as client from 'openid-client';
import { WG_ENV } from '#server/utils/config';
type OAuthConfig = { type OAuthConfig = {
friendlyName: string; friendlyName: string;
server: string; server: string;
-2
View File
@@ -1,5 +1,3 @@
// ! Auto Imports are not supported in this file
import argon2 from 'argon2'; import argon2 from 'argon2';
import { deserialize } from '@phc/format'; import { deserialize } from '@phc/format';
-2
View File
@@ -1,5 +1,3 @@
// ! Auto Imports are not supported in this file
import type { ErrorCorrection } from 'qr'; import type { ErrorCorrection } from 'qr';
import { encodeQR } from 'qr'; import { encodeQR } from 'qr';
+6
View File
@@ -1,3 +1,9 @@
import { createError } from 'h3';
import { $fetch } from 'ofetch';
import { cacheFunction } from '#server/utils/cache';
import { RELEASE, SERVER_DEBUG, WG_ENV } from '#server/utils/config';
type GithubRelease = { type GithubRelease = {
tag_name: string; tag_name: string;
body: string; body: string;
+6
View File
@@ -1,4 +1,10 @@
import { createError, getHeader, getSession, useSession } from 'h3';
import type { H3Event } from 'h3'; import type { H3Event } from 'h3';
import Database from '#server/utils/Database';
import { WG_ENV } from '#server/utils/config';
import { isPasswordValid } from '#server/utils/password';
import type { ID } from '#server/utils/types';
import type { UserType } from '#db/repositories/user/types'; import type { UserType } from '#db/repositories/user/types';
export type WGSession = Partial<{ export type WGSession = Partial<{
+1 -2
View File
@@ -1,5 +1,4 @@
// ! Auto Imports are not supported in this file import { WG_ENV } from '#server/utils/config';
import type { InterfaceType } from '#db/repositories/interface/types'; import type { InterfaceType } from '#db/repositories/interface/types';
/** /**
+1
View File
@@ -1,3 +1,4 @@
import { useTranslation } from '@intlify/h3';
import type { ZodType } from 'zod'; import type { ZodType } from 'zod';
import z from 'zod'; import z from 'zod';
import type { H3Event, EventHandlerRequest } from 'h3'; import type { H3Event, EventHandlerRequest } from 'h3';
+3 -3
View File
@@ -1,9 +1,9 @@
// ! Auto Imports are not supported in this file
import { parseCidr } from 'cidr-tools'; import { parseCidr } from 'cidr-tools';
import { stringifyIp } from 'ip-bigint'; import { stringifyIp } from 'ip-bigint';
import { removeNewlines } from './template';
import { removeNewlines, iptablesTemplate } from '#server/utils/template';
import { exec } from '#server/utils/cmd';
import { WG_ENV } from '#server/utils/config';
import type { ClientType } from '#db/repositories/client/types'; import type { ClientType } from '#db/repositories/client/types';
import type { InterfaceType } from '#db/repositories/interface/types'; import type { InterfaceType } from '#db/repositories/interface/types';
import type { UserConfigType } from '#db/repositories/userConfig/types'; import type { UserConfigType } from '#db/repositories/userConfig/types';
+3 -2
View File
@@ -1,6 +1,7 @@
import { describe, expect, test } from 'vitest'; import { describe, expect, test } from 'vitest';
import { firewallTestExports } from '../../server/utils/firewall';
import { typesTestExports } from '../../server/utils/types'; import { firewallTestExports } from '#server/utils/firewall';
import { typesTestExports } from '#server/utils/types';
describe('firewall', () => { describe('firewall', () => {
describe('isValidFirewallEntry', () => { describe('isValidFirewallEntry', () => {
+2 -1
View File
@@ -1,9 +1,10 @@
import { expect, test, describe } from 'vitest'; import { expect, test, describe } from 'vitest';
import { import {
hashPassword, hashPassword,
isPasswordValid, isPasswordValid,
isValidPasswordHash, isValidPasswordHash,
} from '../../server/utils/password'; } from '#server/utils/password';
describe('password', () => { describe('password', () => {
test('password', async () => { test('password', async () => {
+7
View File
@@ -1,9 +1,16 @@
import { fileURLToPath } from 'node:url';
import { defineConfig } from 'vitest/config'; import { defineConfig } from 'vitest/config';
export default defineConfig({ export default defineConfig({
test: { test: {
projects: [ projects: [
{ {
resolve: {
alias: {
'#server': fileURLToPath(new URL('./server', import.meta.url)),
},
},
test: { test: {
name: 'unit', name: 'unit',
include: ['test/unit/*.{test,spec}.ts'], include: ['test/unit/*.{test,spec}.ts'],