summaryrefslogtreecommitdiffhomepage
path: root/gui/src/renderer/lib
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2019-07-26 13:59:15 +0100
committerEmīls Piņķis <emils@mullvad.net>2019-07-30 18:19:24 +0100
commit60f4c7d207a82a2ca192a92ce7e6bb539e1b955e (patch)
tree87f5b9af2795427deb3d6de7de6994b2cdd2c5e3 /gui/src/renderer/lib
parent5eb694a0468d7bcf199c58cec4b0b17529558339 (diff)
downloadmullvadvpn-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.ts70
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;
},
};