diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2019-07-26 13:59:15 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-07-30 18:19:24 +0100 |
| commit | 60f4c7d207a82a2ca192a92ce7e6bb539e1b955e (patch) | |
| tree | 87f5b9af2795427deb3d6de7de6994b2cdd2c5e3 /gui/src/renderer/lib | |
| parent | 5eb694a0468d7bcf199c58cec4b0b17529558339 (diff) | |
| download | mullvadvpn-60f4c7d207a82a2ca192a92ce7e6bb539e1b955e.tar.xz mullvadvpn-60f4c7d207a82a2ca192a92ce7e6bb539e1b955e.zip | |
Allow setting TunnelProtocol constraint from GUI
Diffstat (limited to 'gui/src/renderer/lib')
| -rw-r--r-- | gui/src/renderer/lib/relay-settings-builder.ts | 70 |
1 files changed, 67 insertions, 3 deletions
diff --git a/gui/src/renderer/lib/relay-settings-builder.ts b/gui/src/renderer/lib/relay-settings-builder.ts index bbf85b1fed..08ecef720e 100644 --- a/gui/src/renderer/lib/relay-settings-builder.ts +++ b/gui/src/renderer/lib/relay-settings-builder.ts @@ -1,9 +1,11 @@ import { IOpenVpnConstraints, + IWireguardConstraints, RelayLocation, RelayProtocol, RelaySettingsNormalUpdate, RelaySettingsUpdate, + TunnelProtocol, } from '../../shared/daemon-rpc-types'; interface ILocationBuilder<Self> { @@ -24,11 +26,24 @@ interface IOpenVPNConfigurator { protocol: IExactOrAny<RelayProtocol, IOpenVPNConfigurator>; } +interface IWireguardConfigurator { + port: IExactOrAny<number, IWireguardConfigurator>; +} + +interface ITunnelProtocolConfigurator { + tunnelProtocol: IExactOrAny<TunnelProtocol, ITunnelProtocolConfigurator>; +} + interface ITunnelBuilder { openvpn( configurator: (openVpnConfigurator: IOpenVPNConfigurator) => void, ): NormalRelaySettingsBuilder; - any(): NormalRelaySettingsBuilder; + wireguard( + configurator: (wireguardConfigurator: IWireguardConfigurator) => void, + ): NormalRelaySettingsBuilder; + tunnelProtocol( + configurator: (tunnelProtocolConfigurator: ITunnelProtocolConfigurator) => void, + ): NormalRelaySettingsBuilder; } class NormalRelaySettingsBuilder { @@ -91,6 +106,22 @@ class NormalRelaySettingsBuilder { } }; + const updateWireguard = (next: Partial<IWireguardConstraints>) => { + if (this.payload.wireguardConstraints === undefined) { + this.payload.wireguardConstraints = next; + } else { + const prev = this.payload.wireguardConstraints; + this.payload.wireguardConstraints = { + ...prev, + ...next, + }; + } + }; + + const updateTunnelProtocol = (next: { only: TunnelProtocol } | 'any' | undefined) => { + this.payload.tunnelProtocol = next; + }; + return { openvpn: (configurator: (configurator: IOpenVPNConfigurator) => void) => { const openvpnBuilder: IOpenVPNConfigurator = { @@ -120,8 +151,41 @@ class NormalRelaySettingsBuilder { return this; }, - any: () => { - this.payload.tunnelProtocol = 'any'; + + wireguard: (configurator: (configurator: IWireguardConfigurator) => void) => { + const wireguardBuilder: IWireguardConfigurator = { + get port() { + const apply = (port: 'any' | { only: number }) => { + updateWireguard({ port }); + return this; + }; + return { + exact: (value: number) => apply({ only: value }), + any: () => apply('any'), + }; + }, + }; + configurator(wireguardBuilder); + return this; + }, + + tunnelProtocol: (configurator: (configurator: ITunnelProtocolConfigurator) => void) => { + const tunnelProtocolBuilder = { + get tunnelProtocol() { + return { + exact: (value: TunnelProtocol) => { + updateTunnelProtocol({ only: value }); + return this; + }, + any: () => { + updateTunnelProtocol('any'); + return this; + }, + }; + }, + }; + + configurator(tunnelProtocolBuilder); return this; }, }; |
