summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-12-07 13:42:14 +0100
committerDavid Lönnhager <david.l@mullvad.net>2022-03-14 12:08:47 +0100
commit02774dc79db69e8cca343ff659688368198857e5 (patch)
treef851dfe17dbe9cb5830d0c06ff7b64dda515c8fc
parent3e7bffc747fa61a8f3774b3ab2dbc9ea8c83e586 (diff)
downloadmullvadvpn-02774dc79db69e8cca343ff659688368198857e5.tar.xz
mullvadvpn-02774dc79db69e8cca343ff659688368198857e5.zip
Add 'remote' boolean to device event
-rw-r--r--mullvad-daemon/src/lib.rs17
-rw-r--r--mullvad-management-interface/proto/management_interface.proto1
-rw-r--r--mullvad-management-interface/src/types.rs3
-rw-r--r--mullvad-types/src/device.rs33
4 files changed, 36 insertions, 18 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs
index 2c58d93285..b573ca452b 100644
--- a/mullvad-daemon/src/lib.rs
+++ b/mullvad-daemon/src/lib.rs
@@ -1165,11 +1165,13 @@ where
match status {
device::ValidationResult::Valid => (),
device::ValidationResult::Removed => {
- self.event_listener.notify_device_event(DeviceEvent(None));
+ self.event_listener
+ .notify_device_event(DeviceEvent::revoke(true));
}
device::ValidationResult::RotatedKey(_) => {
- self.event_listener.notify_device_event(DeviceEvent::from(
+ self.event_listener.notify_device_event(DeviceEvent::new(
self.account_manager.get(),
+ true,
));
}
}
@@ -1430,7 +1432,7 @@ where
self.schedule_reconnect(WG_RECONNECT_DELAY).await;
}
self.event_listener
- .notify_device_event(DeviceEvent::from(event.0));
+ .notify_device_event(DeviceEvent::from_device(event.0, false));
}
async fn handle_device_migration_event(&mut self, data: DeviceData) {
@@ -1438,7 +1440,7 @@ where
// Discard stale device
return;
}
- let event = DeviceEvent::from(data.clone());
+ let event = DeviceEvent::from_device(data.clone(), false);
self.account_manager.set(data);
self.reconnect_tunnel();
self.event_listener.notify_device_event(event);
@@ -1708,11 +1710,12 @@ where
.await
.map_err(Error::LoginError)?;
self.event_listener
- .notify_device_event(DeviceEvent::from(device_data));
+ .notify_device_event(DeviceEvent::from_device(device_data, false));
}
None => {
self.account_manager.logout();
- self.event_listener.notify_device_event(DeviceEvent(None));
+ self.event_listener
+ .notify_device_event(DeviceEvent::revoke(false));
}
}
@@ -2388,7 +2391,7 @@ where
async fn on_rotate_wireguard_key(&mut self, tx: ResponseTx<(), Error>) {
let result = self.account_manager.rotate_key().await;
if let Ok(ref _wg_data) = result {
- let device = DeviceEvent::from(self.account_manager.get());
+ let device = DeviceEvent::new(self.account_manager.get(), false);
self.event_listener.notify_device_event(device);
}
let _ = tx.send(result.map(|_| ()).map_err(Error::KeyRotationError));
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto
index 382cd1f046..9f0b3b7109 100644
--- a/mullvad-management-interface/proto/management_interface.proto
+++ b/mullvad-management-interface/proto/management_interface.proto
@@ -546,6 +546,7 @@ message DeviceRemoval {
message DeviceEvent {
DeviceConfig device = 1;
+ bool remote = 2;
}
message RemoveDeviceEvent {
diff --git a/mullvad-management-interface/src/types.rs b/mullvad-management-interface/src/types.rs
index b1241e50b3..b9cbef3ed5 100644
--- a/mullvad-management-interface/src/types.rs
+++ b/mullvad-management-interface/src/types.rs
@@ -210,10 +210,11 @@ impl From<mullvad_types::device::Device> for Device {
impl From<mullvad_types::device::DeviceEvent> for DeviceEvent {
fn from(event: mullvad_types::device::DeviceEvent) -> Self {
DeviceEvent {
- device: event.0.map(|(account_token, device)| DeviceConfig {
+ device: event.device.map(|(account_token, device)| DeviceConfig {
account_token,
device: Some(Device::from(device)),
}),
+ remote: event.remote,
}
}
}
diff --git a/mullvad-types/src/device.rs b/mullvad-types/src/device.rs
index cf26bd98db..0ef6a4d753 100644
--- a/mullvad-types/src/device.rs
+++ b/mullvad-types/src/device.rs
@@ -67,19 +67,32 @@ impl From<DeviceData> for DeviceConfig {
/// Emitted when logging in or out of an account, or when the device changes.
#[derive(Clone, Debug)]
-pub struct DeviceEvent(pub Option<(AccountToken, Device)>);
+pub struct DeviceEvent {
+ /// Device that was affected.
+ pub device: Option<(AccountToken, Device)>,
+ /// Indicates whether the change was initiated remotely or by the daemon.
+ pub remote: bool,
+}
-impl From<DeviceData> for DeviceEvent {
- fn from(data: DeviceData) -> DeviceEvent {
- DeviceEvent(Some((data.token, data.device)))
+impl DeviceEvent {
+ pub fn new(data: Option<DeviceData>, remote: bool) -> DeviceEvent {
+ DeviceEvent {
+ device: data.map(|data| (data.token, data.device)),
+ remote,
+ }
+ }
+
+ pub fn from_device(data: DeviceData, remote: bool) -> DeviceEvent {
+ DeviceEvent {
+ device: Some((data.token, data.device)),
+ remote,
+ }
}
-}
-impl From<Option<DeviceData>> for DeviceEvent {
- fn from(data: Option<DeviceData>) -> DeviceEvent {
- match data {
- Some(data) => DeviceEvent::from(data),
- None => DeviceEvent(None),
+ pub fn revoke(remote: bool) -> Self {
+ Self {
+ device: None,
+ remote,
}
}
}