diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2019-07-30 18:20:27 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-07-30 18:20:27 +0100 |
| commit | 5317e5cc9d617e05088918531288b8f2ef103b73 (patch) | |
| tree | fb57a0a62ceeb07fc8df42d8688e35aacf355d1d /gui/src/renderer/lib | |
| parent | 5eb694a0468d7bcf199c58cec4b0b17529558339 (diff) | |
| parent | 1ede7f60d1c3ea695db90795346edfce3be164f9 (diff) | |
| download | mullvadvpn-5317e5cc9d617e05088918531288b8f2ef103b73.tar.xz mullvadvpn-5317e5cc9d617e05088918531288b8f2ef103b73.zip | |
Merge branch 'improve-gui-for-new-tunnel-constraints'
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; }, }; |
