diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2021-01-15 17:35:24 +0100 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2021-07-02 16:15:01 +0200 |
| commit | 612fb8706de095a32fbd58a5a87fece32240fcb7 (patch) | |
| tree | 8e89f10c3983c6e4d8be6e29d4af4b5c485be327 /gui/src | |
| parent | b30ac8edef0d20beb1e770bbaea90de073020710 (diff) | |
| download | mullvadvpn-612fb8706de095a32fbd58a5a87fece32240fcb7.tar.xz mullvadvpn-612fb8706de095a32fbd58a5a87fece32240fcb7.zip | |
Add Windows split tunneling ipc methods, redux actions and reducers to renderer
Diffstat (limited to 'gui/src')
| -rw-r--r-- | gui/src/renderer/app.tsx | 33 | ||||
| -rw-r--r-- | gui/src/renderer/redux/settings/actions.ts | 31 | ||||
| -rw-r--r-- | gui/src/renderer/redux/settings/reducers.ts | 17 | ||||
| -rw-r--r-- | gui/src/renderer/routes.tsx | 6 |
4 files changed, 80 insertions, 7 deletions
diff --git a/gui/src/renderer/app.tsx b/gui/src/renderer/app.tsx index 7cb8e538b0..93529b87c2 100644 --- a/gui/src/renderer/app.tsx +++ b/gui/src/renderer/app.tsx @@ -16,9 +16,9 @@ import userInterfaceActions from './redux/userinterface/actions'; import versionActions from './redux/version/actions'; import { ICurrentAppVersionInfo } from '../shared/ipc-types'; -import { ILinuxSplitTunnelingApplication } from '../shared/application-types'; -import { messages, relayLocations } from '../shared/gettext'; +import { IApplication, ILinuxSplitTunnelingApplication } from '../shared/application-types'; import { IGuiSettingsState, SYSTEM_PREFERRED_LOCALE_KEY } from '../shared/gui-settings-state'; +import { messages, relayLocations } from '../shared/gettext'; import log, { ConsoleOutput } from '../shared/logging'; import { IRelayListPair, LaunchApplicationResult } from '../shared/ipc-schema'; import consumePromise from '../shared/promise'; @@ -197,6 +197,10 @@ export default class AppRenderer { this.reduxActions.settings.setWireguardKeygenEvent(event); }); + IpcRendererEventChannel.windowsSplitTunneling.listen((applications: IApplication[]) => { + this.reduxActions.settings.setSplitTunnelingApplications(applications); + }); + IpcRendererEventChannel.windowFocus.listen((focus: boolean) => { this.reduxActions.userInterface.setWindowFocused(focus); }); @@ -245,6 +249,12 @@ export default class AppRenderer { } this.checkContentHeight(); + + if (initialState.windowsSplitTunnelingApplications) { + this.reduxActions.settings.setSplitTunnelingApplications( + initialState.windowsSplitTunnelingApplications, + ); + } } public renderView() { @@ -448,16 +458,32 @@ export default class AppRenderer { actions.settings.setWireguardKeygenEvent(keygenEvent); } - public getSplitTunnelingApplications() { + public getLinuxSplitTunnelingApplications() { return IpcRendererEventChannel.linuxSplitTunneling.getApplications(); } + public getWindowsSplitTunnelingApplications(updateCache = false) { + return IpcRendererEventChannel.windowsSplitTunneling.getApplications(updateCache); + } + public launchExcludedApplication( application: ILinuxSplitTunnelingApplication | string, ): Promise<LaunchApplicationResult> { return IpcRendererEventChannel.linuxSplitTunneling.launchApplication(application); } + public setSplitTunnelingState(enabled: boolean) { + consumePromise(IpcRendererEventChannel.windowsSplitTunneling.setState(enabled)); + } + + public addSplitTunnelingApplication(application: IApplication | string): Promise<void> { + return IpcRendererEventChannel.windowsSplitTunneling.addApplication(application); + } + + public removeSplitTunnelingApplication(application: IApplication | string) { + consumePromise(IpcRendererEventChannel.windowsSplitTunneling.removeApplication(application)); + } + public collectProblemReport(toRedact?: string): Promise<string> { return IpcRendererEventChannel.problemReport.collectLogs(toRedact); } @@ -716,6 +742,7 @@ export default class AppRenderer { reduxSettings.updateWireguardMtu(newSettings.tunnelOptions.wireguard.mtu); reduxSettings.updateBridgeState(newSettings.bridgeState); reduxSettings.updateDnsOptions(newSettings.tunnelOptions.dns); + reduxSettings.updateSplitTunneling(newSettings.splitTunnel); this.setRelaySettings(newSettings.relaySettings); this.setBridgeSettings(newSettings.bridgeSettings); diff --git a/gui/src/renderer/redux/settings/actions.ts b/gui/src/renderer/redux/settings/actions.ts index 6428badde8..c5f9d33e08 100644 --- a/gui/src/renderer/redux/settings/actions.ts +++ b/gui/src/renderer/redux/settings/actions.ts @@ -5,6 +5,7 @@ import { KeygenEvent, } from '../../../shared/daemon-rpc-types'; import { IGuiSettingsState } from '../../../shared/gui-settings-state'; +import { IApplication } from '../../../shared/application-types'; import { BridgeSettingsRedux, IRelayLocationRedux, IWgKey, RelaySettingsRedux } from './reducers'; export interface IUpdateGuiSettingsAction { @@ -107,6 +108,16 @@ export interface IUpdateDnsOptionsAction { dns: IDnsOptions; } +export interface ISplitTunnelingEnableExclusions { + type: 'SPLIT_TUNNELING_ENABLE_EXCLUSIONS'; + enabled: boolean; +} + +export interface ISplitTunnelingApplications { + type: 'SPLIT_TUNNELING_APPLICATIONS'; + applications: IApplication[]; +} + export type SettingsAction = | IUpdateGuiSettingsAction | IUpdateRelayAction @@ -127,7 +138,9 @@ export type SettingsAction = | IWireguardReplaceKey | IWireguardKeygenEvent | IWireguardKeyVerifiedAction - | IUpdateDnsOptionsAction; + | IUpdateDnsOptionsAction + | ISplitTunnelingEnableExclusions + | ISplitTunnelingApplications; function updateGuiSettings(guiSettings: IGuiSettingsState): IUpdateGuiSettingsAction { return { @@ -279,6 +292,20 @@ function updateDnsOptions(dns: IDnsOptions): IUpdateDnsOptionsAction { }; } +function updateSplitTunneling(enabled: boolean): ISplitTunnelingEnableExclusions { + return { + type: 'SPLIT_TUNNELING_ENABLE_EXCLUSIONS', + enabled, + }; +} + +function setSplitTunnelingApplications(applications: IApplication[]): ISplitTunnelingApplications { + return { + type: 'SPLIT_TUNNELING_APPLICATIONS', + applications, + }; +} + export default { updateGuiSettings, updateRelay, @@ -300,4 +327,6 @@ export default { verifyWireguardKey, completeWireguardKeyVerification, updateDnsOptions, + updateSplitTunneling, + setSplitTunnelingApplications, }; diff --git a/gui/src/renderer/redux/settings/reducers.ts b/gui/src/renderer/redux/settings/reducers.ts index be4287c90f..d7efdcc2b3 100644 --- a/gui/src/renderer/redux/settings/reducers.ts +++ b/gui/src/renderer/redux/settings/reducers.ts @@ -1,3 +1,4 @@ +import { IApplication } from '../../../shared/application-types'; import { BridgeState, KeygenEvent, @@ -136,6 +137,8 @@ export interface ISettingsReduxState { }; dns: IDnsOptions; wireguardKeyState: WgKeyState; + splitTunneling: boolean; + splitTunnelingApplications: IApplication[]; } const initialState: ISettingsReduxState = { @@ -187,6 +190,8 @@ const initialState: ISettingsReduxState = { addresses: [], }, }, + splitTunneling: false, + splitTunnelingApplications: [], }; export default function ( @@ -320,6 +325,18 @@ export default function ( dns: action.dns, }; + case 'SPLIT_TUNNELING_ENABLE_EXCLUSIONS': + return { + ...state, + splitTunneling: action.enabled, + }; + + case 'SPLIT_TUNNELING_APPLICATIONS': + return { + ...state, + splitTunnelingApplications: action.applications, + }; + default: return state; } diff --git a/gui/src/renderer/routes.tsx b/gui/src/renderer/routes.tsx index 68605821d4..1f12e7386e 100644 --- a/gui/src/renderer/routes.tsx +++ b/gui/src/renderer/routes.tsx @@ -5,7 +5,7 @@ import Launch from './components/Launch'; import KeyboardNavigation from './components/KeyboardNavigation'; import MainView from './components/MainView'; import Focus, { IFocusHandle } from './components/Focus'; -import LinuxSplitTunnelingSettings from './components/LinuxSplitTunnelingSettings'; +import SplitTunnelingSettings from './components/SplitTunnelingSettings'; import TransitionContainer, { TransitionView } from './components/TransitionContainer'; import AccountPage from './containers/AccountPage'; import AdvancedSettingsPage from './containers/AdvancedSettingsPage'; @@ -96,8 +96,8 @@ class AppRoutes extends React.Component<IHistoryProps, IAppRoutesState> { /> <Route exact={true} - path="/settings/advanced/linux-split-tunneling" - component={LinuxSplitTunnelingSettings} + path="/settings/advanced/split-tunneling" + component={SplitTunnelingSettings} /> <Route exact={true} path="/settings/support" component={SupportPage} /> <Route exact={true} path="/select-location" component={SelectLocationPage} /> |
