diff --git a/services/identity/src/database/device_list.rs b/services/identity/src/database/device_list.rs --- a/services/identity/src/database/device_list.rs +++ b/services/identity/src/database/device_list.rs @@ -17,6 +17,7 @@ use serde::Serialize; use tracing::{debug, error, trace, warn}; +use crate::error::consume_error; use crate::{ client_service::FlattenedDeviceKeyUpload, constants::{ @@ -1353,6 +1354,16 @@ self .delete_otks_table_rows_for_user_device(user_id, &device_id) .await?; + + let device_id = device_id.to_string(); + tokio::spawn(async move { + debug!( + "Attempting to delete Tunnelbroker data for device: {}", + &device_id + ); + let result = crate::tunnelbroker::delete_device_data(&device_id).await; + consume_error(result); + }); } Ok(update_result) diff --git a/services/identity/src/grpc_services/authenticated.rs b/services/identity/src/grpc_services/authenticated.rs --- a/services/identity/src/grpc_services/authenticated.rs +++ b/services/identity/src/grpc_services/authenticated.rs @@ -93,6 +93,18 @@ Ok((user_id, device_id)) } +fn spawn_delete_tunnelbroker_data_task(device_id: &str) { + let device_id = device_id.to_string(); + tokio::spawn(async move { + debug!( + "Attempting to delete Tunnelbroker data for device: {}", + &device_id + ); + let result = crate::tunnelbroker::delete_device_data(&device_id).await; + consume_error(result); + }); +} + #[tonic::async_trait] impl IdentityClientService for AuthenticatedService { #[tracing::instrument(skip_all)] @@ -373,7 +385,7 @@ self .db_client - .delete_access_token_data(&user_id, device_id) + .delete_access_token_data(&user_id, &device_id) .await .map_err(handle_db_error)?; @@ -411,6 +423,8 @@ consume_error(result); }); + spawn_delete_tunnelbroker_data_task(&device_id); + let response = Empty {}; Ok(Response::new(response)) } @@ -446,6 +460,8 @@ .await .map_err(handle_db_error)?; + spawn_delete_tunnelbroker_data_task(&device_id); + let response = Empty {}; Ok(Response::new(response)) } diff --git a/services/identity/src/tunnelbroker.rs b/services/identity/src/tunnelbroker.rs --- a/services/identity/src/tunnelbroker.rs +++ b/services/identity/src/tunnelbroker.rs @@ -2,7 +2,7 @@ use grpc_clients::tunnelbroker::create_tunnelbroker_client as shared_tb_client; use grpc_clients::tunnelbroker::protos; use protos::tunnelbroker_service_client::TunnelbrokerServiceClient; -use protos::{Empty, MessageToDevice}; +use protos::{DeleteDeviceDataRequest, Empty, MessageToDevice}; use tonic::transport::Channel; use tonic::Response; use tonic::Status; @@ -72,3 +72,15 @@ Ok(()) } + +pub async fn delete_device_data( + device_id: &str, +) -> Result, Error> { + let mut tunnelbroker_client = create_tunnelbroker_client().await?; + + let request = DeleteDeviceDataRequest { + device_id: device_id.to_string(), + }; + let grpc_message = tonic::Request::new(request); + Ok(tunnelbroker_client.delete_device_data(grpc_message).await?) +}