diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2019-03-26 14:17:54 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-05-29 19:33:21 +0100 |
| commit | e0ab65494b2730378b6134e62687a7cb6172f582 (patch) | |
| tree | 8c8c8ec2b548fe74136caa174ed6e6642693fe0b /gui/src/renderer | |
| parent | 43e1d284a8b54406f8ccaf75607acf5acff17e50 (diff) | |
| download | mullvadvpn-e0ab65494b2730378b6134e62687a7cb6172f582.tar.xz mullvadvpn-e0ab65494b2730378b6134e62687a7cb6172f582.zip | |
Add shadowsocks bridge selector
Diffstat (limited to 'gui/src/renderer')
| -rw-r--r-- | gui/src/renderer/app.tsx | 7 | ||||
| -rw-r--r-- | gui/src/renderer/components/AdvancedSettings.tsx | 37 | ||||
| -rw-r--r-- | gui/src/renderer/containers/AdvancedSettingsPage.tsx | 11 | ||||
| -rw-r--r-- | gui/src/renderer/redux/settings/actions.ts | 15 | ||||
| -rw-r--r-- | gui/src/renderer/redux/settings/reducers.ts | 10 |
5 files changed, 77 insertions, 3 deletions
diff --git a/gui/src/renderer/app.tsx b/gui/src/renderer/app.tsx index d98c7d23e9..6ac6467b81 100644 --- a/gui/src/renderer/app.tsx +++ b/gui/src/renderer/app.tsx @@ -32,6 +32,7 @@ import AccountExpiry from './lib/account-expiry'; import { AccountToken, + BridgeState, ILocation, IRelayList, ISettings, @@ -305,6 +306,12 @@ export default class AppRenderer { actions.settings.updateEnableIpv6(enableIpv6); } + public async setBridgeState(bridgeState: BridgeState) { + const actions = this.reduxActions; + await IpcRendererEventChannel.settings.setBridgeState(bridgeState); + actions.settings.updateBridgeState(bridgeState); + } + public async setBlockWhenDisconnected(blockWhenDisconnected: boolean) { const actions = this.reduxActions; await IpcRendererEventChannel.settings.setBlockWhenDisconnected(blockWhenDisconnected); diff --git a/gui/src/renderer/components/AdvancedSettings.tsx b/gui/src/renderer/components/AdvancedSettings.tsx index a1a844f8e6..5c9be492a0 100644 --- a/gui/src/renderer/components/AdvancedSettings.tsx +++ b/gui/src/renderer/components/AdvancedSettings.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { Component, View } from 'reactxp'; import { sprintf } from 'sprintf-js'; import { colors } from '../../config.json'; -import { RelayProtocol } from '../../shared/daemon-rpc-types'; +import { BridgeState, RelayProtocol } from '../../shared/daemon-rpc-types'; import { messages } from '../../shared/gettext'; import styles from './AdvancedSettingsStyles'; import * as Cell from './Cell'; @@ -36,12 +36,27 @@ function mapPortToSelectorItem(value: number): ISelectorItem<number> { return { label: value.toString(), value }; } +function makeBridgeItems(): Array<ISelectorItem<BridgeState>> { + return [ + { + label: messages.pgettext('advanced-settings-view', 'On'), + value: 'on', + }, + { + label: messages.pgettext('advanced-settings-view', 'Off'), + value: 'off', + }, + ]; +} + interface IProps { enableIpv6: boolean; blockWhenDisconnected: boolean; protocol?: RelayProtocol; mssfix?: number; port?: number; + bridgeState?: BridgeState; + setBridgeState: (value: BridgeState) => void; setEnableIpv6: (value: boolean) => void; setBlockWhenDisconnected: (value: boolean) => void; setOpenVpnMssfix: (value: number | undefined) => void; @@ -56,6 +71,8 @@ interface IState { } export default class AdvancedSettings extends Component<IProps, IState> { + private bridgeSelectorItems = makeBridgeItems(); + constructor(props: IProps) { super(props); @@ -163,6 +180,16 @@ export default class AdvancedSettings extends Component<IProps, IState> { )} </View> + <Selector + title={ + // TRANSLATORS: The title for the shadowsocks bridge selector section. + messages.pgettext('advanced-settings-view', 'Shadowsocks bridge') + } + values={this.bridgeSelectorItems} + value={this.props.bridgeState} + onSelect={this.onSelectBridgeState} + /> + <Cell.Container> <Cell.Label>{messages.pgettext('advanced-settings-view', 'Mssfix')}</Cell.Label> <Cell.InputFrame style={styles.advanced_settings__mssfix_frame}> @@ -213,6 +240,14 @@ export default class AdvancedSettings extends Component<IProps, IState> { this.props.setRelayProtocolAndPort(this.props.protocol, port); }; + private onSelectBridgeState = (bridgeState?: BridgeState) => { + if (bridgeState) { + this.props.setBridgeState(bridgeState); + } else { + this.props.setBridgeState('auto'); + } + }; + private onMssfixChange = (mssfixString: string) => { const mssfix = mssfixString.replace(/[^0-9]/g, ''); diff --git a/gui/src/renderer/containers/AdvancedSettingsPage.tsx b/gui/src/renderer/containers/AdvancedSettingsPage.tsx index 5fbdd57b25..a8784a62e2 100644 --- a/gui/src/renderer/containers/AdvancedSettingsPage.tsx +++ b/gui/src/renderer/containers/AdvancedSettingsPage.tsx @@ -2,7 +2,7 @@ import { goBack } from 'connected-react-router'; import log from 'electron-log'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; -import { RelayProtocol } from '../../shared/daemon-rpc-types'; +import { BridgeState, RelayProtocol } from '../../shared/daemon-rpc-types'; import AdvancedSettings from '../components/AdvancedSettings'; import RelaySettingsBuilder from '../lib/relay-settings-builder'; @@ -17,6 +17,7 @@ const mapStateToProps = (state: IReduxState) => { enableIpv6: state.settings.enableIpv6, blockWhenDisconnected: state.settings.blockWhenDisconnected, mssfix: state.settings.openVpn.mssfix, + bridgeState: state.settings.bridgeState, ...protocolAndPort, }; }; @@ -82,6 +83,14 @@ const mapDispatchToProps = (dispatch: ReduxDispatch, props: ISharedRouteProps) = } }, + setBridgeState: async (bridgeState: BridgeState) => { + try { + await props.app.setBridgeState(bridgeState); + } catch (e) { + log.error(`Failed to update bridge state: ${e.message}`); + } + }, + setOpenVpnMssfix: async (mssfix?: number) => { try { await props.app.setOpenVpnMssfix(mssfix); diff --git a/gui/src/renderer/redux/settings/actions.ts b/gui/src/renderer/redux/settings/actions.ts index 4587a1c513..742923276d 100644 --- a/gui/src/renderer/redux/settings/actions.ts +++ b/gui/src/renderer/redux/settings/actions.ts @@ -1,3 +1,4 @@ +import { BridgeState } from '../../../shared/daemon-rpc-types'; import { IGuiSettingsState } from '../../../shared/gui-settings-state'; import { IRelayLocationRedux, RelaySettingsRedux } from './reducers'; @@ -31,6 +32,11 @@ export interface IUpdateBlockWhenDisconnectedAction { blockWhenDisconnected: boolean; } +export interface IUpdateBridgeStateAction { + type: 'UPDATE_BRIDGE_STATE'; + bridgeState: BridgeState; +} + export interface IUpdateOpenVpnMssfixAction { type: 'UPDATE_OPENVPN_MSSFIX'; mssfix?: number; @@ -48,6 +54,7 @@ export type SettingsAction = | IUpdateAllowLanAction | IUpdateEnableIpv6Action | IUpdateBlockWhenDisconnectedAction + | IUpdateBridgeStateAction | IUpdateOpenVpnMssfixAction | IUpdateAutoStartAction; @@ -95,6 +102,13 @@ function updateBlockWhenDisconnected( }; } +function updateBridgeState(bridgeState: BridgeState): IUpdateBridgeStateAction { + return { + type: 'UPDATE_BRIDGE_STATE', + bridgeState, + }; +} + function updateOpenVpnMssfix(mssfix?: number): IUpdateOpenVpnMssfixAction { return { type: 'UPDATE_OPENVPN_MSSFIX', @@ -116,6 +130,7 @@ export default { updateAllowLan, updateEnableIpv6, updateBlockWhenDisconnected, + updateBridgeState, updateOpenVpnMssfix, updateAutoStart, }; diff --git a/gui/src/renderer/redux/settings/reducers.ts b/gui/src/renderer/redux/settings/reducers.ts index ca02ab0db2..e2565ec0e7 100644 --- a/gui/src/renderer/redux/settings/reducers.ts +++ b/gui/src/renderer/redux/settings/reducers.ts @@ -1,4 +1,4 @@ -import { RelayLocation, RelayProtocol } from '../../../shared/daemon-rpc-types'; +import { BridgeState, RelayLocation, RelayProtocol } from '../../../shared/daemon-rpc-types'; import { IGuiSettingsState } from '../../../shared/gui-settings-state'; import { ReduxAction } from '../store'; @@ -48,6 +48,7 @@ export interface ISettingsReduxState { relayLocations: IRelayLocationRedux[]; allowLan: boolean; enableIpv6: boolean; + bridgeState?: BridgeState; blockWhenDisconnected: boolean; openVpn: { mssfix?: number; @@ -71,6 +72,7 @@ const initialState: ISettingsReduxState = { relayLocations: [], allowLan: false, enableIpv6: true, + bridgeState: undefined, blockWhenDisconnected: false, openVpn: {}, }; @@ -131,6 +133,12 @@ export default function( autoStart: action.autoStart, }; + case 'UPDATE_BRIDGE_STATE': + return { + ...state, + bridgeState: action.bridgeState === 'auto' ? undefined : action.bridgeState, + }; + default: return state; } |
