summaryrefslogtreecommitdiffhomepage
path: root/desktop
diff options
context:
space:
mode:
authorTobias Järvelöv <tobias.jarvelov@mullvad.net>2025-02-11 11:50:34 +0100
committerMarkus Pettersson <markus.pettersson@mullvad.net>2025-02-25 12:51:51 +0100
commit4ce11822f7308d75fce97acfc79fae2f9fc250ee (patch)
tree7ca290b44a6c14ca3c200a5a14081d38062e787a /desktop
parentd43b7acfdcf3252c8c22626d5305bb100aac37ed (diff)
downloadmullvadvpn-4ce11822f7308d75fce97acfc79fae2f9fc250ee.tar.xz
mullvadvpn-4ce11822f7308d75fce97acfc79fae2f9fc250ee.zip
Refactor split tunneling to use import instead of require
Diffstat (limited to 'desktop')
-rw-r--r--desktop/packages/mullvad-vpn/src/main/index.ts56
-rw-r--r--desktop/packages/mullvad-vpn/src/main/windows-split-tunneling.ts4
2 files changed, 29 insertions, 31 deletions
diff --git a/desktop/packages/mullvad-vpn/src/main/index.ts b/desktop/packages/mullvad-vpn/src/main/index.ts
index 6528cc7c71..b2893b438b 100644
--- a/desktop/packages/mullvad-vpn/src/main/index.ts
+++ b/desktop/packages/mullvad-vpn/src/main/index.ts
@@ -71,12 +71,6 @@ import Version, { GUI_VERSION } from './version';
const execAsync = util.promisify(exec);
-// Only import split tunneling library on correct OS.
-// eslint-disable-next-line @typescript-eslint/no-require-imports
-const linuxSplitTunneling = process.platform === 'linux' && require('./linux-split-tunneling');
-// This is used on Windows and macOS and will be undefined on Linux.
-const splitTunneling: ISplitTunnelingAppListRetriever | undefined = importSplitTunneling();
-
const ALLOWED_PERMISSIONS = ['clipboard-sanitized-write'];
const SANDBOX_DISABLED = app.commandLine.hasSwitch('no-sandbox');
@@ -112,6 +106,9 @@ class ApplicationMain
private daemonAllowed?: boolean;
private quitInitiated = false;
+ private linuxSplitTunneling?: typeof import('./linux-split-tunneling');
+ private splitTunneling?: ISplitTunnelingAppListRetriever;
+
private tunnelStateExpectation?: Expectation;
// The UI locale which is set once from onReady handler
@@ -454,6 +451,8 @@ class ApplicationMain
}
});
+ await this.loadSplitTunneling();
+
this.registerIpcListeners();
if (this.shouldShowWindowOnStart() || process.env.NODE_ENV === 'development') {
@@ -480,6 +479,19 @@ class ApplicationMain
);
};
+ private loadSplitTunneling = async () => {
+ // Only import split tunneling library on correct OS.
+ if (process.platform === 'linux') {
+ this.linuxSplitTunneling = await import('./linux-split-tunneling');
+ } else if (process.platform === 'win32') {
+ const { WindowsSplitTunnelingAppListRetriever } = await import('./windows-split-tunneling');
+ this.splitTunneling = new WindowsSplitTunnelingAppListRetriever();
+ } else if (process.platform === 'darwin') {
+ const { MacOsSplitTunnelingAppListRetriever } = await import('./macos-split-tunneling');
+ this.splitTunneling = new MacOsSplitTunnelingAppListRetriever();
+ }
+ };
+
private onSuspend = () => {
log.info('Suspend event received, disconnecting from daemon');
if (this.daemonEventListener) {
@@ -761,8 +773,8 @@ class ApplicationMain
}
private async updateSplitTunnelingApplications(appList: string[]): Promise<void> {
- if (splitTunneling) {
- const { applications } = await splitTunneling.getMetadataForApplications(appList);
+ if (this.splitTunneling) {
+ const { applications } = await this.splitTunneling.getMetadataForApplications(appList);
this.splitTunnelingApplications = applications;
IpcMainEventChannel.splitTunneling.notify?.(applications);
@@ -814,13 +826,13 @@ class ApplicationMain
});
IpcMainEventChannel.linuxSplitTunneling.handleGetApplications(() => {
- return linuxSplitTunneling.getApplications(this.locale);
+ return this.linuxSplitTunneling!.getApplications(this.locale);
});
IpcMainEventChannel.splitTunneling.handleGetApplications((updateCaches: boolean) => {
- return splitTunneling!.getApplications(updateCaches);
+ return this.splitTunneling!.getApplications(updateCaches);
});
IpcMainEventChannel.linuxSplitTunneling.handleLaunchApplication((application) => {
- return linuxSplitTunneling.launchApplication(application);
+ return this.linuxSplitTunneling!.launchApplication(application);
});
IpcMainEventChannel.splitTunneling.handleSetState((enabled) => {
@@ -832,12 +844,12 @@ class ApplicationMain
if (typeof application === 'string') {
let executablePath;
try {
- executablePath = await splitTunneling!.resolveExecutablePath(application);
+ executablePath = await this.splitTunneling!.resolveExecutablePath(application);
} catch {
return;
}
this.settings.gui.addBrowsedForSplitTunnelingApplications(executablePath);
- await splitTunneling!.addApplicationPathToCache(application);
+ await this.splitTunneling!.addApplicationPathToCache(application);
await this.daemonRpc.addSplitTunnelingApplication(executablePath);
} else {
await this.daemonRpc.addSplitTunnelingApplication(application.absolutepath);
@@ -850,7 +862,7 @@ class ApplicationMain
});
IpcMainEventChannel.splitTunneling.handleForgetManuallyAddedApplication((application) => {
this.settings.gui.deleteBrowsedForSplitTunnelingApplications(application.absolutepath);
- splitTunneling!.removeApplicationFromCache(application);
+ this.splitTunneling!.removeApplicationFromCache(application);
return Promise.resolve();
});
IpcMainEventChannel.macOsSplitTunneling.handleNeedFullDiskPermissions(async () => {
@@ -892,9 +904,9 @@ class ApplicationMain
this.settings.registerIpcListeners();
this.account.registerIpcListeners();
- if (splitTunneling) {
+ if (this.splitTunneling) {
this.settings.gui.browsedForSplitTunnelingApplications.forEach((application) => {
- void splitTunneling.addApplicationPathToCache(application);
+ void this.splitTunneling!.addApplicationPathToCache(application);
});
}
}
@@ -1166,18 +1178,6 @@ class ApplicationMain
/* eslint-enable @typescript-eslint/member-ordering */
}
-function importSplitTunneling() {
- if (process.platform === 'win32') {
- // eslint-disable-next-line @typescript-eslint/no-require-imports
- const { WindowsSplitTunnelingAppListRetriever } = require('./windows-split-tunneling');
- return new WindowsSplitTunnelingAppListRetriever();
- } else if (process.platform === 'darwin') {
- // eslint-disable-next-line @typescript-eslint/no-require-imports
- const { MacOsSplitTunnelingAppListRetriever } = require('./macos-split-tunneling');
- return new MacOsSplitTunnelingAppListRetriever();
- }
-}
-
if (CommandLineOptions.help.match) {
console.log('Mullvad VPN');
console.log('Graphical interface for managing the Mullvad VPN daemon');
diff --git a/desktop/packages/mullvad-vpn/src/main/windows-split-tunneling.ts b/desktop/packages/mullvad-vpn/src/main/windows-split-tunneling.ts
index 4f1df5660a..f8052c8947 100644
--- a/desktop/packages/mullvad-vpn/src/main/windows-split-tunneling.ts
+++ b/desktop/packages/mullvad-vpn/src/main/windows-split-tunneling.ts
@@ -1,9 +1,7 @@
import { app } from 'electron';
import fs from 'fs';
import path from 'path';
-
-// eslint-disable-next-line @typescript-eslint/no-require-imports
-const { readShortcut } = require('win-shortcuts');
+import { readShortcut } from 'win-shortcuts';
import {
ISplitTunnelingApplication,