fixes
This commit is contained in:
@@ -9,14 +9,14 @@
|
|||||||
:label="$t('general.host')"
|
:label="$t('general.host')"
|
||||||
:description="$t('admin.config.hostDesc')"
|
:description="$t('admin.config.hostDesc')"
|
||||||
url="/api/admin/ip-info"
|
url="/api/admin/ip-info"
|
||||||
:overridden="overrides.host"
|
:overridden="overrides?.host"
|
||||||
/>
|
/>
|
||||||
<FormNumberField
|
<FormNumberField
|
||||||
id="port"
|
id="port"
|
||||||
v-model="data.port"
|
v-model="data.port"
|
||||||
:label="$t('general.port')"
|
:label="$t('general.port')"
|
||||||
:description="$t('admin.config.portDesc')"
|
:description="$t('admin.config.portDesc')"
|
||||||
:overridden="overrides.port"
|
:overridden="overrides?.port"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<FormArrayField
|
<FormArrayField
|
||||||
v-model="data.defaultAllowedIps"
|
v-model="data.defaultAllowedIps"
|
||||||
name="defaultAllowedIps"
|
name="defaultAllowedIps"
|
||||||
:overridden="overrides.defaultAllowedIps"
|
:overridden="overrides?.defaultAllowedIps"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
<FormArrayField
|
<FormArrayField
|
||||||
v-model="data.defaultDns"
|
v-model="data.defaultDns"
|
||||||
name="defaultDns"
|
name="defaultDns"
|
||||||
:overridden="overrides.defaultDns"
|
:overridden="overrides?.defaultDns"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
@@ -46,14 +46,14 @@
|
|||||||
v-model="data.defaultMtu"
|
v-model="data.defaultMtu"
|
||||||
:label="$t('general.mtu')"
|
:label="$t('general.mtu')"
|
||||||
:description="$t('admin.config.mtuDesc')"
|
:description="$t('admin.config.mtuDesc')"
|
||||||
:overridden="overrides.defaultMtu"
|
:overridden="overrides?.defaultMtu"
|
||||||
/>
|
/>
|
||||||
<FormNumberField
|
<FormNumberField
|
||||||
id="defaultPersistentKeepalive"
|
id="defaultPersistentKeepalive"
|
||||||
v-model="data.defaultPersistentKeepalive"
|
v-model="data.defaultPersistentKeepalive"
|
||||||
:label="$t('general.persistentKeepalive')"
|
:label="$t('general.persistentKeepalive')"
|
||||||
:description="$t('admin.config.persistentKeepaliveDesc')"
|
:description="$t('admin.config.persistentKeepaliveDesc')"
|
||||||
:overridden="overrides.defaultPersistentKeepalive"
|
:overridden="overrides?.defaultPersistentKeepalive"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup v-if="globalStore.information?.isAwg">
|
<FormGroup v-if="globalStore.information?.isAwg">
|
||||||
@@ -131,7 +131,7 @@ const { data: overridesData } = await useFetch(`/api/admin/overrides`, {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
|
|
||||||
const overrides = computed(() => overridesData.value?.userConfig || {});
|
const overrides = computed(() => overridesData.value?.userConfig);
|
||||||
|
|
||||||
const data = toRef(_data.value);
|
const data = toRef(_data.value);
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
v-model="data.sessionTimeout"
|
v-model="data.sessionTimeout"
|
||||||
:label="$t('admin.general.sessionTimeout')"
|
:label="$t('admin.general.sessionTimeout')"
|
||||||
:description="$t('admin.general.sessionTimeoutDesc')"
|
:description="$t('admin.general.sessionTimeoutDesc')"
|
||||||
:overridden="overrides.sessionTimeout"
|
:overridden="overrides?.sessionTimeout"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
@@ -17,21 +17,21 @@
|
|||||||
v-model="data.metricsPassword"
|
v-model="data.metricsPassword"
|
||||||
:label="$t('admin.general.metricsPassword')"
|
:label="$t('admin.general.metricsPassword')"
|
||||||
:description="$t('admin.general.metricsPasswordDesc')"
|
:description="$t('admin.general.metricsPasswordDesc')"
|
||||||
:overridden="overrides.metricsPassword"
|
:overridden="overrides?.metricsPassword"
|
||||||
/>
|
/>
|
||||||
<FormSwitchField
|
<FormSwitchField
|
||||||
id="prometheus"
|
id="prometheus"
|
||||||
v-model="data.metricsPrometheus"
|
v-model="data.metricsPrometheus"
|
||||||
:label="$t('admin.general.prometheus')"
|
:label="$t('admin.general.prometheus')"
|
||||||
:description="$t('admin.general.prometheusDesc')"
|
:description="$t('admin.general.prometheusDesc')"
|
||||||
:overridden="overrides.metricsPrometheus"
|
:overridden="overrides?.metricsPrometheus"
|
||||||
/>
|
/>
|
||||||
<FormSwitchField
|
<FormSwitchField
|
||||||
id="json"
|
id="json"
|
||||||
v-model="data.metricsJson"
|
v-model="data.metricsJson"
|
||||||
:label="$t('admin.general.json')"
|
:label="$t('admin.general.json')"
|
||||||
:description="$t('admin.general.jsonDesc')"
|
:description="$t('admin.general.jsonDesc')"
|
||||||
:overridden="overrides.metricsJson"
|
:overridden="overrides?.metricsJson"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
@@ -52,7 +52,7 @@ const { data: overridesData } = await useFetch(`/api/admin/overrides`, {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
|
|
||||||
const overrides = computed(() => overridesData.value?.general || {});
|
const overrides = computed(() => overridesData.value?.general);
|
||||||
|
|
||||||
const data = toRef(_data.value);
|
const data = toRef(_data.value);
|
||||||
|
|
||||||
|
|||||||
@@ -6,25 +6,25 @@
|
|||||||
id="PreUp"
|
id="PreUp"
|
||||||
v-model="data.preUp"
|
v-model="data.preUp"
|
||||||
:label="$t('hooks.preUp')"
|
:label="$t('hooks.preUp')"
|
||||||
:overridden="overrides.preUp"
|
:overridden="overrides?.preUp"
|
||||||
/>
|
/>
|
||||||
<FormTextField
|
<FormTextField
|
||||||
id="PostUp"
|
id="PostUp"
|
||||||
v-model="data.postUp"
|
v-model="data.postUp"
|
||||||
:label="$t('hooks.postUp')"
|
:label="$t('hooks.postUp')"
|
||||||
:overridden="overrides.postUp"
|
:overridden="overrides?.postUp"
|
||||||
/>
|
/>
|
||||||
<FormTextField
|
<FormTextField
|
||||||
id="PreDown"
|
id="PreDown"
|
||||||
v-model="data.preDown"
|
v-model="data.preDown"
|
||||||
:label="$t('hooks.preDown')"
|
:label="$t('hooks.preDown')"
|
||||||
:overridden="overrides.preDown"
|
:overridden="overrides?.preDown"
|
||||||
/>
|
/>
|
||||||
<FormTextField
|
<FormTextField
|
||||||
id="PostDown"
|
id="PostDown"
|
||||||
v-model="data.postDown"
|
v-model="data.postDown"
|
||||||
:label="$t('hooks.postDown')"
|
:label="$t('hooks.postDown')"
|
||||||
:overridden="overrides.postDown"
|
:overridden="overrides?.postDown"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
@@ -45,7 +45,7 @@ const { data: overridesData } = await useFetch(`/api/admin/overrides`, {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
|
|
||||||
const overrides = computed(() => overridesData.value?.hooks || {});
|
const overrides = computed(() => overridesData.value?.hooks);
|
||||||
|
|
||||||
const data = toRef(_data.value);
|
const data = toRef(_data.value);
|
||||||
|
|
||||||
|
|||||||
@@ -7,21 +7,21 @@
|
|||||||
v-model="data.mtu"
|
v-model="data.mtu"
|
||||||
:label="$t('general.mtu')"
|
:label="$t('general.mtu')"
|
||||||
:description="$t('admin.interface.mtuDesc')"
|
:description="$t('admin.interface.mtuDesc')"
|
||||||
:overridden="overrides.mtu"
|
:overridden="overrides?.mtu"
|
||||||
/>
|
/>
|
||||||
<FormNumberField
|
<FormNumberField
|
||||||
id="port"
|
id="port"
|
||||||
v-model="data.port"
|
v-model="data.port"
|
||||||
:label="$t('general.port')"
|
:label="$t('general.port')"
|
||||||
:description="$t('admin.interface.portDesc')"
|
:description="$t('admin.interface.portDesc')"
|
||||||
:overridden="overrides.port"
|
:overridden="overrides?.port"
|
||||||
/>
|
/>
|
||||||
<FormTextField
|
<FormTextField
|
||||||
id="device"
|
id="device"
|
||||||
v-model="data.device"
|
v-model="data.device"
|
||||||
:label="$t('admin.interface.device')"
|
:label="$t('admin.interface.device')"
|
||||||
:description="$t('admin.interface.deviceDesc')"
|
:description="$t('admin.interface.deviceDesc')"
|
||||||
:overridden="overrides.device"
|
:overridden="overrides?.device"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup v-if="globalStore.information?.isAwg">
|
<FormGroup v-if="globalStore.information?.isAwg">
|
||||||
@@ -171,7 +171,7 @@ const { data: overridesData } = await useFetch(`/api/admin/overrides`, {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
|
|
||||||
const overrides = computed(() => overridesData.value?.interface || {});
|
const overrides = computed(() => overridesData.value?.interface);
|
||||||
|
|
||||||
const data = toRef(_data.value);
|
const data = toRef(_data.value);
|
||||||
|
|
||||||
|
|||||||
@@ -13,10 +13,12 @@ class WireGuard {
|
|||||||
* Save and sync config
|
* Save and sync config
|
||||||
*/
|
*/
|
||||||
async saveConfig() {
|
async saveConfig() {
|
||||||
const wgInterface = await Database.interfaces.get();
|
const wgInterface = applyInterfaceOverrides(
|
||||||
const wgInterfaceWithOverrides = applyInterfaceOverrides(wgInterface);
|
await Database.interfaces.get()
|
||||||
await this.#saveWireguardConfig(wgInterfaceWithOverrides);
|
);
|
||||||
await this.#syncWireguardConfig(wgInterfaceWithOverrides);
|
|
||||||
|
await this.#saveWireguardConfig(wgInterface);
|
||||||
|
await this.#syncWireguardConfig(wgInterface);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,12 +28,11 @@ class WireGuard {
|
|||||||
*/
|
*/
|
||||||
async #saveWireguardConfig(wgInterface: InterfaceType) {
|
async #saveWireguardConfig(wgInterface: InterfaceType) {
|
||||||
const clients = await Database.clients.getAll();
|
const clients = await Database.clients.getAll();
|
||||||
const hooks = await Database.hooks.get();
|
const hooks = applyHooksOverrides(await Database.hooks.get());
|
||||||
const hooksWithOverrides = applyHooksOverrides(hooks);
|
|
||||||
|
|
||||||
const result = [];
|
const result = [];
|
||||||
result.push(
|
result.push(
|
||||||
wg.generateServerInterface(wgInterface, hooksWithOverrides, {
|
wg.generateServerInterface(wgInterface, hooks, {
|
||||||
enableIpv6: !WG_ENV.DISABLE_IPV6,
|
enableIpv6: !WG_ENV.DISABLE_IPV6,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@@ -152,10 +153,12 @@ class WireGuard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getClientConfiguration({ clientId }: { clientId: ID }) {
|
async getClientConfiguration({ clientId }: { clientId: ID }) {
|
||||||
const wgInterface = await Database.interfaces.get();
|
const wgInterface = applyInterfaceOverrides(
|
||||||
const wgInterfaceWithOverrides = applyInterfaceOverrides(wgInterface);
|
await Database.interfaces.get()
|
||||||
const userConfig = await Database.userConfigs.get();
|
);
|
||||||
const userConfigWithOverrides = applyUserConfigOverrides(userConfig);
|
const userConfig = applyUserConfigOverrides(
|
||||||
|
await Database.userConfigs.get()
|
||||||
|
);
|
||||||
|
|
||||||
const client = await Database.clients.get(clientId);
|
const client = await Database.clients.get(clientId);
|
||||||
|
|
||||||
@@ -163,14 +166,9 @@ class WireGuard {
|
|||||||
throw new Error('Client not found');
|
throw new Error('Client not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
return wg.generateClientConfig(
|
return wg.generateClientConfig(wgInterface, userConfig, client, {
|
||||||
wgInterfaceWithOverrides,
|
enableIpv6: !WG_ENV.DISABLE_IPV6,
|
||||||
userConfigWithOverrides,
|
});
|
||||||
client,
|
|
||||||
{
|
|
||||||
enableIpv6: !WG_ENV.DISABLE_IPV6,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async getClientQRCodeSVG({ clientId }: { clientId: ID }) {
|
async getClientQRCodeSVG({ clientId }: { clientId: ID }) {
|
||||||
@@ -271,12 +269,16 @@ class WireGuard {
|
|||||||
|
|
||||||
// Shutdown wireguard
|
// Shutdown wireguard
|
||||||
async Shutdown() {
|
async Shutdown() {
|
||||||
const wgInterface = await Database.interfaces.get();
|
const wgInterface = applyInterfaceOverrides(
|
||||||
|
await Database.interfaces.get()
|
||||||
|
);
|
||||||
await wg.down(wgInterface.name).catch(() => {});
|
await wg.down(wgInterface.name).catch(() => {});
|
||||||
}
|
}
|
||||||
|
|
||||||
async Restart() {
|
async Restart() {
|
||||||
const wgInterface = await Database.interfaces.get();
|
const wgInterface = applyInterfaceOverrides(
|
||||||
|
await Database.interfaces.get()
|
||||||
|
);
|
||||||
await wg.restart(wgInterface.name);
|
await wg.restart(wgInterface.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-11
@@ -189,25 +189,32 @@ export function applyUserConfigOverrides<
|
|||||||
/**
|
/**
|
||||||
* Apply environment variable overrides to a general config object
|
* Apply environment variable overrides to a general config object
|
||||||
*/
|
*/
|
||||||
export function applyGeneralOverrides<
|
export function applySessionOverrides<
|
||||||
T extends {
|
T extends {
|
||||||
sessionTimeout: number;
|
sessionTimeout: number;
|
||||||
metricsPassword: string | null;
|
|
||||||
metricsPrometheus: boolean;
|
|
||||||
metricsJson: boolean;
|
|
||||||
},
|
},
|
||||||
>(generalConfig: T): T {
|
>(generalConfig: T): T {
|
||||||
return {
|
return {
|
||||||
...generalConfig,
|
...generalConfig,
|
||||||
sessionTimeout:
|
sessionTimeout:
|
||||||
WG_GENERAL_OVERRIDE_ENV.SESSION_TIMEOUT ?? 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 ??
|
export function applyMetricsOverrides<
|
||||||
generalConfig.metricsPrometheus,
|
T extends {
|
||||||
metricsJson:
|
password: string | null;
|
||||||
WG_GENERAL_OVERRIDE_ENV.METRICS_JSON ?? generalConfig.metricsJson,
|
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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -138,7 +138,9 @@ export const defineMetricsHandler = <
|
|||||||
handler: MetricsHandler<TReq, TRes>
|
handler: MetricsHandler<TReq, TRes>
|
||||||
) => {
|
) => {
|
||||||
return defineEventHandler(async (event) => {
|
return defineEventHandler(async (event) => {
|
||||||
const metricsConfig = await Database.general.getMetricsConfig();
|
const metricsConfig = applyMetricsOverrides(
|
||||||
|
await Database.general.getMetricsConfig()
|
||||||
|
);
|
||||||
|
|
||||||
if (metricsConfig.password) {
|
if (metricsConfig.password) {
|
||||||
const auth = getHeader(event, 'Authorization');
|
const auth = getHeader(event, 'Authorization');
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ export type WGSession = Partial<{
|
|||||||
const name = 'wg-easy';
|
const name = 'wg-easy';
|
||||||
|
|
||||||
export async function useWGSession(event: H3Event, rememberMe = false) {
|
export async function useWGSession(event: H3Event, rememberMe = false) {
|
||||||
const sessionConfig = await Database.general.getSessionConfig();
|
const sessionConfig = applySessionOverrides(
|
||||||
|
await Database.general.getSessionConfig()
|
||||||
|
);
|
||||||
|
|
||||||
return useSession<WGSession>(event, {
|
return useSession<WGSession>(event, {
|
||||||
password: sessionConfig.sessionPassword,
|
password: sessionConfig.sessionPassword,
|
||||||
name,
|
name,
|
||||||
@@ -22,7 +25,10 @@ export async function useWGSession(event: H3Event, rememberMe = false) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getWGSession(event: H3Event) {
|
export async function getWGSession(event: H3Event) {
|
||||||
const sessionConfig = await Database.general.getSessionConfig();
|
const sessionConfig = applySessionOverrides(
|
||||||
|
await Database.general.getSessionConfig()
|
||||||
|
);
|
||||||
|
|
||||||
return getSession<WGSession>(event, {
|
return getSession<WGSession>(event, {
|
||||||
password: sessionConfig.sessionPassword,
|
password: sessionConfig.sessionPassword,
|
||||||
name,
|
name,
|
||||||
|
|||||||
Reference in New Issue
Block a user