diff --git a/docs/content/advanced/config/optional-config.md b/docs/content/advanced/config/optional-config.md index 967e64a0..436703e1 100644 --- a/docs/content/advanced/config/optional-config.md +++ b/docs/content/advanced/config/optional-config.md @@ -51,6 +51,7 @@ These environment variables allow you to override settings that would normally b | Env | Example | Description | | ----------------------- | ----------------- | ------------------------- | | `WG_SESSION_TIMEOUT` | `3600` | Session timeout (seconds) | +| `WG_METRICS_PASSWORD` | `mypassword123` | Metrics endpoint password | | `WG_METRICS_PROMETHEUS` | `true` or `false` | Enable Prometheus metrics | | `WG_METRICS_JSON` | `true` or `false` | Enable JSON metrics | diff --git a/src/app/components/Form/ArrayField.vue b/src/app/components/Form/ArrayField.vue index 497949ca..745e2414 100644 --- a/src/app/components/Form/ArrayField.vue +++ b/src/app/components/Form/ArrayField.vue @@ -1,5 +1,9 @@ diff --git a/src/app/components/Form/TextField.vue b/src/app/components/Form/TextField.vue index e62de448..3c442f62 100644 --- a/src/app/components/Form/TextField.vue +++ b/src/app/components/Form/TextField.vue @@ -6,6 +6,9 @@ + + + (); const data = defineModel(); diff --git a/src/app/pages/admin/config.vue b/src/app/pages/admin/config.vue index 40146ae2..84e7e0e6 100644 --- a/src/app/pages/admin/config.vue +++ b/src/app/pages/admin/config.vue @@ -9,12 +9,14 @@ :label="$t('general.host')" :description="$t('admin.config.hostDesc')" url="/api/admin/ip-info" + :overridden="overrides.host" /> @@ -24,13 +26,18 @@ {{ $t('general.dns') }} - + {{ $t('form.sectionAdvanced') }} @@ -39,12 +46,14 @@ v-model="data.defaultMtu" :label="$t('general.mtu')" :description="$t('admin.config.mtuDesc')" + :overridden="overrides.defaultMtu" /> @@ -118,6 +127,12 @@ const { data: _data, refresh } = await useFetch(`/api/admin/userconfig`, { method: 'get', }); +const { data: overridesData } = await useFetch(`/api/admin/overrides`, { + method: 'get', +}); + +const overrides = computed(() => overridesData.value?.userConfig || {}); + const data = toRef(_data.value); const _submit = useSubmit( diff --git a/src/app/pages/admin/general.vue b/src/app/pages/admin/general.vue index 9515e456..49a57cd0 100644 --- a/src/app/pages/admin/general.vue +++ b/src/app/pages/admin/general.vue @@ -7,6 +7,7 @@ v-model="data.sessionTimeout" :label="$t('admin.general.sessionTimeout')" :description="$t('admin.general.sessionTimeoutDesc')" + :overridden="overrides.sessionTimeout" /> @@ -16,18 +17,21 @@ v-model="data.metricsPassword" :label="$t('admin.general.metricsPassword')" :description="$t('admin.general.metricsPasswordDesc')" + :overridden="overrides.metricsPassword" /> @@ -43,6 +47,13 @@ const { data: _data, refresh } = await useFetch(`/api/admin/general`, { method: 'get', }); + +const { data: overridesData } = await useFetch(`/api/admin/overrides`, { + method: 'get', +}); + +const overrides = computed(() => overridesData.value?.general || {}); + const data = toRef(_data.value); const _submit = useSubmit( diff --git a/src/app/pages/admin/hooks.vue b/src/app/pages/admin/hooks.vue index b8dda4b6..19d81bf4 100644 --- a/src/app/pages/admin/hooks.vue +++ b/src/app/pages/admin/hooks.vue @@ -6,21 +6,25 @@ id="PreUp" v-model="data.preUp" :label="$t('hooks.preUp')" + :overridden="overrides.preUp" /> @@ -37,6 +41,12 @@ const { data: _data, refresh } = await useFetch(`/api/admin/hooks`, { method: 'get', }); +const { data: overridesData } = await useFetch(`/api/admin/overrides`, { + method: 'get', +}); + +const overrides = computed(() => overridesData.value?.hooks || {}); + const data = toRef(_data.value); const _submit = useSubmit( diff --git a/src/app/pages/admin/interface.vue b/src/app/pages/admin/interface.vue index fd4d7eeb..6d5c56e4 100644 --- a/src/app/pages/admin/interface.vue +++ b/src/app/pages/admin/interface.vue @@ -7,18 +7,21 @@ v-model="data.mtu" :label="$t('general.mtu')" :description="$t('admin.interface.mtuDesc')" + :overridden="overrides.mtu" /> @@ -164,6 +167,12 @@ const { data: _data, refresh } = await useFetch(`/api/admin/interface`, { method: 'get', }); +const { data: overridesData } = await useFetch(`/api/admin/overrides`, { + method: 'get', +}); + +const overrides = computed(() => overridesData.value?.interface || {}); + const data = toRef(_data.value); const _submit = useSubmit( diff --git a/src/server/api/admin/overrides.get.ts b/src/server/api/admin/overrides.get.ts index ae3b2ef0..45e3bbce 100644 --- a/src/server/api/admin/overrides.get.ts +++ b/src/server/api/admin/overrides.get.ts @@ -17,6 +17,7 @@ export default definePermissionEventHandler('admin', 'any', async () => { }, general: { sessionTimeout: WG_GENERAL_OVERRIDE_ENV.SESSION_TIMEOUT !== undefined, + metricsPassword: WG_GENERAL_OVERRIDE_ENV.METRICS_PASSWORD !== undefined, metricsPrometheus: WG_GENERAL_OVERRIDE_ENV.METRICS_PROMETHEUS !== undefined, metricsJson: WG_GENERAL_OVERRIDE_ENV.METRICS_JSON !== undefined, }, diff --git a/src/server/utils/config.ts b/src/server/utils/config.ts index 0a8e29fd..0eb3bd1b 100644 --- a/src/server/utils/config.ts +++ b/src/server/utils/config.ts @@ -97,6 +97,8 @@ export const WG_GENERAL_OVERRIDE_ENV = { SESSION_TIMEOUT: process.env.WG_SESSION_TIMEOUT ? Number.parseInt(process.env.WG_SESSION_TIMEOUT, 10) : undefined, + /** Override metrics password */ + METRICS_PASSWORD: process.env.WG_METRICS_PASSWORD, /** Override metrics Prometheus enabled status */ METRICS_PROMETHEUS: process.env.WG_METRICS_PROMETHEUS === 'true' ? true : process.env.WG_METRICS_PROMETHEUS === 'false' ? false : @@ -165,11 +167,12 @@ export function applyUserConfigOverrides< * Apply environment variable overrides to a general config object */ export function applyGeneralOverrides< - T extends { sessionTimeout: number; metricsPrometheus: boolean; metricsJson: boolean }, + 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, };