diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-10-31 15:24:22 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-10-31 15:24:22 +0100 |
| commit | f073ef8c37ecc4a0cd3d4525ed3bc310cfd2f7e0 (patch) | |
| tree | f817e43aa5b924bf1b56aeb03e941913fa35e339 /gui/src/main | |
| parent | 9b33f4440fd35d01eea663df5de7d83f65d96918 (diff) | |
| parent | 3cedaf529da04bbd25fee4829fad4cc0ae2f561f (diff) | |
| download | mullvadvpn-f073ef8c37ecc4a0cd3d4525ed3bc310cfd2f7e0.tar.xz mullvadvpn-f073ef8c37ecc4a0cd3d4525ed3bc310cfd2f7e0.zip | |
Merge branch 'refactor-relay-settings-update' into main
Diffstat (limited to 'gui/src/main')
| -rw-r--r-- | gui/src/main/daemon-rpc.ts | 80 | ||||
| -rw-r--r-- | gui/src/main/settings.ts | 4 |
2 files changed, 34 insertions, 50 deletions
diff --git a/gui/src/main/daemon-rpc.ts b/gui/src/main/daemon-rpc.ts index 288bbfd7fc..65ad96519c 100644 --- a/gui/src/main/daemon-rpc.ts +++ b/gui/src/main/daemon-rpc.ts @@ -41,6 +41,7 @@ import { IRelayListCountry, IRelayListHostname, IRelayListWithEndpointData, + IRelaySettingsNormal, ISettings, ITunnelOptions, ITunnelStateRelayInfo, @@ -58,12 +59,12 @@ import { RelayLocationGeographical, RelayProtocol, RelaySettings, - RelaySettingsUpdate, TunnelParameterError, TunnelProtocol, TunnelState, TunnelType, VoucherResponse, + wrapConstraint, } from '../shared/daemon-rpc-types'; import log from '../shared/logging'; import { ManagementServiceClient } from './management_interface/management_interface_grpc_pb'; @@ -297,52 +298,14 @@ export class DaemonRpc { } // TODO: Custom tunnel configurations are not supported by the GUI. - public async updateRelaySettings(relaySettings: RelaySettingsUpdate): Promise<void> { + public async setRelaySettings(relaySettings: RelaySettings): Promise<void> { if ('normal' in relaySettings) { - const settingsUpdate = relaySettings.normal; - const grpcRelaySettings = new grpcTypes.RelaySettingsUpdate(); + const normalSettings = relaySettings.normal; + const grpcRelaySettings = new grpcTypes.RelaySettings(); + grpcRelaySettings.setNormal(convertToRelayConstraints(normalSettings)); - const normalUpdate = new grpcTypes.NormalRelaySettingsUpdate(); - - if (settingsUpdate.tunnelProtocol) { - const tunnelTypeUpdate = new grpcTypes.TunnelTypeUpdate(); - if (settingsUpdate.tunnelProtocol !== 'any') { - tunnelTypeUpdate.setTunnelType(convertToTunnelType(settingsUpdate.tunnelProtocol.only)); - } - normalUpdate.setTunnelType(tunnelTypeUpdate); - } - - if (settingsUpdate.location) { - normalUpdate.setLocation(convertToLocation(liftConstraint(settingsUpdate.location))); - } - - if (settingsUpdate.wireguardConstraints) { - normalUpdate.setWireguardConstraints( - convertToWireguardConstraints(settingsUpdate.wireguardConstraints), - ); - } - - if (settingsUpdate.openvpnConstraints) { - normalUpdate.setOpenvpnConstraints( - convertToOpenVpnConstraints(settingsUpdate.openvpnConstraints), - ); - } - - if (settingsUpdate.providers) { - const providerUpdate = new grpcTypes.ProviderUpdate(); - providerUpdate.setProvidersList(settingsUpdate.providers); - normalUpdate.setProviders(providerUpdate); - } - - if (settingsUpdate.ownership !== undefined) { - const ownershipUpdate = new grpcTypes.OwnershipUpdate(); - ownershipUpdate.setOwnership(convertToOwnership(settingsUpdate.ownership)); - normalUpdate.setOwnership(ownershipUpdate); - } - - grpcRelaySettings.setNormal(normalUpdate); - await this.call<grpcTypes.RelaySettingsUpdate, Empty>( - this.client.updateRelaySettings, + await this.call<grpcTypes.RelaySettings, Empty>( + this.client.setRelaySettings, grpcRelaySettings, ); } @@ -1148,7 +1111,7 @@ function convertFromRelaySettings( case grpcTypes.RelaySettings.EndpointCase.NORMAL: { const normal = relaySettings.getNormal()!; const locationConstraint = convertFromLocationConstraint(normal.getLocation()); - const location = locationConstraint ? { only: locationConstraint } : 'any'; + const location = wrapConstraint(locationConstraint); // `getTunnelType()` is not falsy if type is 'any' const tunnelProtocol = convertFromTunnelTypeConstraint( normal.hasTunnelType() ? normal.getTunnelType() : undefined, @@ -1184,7 +1147,7 @@ function convertFromBridgeSettings(bridgeSettings: grpcTypes.BridgeSettings): Br const locationConstraint = convertFromLocationConstraint( bridgeSettings.getNormal()?.getLocation(), ); - const location = locationConstraint ? { only: locationConstraint } : 'any'; + const location = wrapConstraint(locationConstraint); const providers = normalSettings.providersList; const ownership = convertFromOwnership(normalSettings.ownership); return { @@ -1475,7 +1438,7 @@ function convertFromWireguardConstraints( const entryLocation = constraints.getEntryLocation(); if (entryLocation) { const location = convertFromLocationConstraint(entryLocation); - result.entryLocation = location ? { only: location } : 'any'; + result.entryLocation = wrapConstraint(location); } return result; @@ -1505,6 +1468,27 @@ function convertFromConstraint<T>(value: T | undefined): Constraint<T> { } } +function convertToRelayConstraints( + constraints: IRelaySettingsNormal<IOpenVpnConstraints, IWireguardConstraints>, +): grpcTypes.NormalRelaySettings { + const relayConstraints = new grpcTypes.NormalRelaySettings(); + + if (constraints.tunnelProtocol !== 'any') { + relayConstraints.setTunnelType(convertToTunnelType(constraints.tunnelProtocol.only)); + } + relayConstraints.setLocation(convertToLocation(liftConstraint(constraints.location))); + relayConstraints.setWireguardConstraints( + convertToWireguardConstraints(constraints.wireguardConstraints), + ); + relayConstraints.setOpenvpnConstraints( + convertToOpenVpnConstraints(constraints.openvpnConstraints), + ); + relayConstraints.setProvidersList(constraints.providers); + relayConstraints.setOwnership(convertToOwnership(constraints.ownership)); + + return relayConstraints; +} + function convertToNormalBridgeSettings( constraints: IBridgeConstraints, ): grpcTypes.BridgeSettings.BridgeConstraints { diff --git a/gui/src/main/settings.ts b/gui/src/main/settings.ts index 3016e75289..fc2450581f 100644 --- a/gui/src/main/settings.ts +++ b/gui/src/main/settings.ts @@ -56,8 +56,8 @@ export default class Settings implements Readonly<ISettings> { IpcMainEventChannel.settings.handleSetWireguardQuantumResistant((quantumResistant?: boolean) => this.daemonRpc.setWireguardQuantumResistant(quantumResistant), ); - IpcMainEventChannel.settings.handleUpdateRelaySettings((update) => - this.daemonRpc.updateRelaySettings(update), + IpcMainEventChannel.settings.handleSetRelaySettings((relaySettings) => + this.daemonRpc.setRelaySettings(relaySettings), ); IpcMainEventChannel.settings.handleUpdateBridgeSettings((bridgeSettings) => { return this.daemonRpc.setBridgeSettings(bridgeSettings); |
