summaryrefslogtreecommitdiffhomepage
path: root/gui
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2021-01-15 17:35:24 +0100
committerOskar Nyberg <oskar@mullvad.net>2021-07-02 16:15:01 +0200
commit612fb8706de095a32fbd58a5a87fece32240fcb7 (patch)
tree8e89f10c3983c6e4d8be6e29d4af4b5c485be327 /gui
parentb30ac8edef0d20beb1e770bbaea90de073020710 (diff)
downloadmullvadvpn-612fb8706de095a32fbd58a5a87fece32240fcb7.tar.xz
mullvadvpn-612fb8706de095a32fbd58a5a87fece32240fcb7.zip
Add Windows split tunneling ipc methods, redux actions and reducers to renderer
Diffstat (limited to 'gui')
-rw-r--r--gui/src/renderer/app.tsx33
-rw-r--r--gui/src/renderer/redux/settings/actions.ts31
-rw-r--r--gui/src/renderer/redux/settings/reducers.ts17
-rw-r--r--gui/src/renderer/routes.tsx6
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} />