diff --git a/src/app/pages/admin/config.vue b/src/app/pages/admin/config.vue index 84e7e0e6..a290bed6 100644 --- a/src/app/pages/admin/config.vue +++ b/src/app/pages/admin/config.vue @@ -9,14 +9,14 @@ :label="$t('general.host')" :description="$t('admin.config.hostDesc')" url="/api/admin/ip-info" - :overridden="overrides.host" + :overridden="overrides?.host" /> @@ -26,7 +26,7 @@ @@ -36,7 +36,7 @@ @@ -46,14 +46,14 @@ v-model="data.defaultMtu" :label="$t('general.mtu')" :description="$t('admin.config.mtuDesc')" - :overridden="overrides.defaultMtu" + :overridden="overrides?.defaultMtu" /> @@ -131,7 +131,7 @@ const { data: overridesData } = await useFetch(`/api/admin/overrides`, { method: 'get', }); -const overrides = computed(() => overridesData.value?.userConfig || {}); +const overrides = computed(() => overridesData.value?.userConfig); const data = toRef(_data.value); diff --git a/src/app/pages/admin/general.vue b/src/app/pages/admin/general.vue index 49a57cd0..8036e84a 100644 --- a/src/app/pages/admin/general.vue +++ b/src/app/pages/admin/general.vue @@ -7,7 +7,7 @@ v-model="data.sessionTimeout" :label="$t('admin.general.sessionTimeout')" :description="$t('admin.general.sessionTimeoutDesc')" - :overridden="overrides.sessionTimeout" + :overridden="overrides?.sessionTimeout" /> @@ -17,21 +17,21 @@ v-model="data.metricsPassword" :label="$t('admin.general.metricsPassword')" :description="$t('admin.general.metricsPasswordDesc')" - :overridden="overrides.metricsPassword" + :overridden="overrides?.metricsPassword" /> @@ -52,7 +52,7 @@ const { data: overridesData } = await useFetch(`/api/admin/overrides`, { method: 'get', }); -const overrides = computed(() => overridesData.value?.general || {}); +const overrides = computed(() => overridesData.value?.general); const data = toRef(_data.value); diff --git a/src/app/pages/admin/hooks.vue b/src/app/pages/admin/hooks.vue index 19d81bf4..e016f848 100644 --- a/src/app/pages/admin/hooks.vue +++ b/src/app/pages/admin/hooks.vue @@ -6,25 +6,25 @@ id="PreUp" v-model="data.preUp" :label="$t('hooks.preUp')" - :overridden="overrides.preUp" + :overridden="overrides?.preUp" /> @@ -45,7 +45,7 @@ const { data: overridesData } = await useFetch(`/api/admin/overrides`, { method: 'get', }); -const overrides = computed(() => overridesData.value?.hooks || {}); +const overrides = computed(() => overridesData.value?.hooks); const data = toRef(_data.value); diff --git a/src/app/pages/admin/interface.vue b/src/app/pages/admin/interface.vue index 6d5c56e4..e746d2e9 100644 --- a/src/app/pages/admin/interface.vue +++ b/src/app/pages/admin/interface.vue @@ -7,21 +7,21 @@ v-model="data.mtu" :label="$t('general.mtu')" :description="$t('admin.interface.mtuDesc')" - :overridden="overrides.mtu" + :overridden="overrides?.mtu" /> @@ -171,7 +171,7 @@ const { data: overridesData } = await useFetch(`/api/admin/overrides`, { method: 'get', }); -const overrides = computed(() => overridesData.value?.interface || {}); +const overrides = computed(() => overridesData.value?.interface); const data = toRef(_data.value); diff --git a/src/server/utils/WireGuard.ts b/src/server/utils/WireGuard.ts index 8a562660..9b9f6c42 100644 --- a/src/server/utils/WireGuard.ts +++ b/src/server/utils/WireGuard.ts @@ -13,10 +13,12 @@ class WireGuard { * Save and sync config */ async saveConfig() { - const wgInterface = await Database.interfaces.get(); - const wgInterfaceWithOverrides = applyInterfaceOverrides(wgInterface); - await this.#saveWireguardConfig(wgInterfaceWithOverrides); - await this.#syncWireguardConfig(wgInterfaceWithOverrides); + const wgInterface = applyInterfaceOverrides( + await Database.interfaces.get() + ); + + await this.#saveWireguardConfig(wgInterface); + await this.#syncWireguardConfig(wgInterface); } /** @@ -26,12 +28,11 @@ class WireGuard { */ async #saveWireguardConfig(wgInterface: InterfaceType) { const clients = await Database.clients.getAll(); - const hooks = await Database.hooks.get(); - const hooksWithOverrides = applyHooksOverrides(hooks); + const hooks = applyHooksOverrides(await Database.hooks.get()); const result = []; result.push( - wg.generateServerInterface(wgInterface, hooksWithOverrides, { + wg.generateServerInterface(wgInterface, hooks, { enableIpv6: !WG_ENV.DISABLE_IPV6, }) ); @@ -152,10 +153,12 @@ class WireGuard { } async getClientConfiguration({ clientId }: { clientId: ID }) { - const wgInterface = await Database.interfaces.get(); - const wgInterfaceWithOverrides = applyInterfaceOverrides(wgInterface); - const userConfig = await Database.userConfigs.get(); - const userConfigWithOverrides = applyUserConfigOverrides(userConfig); + const wgInterface = applyInterfaceOverrides( + await Database.interfaces.get() + ); + const userConfig = applyUserConfigOverrides( + await Database.userConfigs.get() + ); const client = await Database.clients.get(clientId); @@ -163,14 +166,9 @@ class WireGuard { throw new Error('Client not found'); } - return wg.generateClientConfig( - wgInterfaceWithOverrides, - userConfigWithOverrides, - client, - { - enableIpv6: !WG_ENV.DISABLE_IPV6, - } - ); + return wg.generateClientConfig(wgInterface, userConfig, client, { + enableIpv6: !WG_ENV.DISABLE_IPV6, + }); } async getClientQRCodeSVG({ clientId }: { clientId: ID }) { @@ -271,12 +269,16 @@ class WireGuard { // Shutdown wireguard async Shutdown() { - const wgInterface = await Database.interfaces.get(); + const wgInterface = applyInterfaceOverrides( + await Database.interfaces.get() + ); await wg.down(wgInterface.name).catch(() => {}); } async Restart() { - const wgInterface = await Database.interfaces.get(); + const wgInterface = applyInterfaceOverrides( + await Database.interfaces.get() + ); await wg.restart(wgInterface.name); } diff --git a/src/server/utils/config.ts b/src/server/utils/config.ts index a961148c..3f5081ae 100644 --- a/src/server/utils/config.ts +++ b/src/server/utils/config.ts @@ -189,25 +189,32 @@ export function applyUserConfigOverrides< /** * Apply environment variable overrides to a general config object */ -export function applyGeneralOverrides< +export function applySessionOverrides< T extends { sessionTimeout: number; - metricsPassword: string | null; - metricsPrometheus: boolean; - metricsJson: boolean; }, >(generalConfig: T): T { return { ...generalConfig, sessionTimeout: WG_GENERAL_OVERRIDE_ENV.SESSION_TIMEOUT ?? generalConfig.sessionTimeout, - metricsPassword: - WG_GENERAL_OVERRIDE_ENV.METRICS_PASSWORD ?? generalConfig.metricsPassword, - metricsPrometheus: - WG_GENERAL_OVERRIDE_ENV.METRICS_PROMETHEUS ?? - generalConfig.metricsPrometheus, - metricsJson: - WG_GENERAL_OVERRIDE_ENV.METRICS_JSON ?? generalConfig.metricsJson, + }; +} + +export function applyMetricsOverrides< + T extends { + password: string | null; + prometheus: boolean; + json: boolean; + }, +>(metricsConfig: T): T { + return { + ...metricsConfig, + password: + WG_GENERAL_OVERRIDE_ENV.METRICS_PASSWORD ?? metricsConfig.password, + prometheus: + WG_GENERAL_OVERRIDE_ENV.METRICS_PROMETHEUS ?? metricsConfig.prometheus, + json: WG_GENERAL_OVERRIDE_ENV.METRICS_JSON ?? metricsConfig.json, }; } diff --git a/src/server/utils/handler.ts b/src/server/utils/handler.ts index 5f0baa08..ca26b69a 100644 --- a/src/server/utils/handler.ts +++ b/src/server/utils/handler.ts @@ -138,7 +138,9 @@ export const defineMetricsHandler = < handler: MetricsHandler ) => { return defineEventHandler(async (event) => { - const metricsConfig = await Database.general.getMetricsConfig(); + const metricsConfig = applyMetricsOverrides( + await Database.general.getMetricsConfig() + ); if (metricsConfig.password) { const auth = getHeader(event, 'Authorization'); diff --git a/src/server/utils/session.ts b/src/server/utils/session.ts index 1a144cea..c690d038 100644 --- a/src/server/utils/session.ts +++ b/src/server/utils/session.ts @@ -8,7 +8,10 @@ export type WGSession = Partial<{ const name = 'wg-easy'; export async function useWGSession(event: H3Event, rememberMe = false) { - const sessionConfig = await Database.general.getSessionConfig(); + const sessionConfig = applySessionOverrides( + await Database.general.getSessionConfig() + ); + return useSession(event, { password: sessionConfig.sessionPassword, name, @@ -22,7 +25,10 @@ export async function useWGSession(event: H3Event, rememberMe = false) { } export async function getWGSession(event: H3Event) { - const sessionConfig = await Database.general.getSessionConfig(); + const sessionConfig = applySessionOverrides( + await Database.general.getSessionConfig() + ); + return getSession(event, { password: sessionConfig.sessionPassword, name,