summaryrefslogtreecommitdiffhomepage
path: root/gui/src
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2019-05-29 12:26:43 +0100
committerEmīls Piņķis <emils@mullvad.net>2019-05-29 12:26:43 +0100
commitc90aaf9c3f5cc830080ddaf94a71120e4c5eaf3d (patch)
tree6a325e3055545b8b04c489dcb458cbf75cefef1e /gui/src
parent3cbde64293924e3ea19b70653e0805478cd17c35 (diff)
parent13c22e621244f64267c985dd06e521c5931acb05 (diff)
downloadmullvadvpn-c90aaf9c3f5cc830080ddaf94a71120e4c5eaf3d.tar.xz
mullvadvpn-c90aaf9c3f5cc830080ddaf94a71120e4c5eaf3d.zip
Merge branch 'shadowsocks-gui-datatypes'
Diffstat (limited to 'gui/src')
-rw-r--r--gui/src/main/daemon-rpc.ts78
-rw-r--r--gui/src/main/index.ts20
-rw-r--r--gui/src/shared/daemon-rpc-types.ts29
3 files changed, 93 insertions, 34 deletions
diff --git a/gui/src/main/daemon-rpc.ts b/gui/src/main/daemon-rpc.ts
index 7897aba7c9..56284fd061 100644
--- a/gui/src/main/daemon-rpc.ts
+++ b/gui/src/main/daemon-rpc.ts
@@ -52,6 +52,20 @@ const constraint = <T>(constraintValue: SchemaNode<T>) => {
);
};
+const locationConstraintSchema = constraint(
+ oneOf(
+ object({
+ hostname: arrayOf(string),
+ }),
+ object({
+ city: arrayOf(string),
+ }),
+ object({
+ country: string,
+ }),
+ ),
+);
+
const customTunnelEndpointSchema = oneOf(
object({
openvpn: object({
@@ -83,19 +97,7 @@ const customTunnelEndpointSchema = oneOf(
const relaySettingsSchema = oneOf(
object({
normal: partialObject({
- location: constraint(
- oneOf(
- object({
- hostname: arrayOf(string),
- }),
- object({
- city: arrayOf(string),
- }),
- object({
- country: string,
- }),
- ),
- ),
+ location: locationConstraintSchema,
tunnel: constraint(
oneOf(
object({
@@ -138,20 +140,34 @@ const relayListSchema = partialObject({
ipv4_addr_in: string,
include_in_country: boolean,
weight: number,
- tunnels: partialObject({
- openvpn: arrayOf(
- partialObject({
- port: number,
- protocol: string,
- }),
- ),
- wireguard: arrayOf(
- partialObject({
- port_ranges: arrayOf(arrayOf(number)),
- public_key: string,
- }),
- ),
- }),
+ bridges: maybe(
+ partialObject({
+ shadowsocks: arrayOf(
+ object({
+ port: number,
+ cipher: string,
+ password: string,
+ protocol: enumeration('tcp', 'udp'),
+ }),
+ ),
+ }),
+ ),
+ tunnels: maybe(
+ partialObject({
+ openvpn: arrayOf(
+ partialObject({
+ port: number,
+ protocol: string,
+ }),
+ ),
+ wireguard: arrayOf(
+ partialObject({
+ port_ranges: arrayOf(arrayOf(number)),
+ public_key: string,
+ }),
+ ),
+ }),
+ ),
}),
),
}),
@@ -189,10 +205,14 @@ const openVpnProxySchema = maybe(
),
);
+const bridgeSettingsSchema = oneOf(
+ partialObject({ location: locationConstraintSchema }),
+ openVpnProxySchema,
+);
+
const tunnelOptionsSchema = partialObject({
openvpn: partialObject({
mssfix: maybe(number),
- proxy: openVpnProxySchema,
}),
wireguard: partialObject({
mtu: maybe(number),
@@ -292,6 +312,8 @@ const settingsSchema = partialObject({
allow_lan: boolean,
auto_connect: boolean,
block_when_disconnected: boolean,
+ bridge_settings: bridgeSettingsSchema,
+ bridge_state: enumeration('on', 'auto', 'off'),
relay_settings: relaySettingsSchema,
tunnel_options: tunnelOptionsSchema,
});
diff --git a/gui/src/main/index.ts b/gui/src/main/index.ts
index 08dc43243b..25cb537878 100644
--- a/gui/src/main/index.ts
+++ b/gui/src/main/index.ts
@@ -82,13 +82,16 @@ class ApplicationMain {
tunnel: 'any',
},
},
+ bridgeSettings: {
+ location: 'any',
+ },
+ bridgeState: 'auto',
tunnelOptions: {
generic: {
enableIpv6: false,
},
openvpn: {
mssfix: undefined,
- proxy: undefined,
},
wireguard: {
mtu: undefined,
@@ -550,10 +553,19 @@ class ApplicationMain {
// hasToHaveOpenvpn || hasToHaveWg, until then, only filter wireguard
// relays if tunnel constraints specify wireguard tunnels.
const hasOpenVpnTunnels = (relay: IRelayListHostname): boolean => {
- return relay.tunnels.openvpn.length > 0;
+ if (relay.tunnels) {
+ return relay.tunnels.openvpn.length > 0;
+ } else {
+ return false;
+ }
+ };
+ const hasWireguardTunnels = (relay: IRelayListHostname): boolean => {
+ if (relay.tunnels) {
+ return relay.tunnels.wireguard.length > 0;
+ } else {
+ return false;
+ }
};
- const hasWireguardTunnels = (relay: IRelayListHostname): boolean =>
- relay.tunnels.wireguard.length > 0;
let fnHasWantedTunnels = hasOpenVpnTunnels;
if ('normal' in relaySettings) {
diff --git a/gui/src/shared/daemon-rpc-types.ts b/gui/src/shared/daemon-rpc-types.ts
index 6b29ddd764..ff1720be06 100644
--- a/gui/src/shared/daemon-rpc-types.ts
+++ b/gui/src/shared/daemon-rpc-types.ts
@@ -160,7 +160,8 @@ export interface IRelayListHostname {
ipv4AddrIn: string;
includeInCountry: boolean;
weight: number;
- tunnels: IRelayTunnels;
+ tunnels?: IRelayTunnels;
+ bridges?: IRelayBridges;
}
export interface IRelayTunnels {
@@ -168,6 +169,10 @@ export interface IRelayTunnels {
wireguard: IWireguardTunnelData[];
}
+export interface IRelayBridges {
+ shadowsocks: IShadowsocksEndpointData[];
+}
+
export interface IOpenVpnTunnelData {
port: number;
protocol: RelayProtocol;
@@ -182,10 +187,16 @@ export interface IWireguardTunnelData {
publicKey: string;
}
+export interface IShadowsocksEndpointData {
+ port: number;
+ cipher: string;
+ password: string;
+ protocol: RelayProtocol;
+}
+
export interface ITunnelOptions {
openvpn: {
mssfix?: number;
- proxy?: ProxySettings;
};
wireguard: {
mtu?: number;
@@ -233,8 +244,22 @@ export interface ISettings {
blockWhenDisconnected: boolean;
relaySettings: RelaySettings;
tunnelOptions: ITunnelOptions;
+ bridgeSettings: BridgeSettings;
+ bridgeState: BridgeState;
}
+export type BridgeState = 'auto' | 'on' | 'off';
+
+export interface IBridgeConstraints {
+ location:
+ | 'any'
+ | {
+ only: RelayLocation;
+ };
+}
+
+export type BridgeSettings = ProxySettings | IBridgeConstraints;
+
export interface ISocketAddress {
host: string;
port: number;