diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-12-07 13:42:14 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2022-03-14 12:08:47 +0100 |
| commit | 02774dc79db69e8cca343ff659688368198857e5 (patch) | |
| tree | f851dfe17dbe9cb5830d0c06ff7b64dda515c8fc | |
| parent | 3e7bffc747fa61a8f3774b3ab2dbc9ea8c83e586 (diff) | |
| download | mullvadvpn-02774dc79db69e8cca343ff659688368198857e5.tar.xz mullvadvpn-02774dc79db69e8cca343ff659688368198857e5.zip | |
Add 'remote' boolean to device event
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 17 | ||||
| -rw-r--r-- | mullvad-management-interface/proto/management_interface.proto | 1 | ||||
| -rw-r--r-- | mullvad-management-interface/src/types.rs | 3 | ||||
| -rw-r--r-- | mullvad-types/src/device.rs | 33 |
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, } } } |
