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,