summaryrefslogtreecommitdiffhomepage
path: root/gui/src
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2024-06-18 11:35:41 +0200
committerMarkus Pettersson <markus.pettersson@mullvad.net>2024-06-20 13:04:40 +0200
commit751026be2029636e491b6c8d22b979a33fa7cec1 (patch)
tree19cccc1f2add8354813da929f63eaa46444240f4 /gui/src
parent397d094c516802e39a34282bf58a1121b85bcace (diff)
downloadmullvadvpn-751026be2029636e491b6c8d22b979a33fa7cec1.tar.xz
mullvadvpn-751026be2029636e491b6c8d22b979a33fa7cec1.zip
Add `PrepareRestartv2` gRPC call
- Add option to automatically shutdown daemon on after running through the same safety routine as `PrepareRestart`. This is exposed via a new gRPC call called `PrepareRestartV2`. - Add help text for enabling full disk access to the CLI
Diffstat (limited to 'gui/src')
-rw-r--r--gui/src/main/daemon-rpc.ts4
-rw-r--r--gui/src/main/index.ts6
-rw-r--r--gui/src/main/tunnel-state.ts13
3 files changed, 21 insertions, 2 deletions
diff --git a/gui/src/main/daemon-rpc.ts b/gui/src/main/daemon-rpc.ts
index e8f8d96e18..3461a85ac5 100644
--- a/gui/src/main/daemon-rpc.ts
+++ b/gui/src/main/daemon-rpc.ts
@@ -568,6 +568,10 @@ export class DaemonRpc {
await this.callEmpty(this.client.updateDevice);
}
+ public async prepareRestart(quit: boolean) {
+ await this.callBool(this.client.prepareRestartV2, quit);
+ }
+
public async setDaitaSettings(daitaSettings: IDaitaSettings): Promise<void> {
const grpcDaitaSettings = new grpcTypes.DaitaSettings();
grpcDaitaSettings.setEnabled(daitaSettings.enabled);
diff --git a/gui/src/main/index.ts b/gui/src/main/index.ts
index ded7ea6ede..b96bc07f12 100644
--- a/gui/src/main/index.ts
+++ b/gui/src/main/index.ts
@@ -321,7 +321,11 @@ class ApplicationMain
}
};
- private onBeforeQuit = (event: Electron.Event) => {
+ private onBeforeQuit = async (event: Electron.Event) => {
+ if (this.tunnelState.hasReceivedFullDiskAccessError) {
+ await this.daemonRpc.prepareRestart(true);
+ }
+
log.info('before-quit received');
if (this.quitInitiated) {
event.preventDefault();
diff --git a/gui/src/main/tunnel-state.ts b/gui/src/main/tunnel-state.ts
index 6829118818..297a7e481e 100644
--- a/gui/src/main/tunnel-state.ts
+++ b/gui/src/main/tunnel-state.ts
@@ -1,5 +1,5 @@
import { connectEnabled, disconnectEnabled, reconnectEnabled } from '../shared/connect-helper';
-import { ILocation, TunnelState } from '../shared/daemon-rpc-types';
+import { ErrorStateCause, ILocation, TunnelState } from '../shared/daemon-rpc-types';
import { Scheduler } from '../shared/scheduler';
export interface TunnelStateProvider {
@@ -20,10 +20,15 @@ export default class TunnelStateHandler {
// Scheduler for discarding the assumed next state.
private tunnelStateFallbackScheduler = new Scheduler();
+ private receivedFullDiskAccessError = false;
+
private lastKnownDisconnectedLocation: Partial<ILocation> | undefined;
public constructor(private delegate: TunnelStateHandlerDelegate) {}
+ public get hasReceivedFullDiskAccessError() {
+ return this.receivedFullDiskAccessError;
+ }
public get tunnelState() {
return this.tunnelStateValue;
}
@@ -53,6 +58,12 @@ export default class TunnelStateHandler {
}
public handleNewTunnelState(newState: TunnelState) {
+ if (newState.state === 'error' && newState.details) {
+ if (newState.details.cause === ErrorStateCause.needFullDiskPermissions) {
+ this.receivedFullDiskAccessError = true;
+ }
+ }
+
// If there's a fallback state set then the app is in an assumed next state and need to check
// if it's now reached or if the current state should be ignored and set as the fallback state.
if (this.tunnelStateFallback) {