diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2024-04-09 08:03:57 +0200 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2024-04-11 17:21:23 +0200 |
| commit | c4d6f31c41d19133f8e23701de487846cc7ec362 (patch) | |
| tree | 3c56053d9040e4870d6b8f5b2d631a11807dc210 | |
| parent | ea2c847d41183eed302c1c9994a06bd55454e252 (diff) | |
| download | mullvadvpn-c4d6f31c41d19133f8e23701de487846cc7ec362.tar.xz mullvadvpn-c4d6f31c41d19133f8e23701de487846cc7ec362.zip | |
Add bridge settings updater functions
| -rw-r--r-- | gui/src/renderer/lib/constraint-updater.ts | 77 |
1 files changed, 73 insertions, 4 deletions
diff --git a/gui/src/renderer/lib/constraint-updater.ts b/gui/src/renderer/lib/constraint-updater.ts index 054f063465..73fbdd1336 100644 --- a/gui/src/renderer/lib/constraint-updater.ts +++ b/gui/src/renderer/lib/constraint-updater.ts @@ -1,6 +1,8 @@ import { useCallback } from 'react'; import { + BridgeSettings, + IBridgeConstraints, IOpenVpnConstraints, IRelaySettingsNormal, IWireguardConstraints, @@ -8,7 +10,12 @@ import { wrapConstraint, } from '../../shared/daemon-rpc-types'; import { useAppContext } from '../context'; -import { NormalRelaySettingsRedux } from '../redux/settings/reducers'; +import { + BridgeSettingsRedux, + NormalBridgeSettingsRedux, + NormalRelaySettingsRedux, +} from '../redux/settings/reducers'; +import { useSelector } from '../redux/store'; import { useNormalRelaySettings } from './utilityHooks'; export function wrapRelaySettingsOrDefault( @@ -59,7 +66,7 @@ export function wrapRelaySettingsOrDefault( }; } -type UpdateFunction = ( +type RelaySettingsUpdateFunction = ( settings: IRelaySettingsNormal<IOpenVpnConstraints, IWireguardConstraints>, ) => IRelaySettingsNormal<IOpenVpnConstraints, IWireguardConstraints>; @@ -67,7 +74,7 @@ export function useRelaySettingsModifier() { const relaySettings = useNormalRelaySettings(); return useCallback( - (fn: UpdateFunction) => { + (fn: RelaySettingsUpdateFunction) => { const settings = wrapRelaySettingsOrDefault(relaySettings); return fn(settings); }, @@ -80,10 +87,72 @@ export function useRelaySettingsUpdater() { const modifyRelaySettings = useRelaySettingsModifier(); return useCallback( - async (fn: UpdateFunction) => { + async (fn: RelaySettingsUpdateFunction) => { const modifiedSettings = modifyRelaySettings(fn); await setRelaySettings({ normal: modifiedSettings }); }, [setRelaySettings, modifyRelaySettings], ); } + +export function wrapBridgeSettingsOrDefault(bridgeSettings?: BridgeSettingsRedux): BridgeSettings { + if (bridgeSettings) { + return { + type: bridgeSettings.type, + normal: wrapNormalBridgeSettingsOrDefault(bridgeSettings.normal), + custom: bridgeSettings.custom, + }; + } + + return { + type: 'normal', + normal: wrapNormalBridgeSettingsOrDefault(), + }; +} + +function wrapNormalBridgeSettingsOrDefault( + bridgeSettings?: NormalBridgeSettingsRedux, +): IBridgeConstraints { + if (bridgeSettings) { + const location = wrapConstraint(bridgeSettings.location); + + return { + location, + providers: [...bridgeSettings.providers], + ownership: bridgeSettings.ownership, + }; + } + + return { + location: 'any', + providers: [], + ownership: Ownership.any, + }; +} + +type BridgeSettingsUpdateFunction = (settings: BridgeSettings) => BridgeSettings; + +export function useBridgeSettingsModifier() { + const bridgeSettings = useSelector((state) => state.settings.bridgeSettings); + + return useCallback( + (fn: BridgeSettingsUpdateFunction) => { + const settings = wrapBridgeSettingsOrDefault(bridgeSettings); + return fn(settings); + }, + [bridgeSettings], + ); +} + +export function useBridgeSettingsUpdater() { + const { updateBridgeSettings } = useAppContext(); + const modifyBridgeSettings = useBridgeSettingsModifier(); + + return useCallback( + async (fn: BridgeSettingsUpdateFunction) => { + const modifiedSettings = modifyBridgeSettings(fn); + await updateBridgeSettings(modifiedSettings); + }, + [updateBridgeSettings, modifyBridgeSettings], + ); +} |
