summaryrefslogtreecommitdiffhomepage
path: root/gui/src/renderer
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2024-05-24 08:04:31 +0200
committerOskar Nyberg <oskar@mullvad.net>2024-05-28 15:40:41 +0200
commit86d9cc33442ea87f19b0d9a3d7fa30fad38700c4 (patch)
treed524ac5d01ba0b642b64e2904e8d989bc99f30a5 /gui/src/renderer
parent22eda0924e9747abf598d129ddaafc6dc96ff534 (diff)
downloadmullvadvpn-86d9cc33442ea87f19b0d9a3d7fa30fad38700c4.tar.xz
mullvadvpn-86d9cc33442ea87f19b0d9a3d7fa30fad38700c4.zip
Make Windows split tunneling types more general
Diffstat (limited to 'gui/src/renderer')
-rw-r--r--gui/src/renderer/app.tsx29
-rw-r--r--gui/src/renderer/components/SplitTunnelingSettings.tsx56
-rw-r--r--gui/src/renderer/redux/settings/actions.ts6
-rw-r--r--gui/src/renderer/redux/settings/reducers.ts4
4 files changed, 47 insertions, 48 deletions
diff --git a/gui/src/renderer/app.tsx b/gui/src/renderer/app.tsx
index 92c4cb5698..95f7e3d0cf 100644
--- a/gui/src/renderer/app.tsx
+++ b/gui/src/renderer/app.tsx
@@ -4,7 +4,10 @@ import { bindActionCreators } from 'redux';
import { StyleSheetManager } from 'styled-components';
import { closeToExpiry, hasExpired } from '../shared/account-expiry';
-import { ILinuxSplitTunnelingApplication, IWindowsApplication } from '../shared/application-types';
+import {
+ ILinuxSplitTunnelingApplication,
+ ISplitTunnelingApplication,
+} from '../shared/application-types';
import {
AccessMethodSetting,
AccountToken,
@@ -185,7 +188,7 @@ export default class AppRenderer {
this.storeAutoStart(autoStart);
});
- IpcRendererEventChannel.windowsSplitTunneling.listen((applications: IWindowsApplication[]) => {
+ IpcRendererEventChannel.splitTunneling.listen((applications: ISplitTunnelingApplication[]) => {
this.reduxActions.settings.setSplitTunnelingApplications(applications);
});
@@ -258,9 +261,9 @@ export default class AppRenderer {
this.checkContentHeight(true);
});
- if (initialState.windowsSplitTunnelingApplications) {
+ if (initialState.splitTunnelingApplications) {
this.reduxActions.settings.setSplitTunnelingApplications(
- initialState.windowsSplitTunnelingApplications,
+ initialState.splitTunnelingApplications,
);
}
@@ -334,11 +337,11 @@ export default class AppRenderer {
public launchExcludedApplication = (application: ILinuxSplitTunnelingApplication | string) =>
IpcRendererEventChannel.linuxSplitTunneling.launchApplication(application);
public setSplitTunnelingState = (state: boolean) =>
- IpcRendererEventChannel.windowsSplitTunneling.setState(state);
- public addSplitTunnelingApplication = (application: string | IWindowsApplication) =>
- IpcRendererEventChannel.windowsSplitTunneling.addApplication(application);
- public forgetManuallyAddedSplitTunnelingApplication = (application: IWindowsApplication) =>
- IpcRendererEventChannel.windowsSplitTunneling.forgetManuallyAddedApplication(application);
+ IpcRendererEventChannel.splitTunneling.setState(state);
+ public addSplitTunnelingApplication = (application: string | ISplitTunnelingApplication) =>
+ IpcRendererEventChannel.splitTunneling.addApplication(application);
+ public forgetManuallyAddedSplitTunnelingApplication = (application: ISplitTunnelingApplication) =>
+ IpcRendererEventChannel.splitTunneling.forgetManuallyAddedApplication(application);
public setObfuscationSettings = (obfuscationSettings: ObfuscationSettings) =>
IpcRendererEventChannel.settings.setObfuscationSettings(obfuscationSettings);
public setDaitaSettings = (daitaSettings: IDaitaSettings) =>
@@ -513,12 +516,12 @@ export default class AppRenderer {
return IpcRendererEventChannel.autoStart.set(autoStart);
};
- public getWindowsSplitTunnelingApplications(updateCache = false) {
- return IpcRendererEventChannel.windowsSplitTunneling.getApplications(updateCache);
+ public getSplitTunnelingApplications(updateCache = false) {
+ return IpcRendererEventChannel.splitTunneling.getApplications(updateCache);
}
- public removeSplitTunnelingApplication(application: IWindowsApplication) {
- void IpcRendererEventChannel.windowsSplitTunneling.removeApplication(application);
+ public removeSplitTunnelingApplication(application: ISplitTunnelingApplication) {
+ void IpcRendererEventChannel.splitTunneling.removeApplication(application);
}
public async showLaunchDaemonSettings() {
diff --git a/gui/src/renderer/components/SplitTunnelingSettings.tsx b/gui/src/renderer/components/SplitTunnelingSettings.tsx
index e26b9ac089..ad7dbccfb1 100644
--- a/gui/src/renderer/components/SplitTunnelingSettings.tsx
+++ b/gui/src/renderer/components/SplitTunnelingSettings.tsx
@@ -6,7 +6,7 @@ import { colors, strings } from '../../config.json';
import {
IApplication,
ILinuxSplitTunnelingApplication,
- IWindowsApplication,
+ ISplitTunnelingApplication,
} from '../../shared/application-types';
import { messages } from '../../shared/gettext';
import { useAppContext } from '../context';
@@ -92,7 +92,7 @@ function PlatformSpecificSplitTunnelingSettings(props: IPlatformSplitTunnelingSe
case 'linux':
return <LinuxSplitTunnelingSettings {...props} />;
case 'win32':
- return <WindowsSplitTunnelingSettings {...props} />;
+ return <SplitTunnelingSettings {...props} />;
default:
throw new Error(`Split tunneling not implemented on ${window.env.platform}`);
}
@@ -300,12 +300,12 @@ function LinuxApplicationRow(props: ILinuxApplicationRowProps) {
);
}
-export function WindowsSplitTunnelingSettings(props: IPlatformSplitTunnelingSettingsProps) {
+export function SplitTunnelingSettings(props: IPlatformSplitTunnelingSettingsProps) {
const {
addSplitTunnelingApplication,
removeSplitTunnelingApplication,
forgetManuallyAddedSplitTunnelingApplication,
- getWindowsSplitTunnelingApplications,
+ getSplitTunnelingApplications,
setSplitTunnelingState,
} = useAppContext();
const splitTunnelingEnabled = useSelector((state: IReduxState) => state.settings.splitTunneling);
@@ -314,13 +314,13 @@ export function WindowsSplitTunnelingSettings(props: IPlatformSplitTunnelingSett
);
const [searchTerm, setSearchTerm] = useState('');
- const [applications, setApplications] = useState<IWindowsApplication[]>();
+ const [applications, setApplications] = useState<ISplitTunnelingApplication[]>();
useAsyncEffect(async () => {
- const { fromCache, applications } = await getWindowsSplitTunnelingApplications();
+ const { fromCache, applications } = await getSplitTunnelingApplications();
setApplications(applications);
if (fromCache) {
- const { applications } = await getWindowsSplitTunnelingApplications(true);
+ const { applications } = await getSplitTunnelingApplications(true);
setApplications(applications);
}
}, []);
@@ -345,7 +345,7 @@ export function WindowsSplitTunnelingSettings(props: IPlatformSplitTunnelingSett
}, [applications, splitTunnelingApplications, searchTerm]);
const addApplication = useCallback(
- async (application: IWindowsApplication | string) => {
+ async (application: ISplitTunnelingApplication | string) => {
if (!splitTunnelingEnabled) {
await setSplitTunnelingState(true);
}
@@ -354,26 +354,26 @@ export function WindowsSplitTunnelingSettings(props: IPlatformSplitTunnelingSett
[addSplitTunnelingApplication, splitTunnelingEnabled, setSplitTunnelingState],
);
- const addApplicationAndUpdate = useCallback(
- async (application: IWindowsApplication | string) => {
+ const addBrowsedForApplication = useCallback(
+ async (application: string) => {
await addApplication(application);
- const { applications } = await getWindowsSplitTunnelingApplications();
+ const { applications } = await getSplitTunnelingApplications();
setApplications(applications);
},
- [addApplication, getWindowsSplitTunnelingApplications],
+ [addApplication, getSplitTunnelingApplications],
);
const forgetManuallyAddedApplicationAndUpdate = useCallback(
- async (application: IWindowsApplication) => {
+ async (application: ISplitTunnelingApplication) => {
await forgetManuallyAddedSplitTunnelingApplication(application);
- const { applications } = await getWindowsSplitTunnelingApplications();
+ const { applications } = await getSplitTunnelingApplications();
setApplications(applications);
},
- [forgetManuallyAddedSplitTunnelingApplication, getWindowsSplitTunnelingApplications],
+ [forgetManuallyAddedSplitTunnelingApplication, getSplitTunnelingApplications],
);
const removeApplication = useCallback(
- async (application: IWindowsApplication) => {
+ async (application: ISplitTunnelingApplication) => {
if (!splitTunnelingEnabled) {
await setSplitTunnelingState(true);
}
@@ -395,21 +395,17 @@ export function WindowsSplitTunnelingSettings(props: IPlatformSplitTunnelingSett
}, [filePickerCallback, props.scrollToTop]);
const excludedRowRenderer = useCallback(
- (application: IWindowsApplication) => (
- <WindowsApplicationRow application={application} onRemove={removeApplication} />
+ (application: ISplitTunnelingApplication) => (
+ <ApplicationRow application={application} onRemove={removeApplication} />
),
[removeApplication],
);
const includedRowRenderer = useCallback(
- (application: IWindowsApplication) => {
+ (application: ISplitTunnelingApplication) => {
const onForget = application.deletable ? forgetManuallyAddedApplicationAndUpdate : undefined;
return (
- <WindowsApplicationRow
- application={application}
- onAdd={addApplication}
- onDelete={onForget}
- />
+ <ApplicationRow application={application} onAdd={addApplication} onDelete={onForget} />
);
},
[addApplication, forgetManuallyAddedApplicationAndUpdate],
@@ -516,14 +512,14 @@ function applicationGetKey<T extends IApplication>(application: T): string {
return application.absolutepath;
}
-interface IWindowsApplicationRowProps {
- application: IWindowsApplication;
- onAdd?: (application: IWindowsApplication) => void;
- onRemove?: (application: IWindowsApplication) => void;
- onDelete?: (application: IWindowsApplication) => void;
+interface IApplicationRowProps {
+ application: ISplitTunnelingApplication;
+ onAdd?: (application: ISplitTunnelingApplication) => void;
+ onRemove?: (application: ISplitTunnelingApplication) => void;
+ onDelete?: (application: ISplitTunnelingApplication) => void;
}
-function WindowsApplicationRow(props: IWindowsApplicationRowProps) {
+function ApplicationRow(props: IApplicationRowProps) {
const onAdd = useCallback(() => {
props.onAdd?.(props.application);
}, [props.onAdd, props.application]);
diff --git a/gui/src/renderer/redux/settings/actions.ts b/gui/src/renderer/redux/settings/actions.ts
index ba6e4ce5a8..d2a3fb1c4a 100644
--- a/gui/src/renderer/redux/settings/actions.ts
+++ b/gui/src/renderer/redux/settings/actions.ts
@@ -1,4 +1,4 @@
-import { IWindowsApplication } from '../../../shared/application-types';
+import { ISplitTunnelingApplication } from '../../../shared/application-types';
import {
AccessMethodSetting,
ApiAccessMethodSettings,
@@ -100,7 +100,7 @@ export interface IUpdateSplitTunnelingStateAction {
export interface ISetSplitTunnelingApplicationsAction {
type: 'SET_SPLIT_TUNNELING_APPLICATIONS';
- applications: IWindowsApplication[];
+ applications: ISplitTunnelingApplication[];
}
export interface ISetObfuscationSettings {
@@ -281,7 +281,7 @@ function updateSplitTunnelingState(enabled: boolean): IUpdateSplitTunnelingState
}
function setSplitTunnelingApplications(
- applications: IWindowsApplication[],
+ applications: ISplitTunnelingApplication[],
): ISetSplitTunnelingApplicationsAction {
return {
type: 'SET_SPLIT_TUNNELING_APPLICATIONS',
diff --git a/gui/src/renderer/redux/settings/reducers.ts b/gui/src/renderer/redux/settings/reducers.ts
index 18873eea20..eae413fe22 100644
--- a/gui/src/renderer/redux/settings/reducers.ts
+++ b/gui/src/renderer/redux/settings/reducers.ts
@@ -1,5 +1,5 @@
import { getDefaultApiAccessMethods } from '../../../main/default-settings';
-import { IWindowsApplication } from '../../../shared/application-types';
+import { ISplitTunnelingApplication } from '../../../shared/application-types';
import {
AccessMethodSetting,
ApiAccessMethodSettings,
@@ -115,7 +115,7 @@ export interface ISettingsReduxState {
};
dns: IDnsOptions;
splitTunneling: boolean;
- splitTunnelingApplications: IWindowsApplication[];
+ splitTunnelingApplications: ISplitTunnelingApplication[];
obfuscationSettings: ObfuscationSettings;
customLists: CustomLists;
apiAccessMethods: ApiAccessMethodSettings;