From c4bbadfed7ad1fa7600ea648d66854877b473f47 Mon Sep 17 00:00:00 2001 From: Bernd Storath <999999bst@gmail.com> Date: Wed, 12 Mar 2025 16:10:38 +0100 Subject: [PATCH] initial support for initial setup --- Dockerfile | 1 + Dockerfile.dev | 3 ++- src/server/database/sqlite.ts | 40 ++++++++++++++++++++++++++++++++++- src/server/utils/config.ts | 9 ++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 65d96358..428b8d82 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,6 +47,7 @@ ENV DEBUG=Server,WireGuard,Database,CMD ENV PORT=51821 ENV HOST=0.0.0.0 ENV INSECURE=false +ENV INIT_ENABLED=false LABEL org.opencontainers.image.source=https://github.com/wg-easy/wg-easy diff --git a/Dockerfile.dev b/Dockerfile.dev index b0c3a0dd..50d18112 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -26,7 +26,8 @@ RUN update-alternatives --install /usr/sbin/ip6tables ip6tables /usr/sbin/ip6tab ENV DEBUG=Server,WireGuard,Database,CMD ENV PORT=51821 ENV HOST=0.0.0.0 -ENV INSECURE=false +ENV INSECURE=true +ENV INIT_ENABLED=false # Install Dependencies COPY src/package.json src/pnpm-lock.yaml ./ diff --git a/src/server/database/sqlite.ts b/src/server/database/sqlite.ts index c1062e4c..46cd323a 100644 --- a/src/server/database/sqlite.ts +++ b/src/server/database/sqlite.ts @@ -19,7 +19,13 @@ const db = drizzle({ client, schema }); export async function connect() { await migrate(); - return new DBService(db); + const dbService = new DBService(db); + + if (WG_INITIAL_ENV.ENABLED) { + await initialSetup(dbService); + } + + return dbService; } class DBService { @@ -58,3 +64,35 @@ async function migrate() { } } } + +async function initialSetup(db: DBServiceType) { + const setup = await db.general.getSetupStep(); + + if (setup.done) { + DB_DEBUG('Warning: Setup already done. Skiping initial setup.'); + return; + } + + if (WG_INITIAL_ENV.USERNAME && WG_INITIAL_ENV.PASSWORD) { + await db.users.create(WG_INITIAL_ENV.USERNAME, WG_INITIAL_ENV.PASSWORD); + } + + if (WG_INITIAL_ENV.IPV4_CIDR && WG_INITIAL_ENV.IPV6_CIDR) { + await db.interfaces.updateCidr({ + ipv4Cidr: WG_INITIAL_ENV.IPV4_CIDR, + ipv6Cidr: WG_INITIAL_ENV.IPV6_CIDR, + }); + } + + if (WG_INITIAL_ENV.DNS) { + const userConfig = await db.userConfigs.get(); + await db.userConfigs.update({ + ...userConfig, + defaultDns: WG_INITIAL_ENV.DNS, + }); + } + + // TODO: set host, port + + await db.general.setSetupStep(0); +} diff --git a/src/server/utils/config.ts b/src/server/utils/config.ts index fb656fc1..59cbc6db 100644 --- a/src/server/utils/config.ts +++ b/src/server/utils/config.ts @@ -19,6 +19,15 @@ export const WG_ENV = { PORT: assertEnv('PORT'), }; +export const WG_INITIAL_ENV = { + ENABLED: process.env.INIT_ENABLED === 'true', + USERNAME: process.env.INIT_USERNAME, + PASSWORD: process.env.INIT_PASSWORD, + DNS: process.env.INIT_DNS?.split(',').map((x) => x.trim()), + IPV4_CIDR: process.env.INIT_IPV4_CIDR, + IPV6_CIDR: process.env.INIT_IPV6_CIDR, +}; + function assertEnv(env: T) { const val = process.env[env];