commit b41890cc836e00fc43f9e84814fcc0368817341d
parent 5fcd759bdebb2d224825014c169eafdfefc13b3c
Author: triesap <tyson@radroots.org>
Date: Sat, 28 Mar 2026 19:27:44 +0000
app: roll back remote signer activation drift
Diffstat:
3 files changed, 51 insertions(+), 15 deletions(-)
diff --git a/crates/android/src/remote_signer.rs b/crates/android/src/remote_signer.rs
@@ -228,11 +228,23 @@ fn activate_remote_session(
)
.map_err(|source| source.to_string())?;
let store_path = sessions_path()?;
- let mut state = load_sessions(store_path.as_path())?;
- state
- .activate_session(client_account_id, user_identity.clone())
- .ok_or_else(|| "pending remote signer session disappeared before activation".to_owned())?;
- save_sessions(store_path.as_path(), &state)?;
+ let activation_result = (|| -> Result<(), String> {
+ let mut state = load_sessions(store_path.as_path())?;
+ state
+ .activate_session(client_account_id, user_identity.clone())
+ .ok_or_else(|| {
+ "pending remote signer session disappeared before activation".to_owned()
+ })?;
+ save_sessions(store_path.as_path(), &state)
+ })();
+ if let Err(error) = activation_result {
+ if let Err(rollback_error) = manager.remove_account(&user_identity.id) {
+ return Err(format!(
+ "{error}. remote signer account rollback needs retry: {rollback_error}"
+ ));
+ }
+ return Err(error);
+ }
Ok(IdentityGateState::Ready {
account_id: user_identity.id.to_string(),
})
diff --git a/crates/desktop/src/remote_signer.rs b/crates/desktop/src/remote_signer.rs
@@ -227,11 +227,23 @@ fn activate_remote_session(
)
.map_err(|source| source.to_string())?;
let store_path = sessions_path()?;
- let mut state = load_sessions(store_path.as_path())?;
- state
- .activate_session(client_account_id, user_identity.clone())
- .ok_or_else(|| "pending remote signer session disappeared before activation".to_owned())?;
- save_sessions(store_path.as_path(), &state)?;
+ let activation_result = (|| -> Result<(), String> {
+ let mut state = load_sessions(store_path.as_path())?;
+ state
+ .activate_session(client_account_id, user_identity.clone())
+ .ok_or_else(|| {
+ "pending remote signer session disappeared before activation".to_owned()
+ })?;
+ save_sessions(store_path.as_path(), &state)
+ })();
+ if let Err(error) = activation_result {
+ if let Err(rollback_error) = manager.remove_account(&user_identity.id) {
+ return Err(format!(
+ "{error}. remote signer account rollback needs retry: {rollback_error}"
+ ));
+ }
+ return Err(error);
+ }
Ok(IdentityGateState::Ready {
account_id: user_identity.id.to_string(),
})
diff --git a/crates/ios/src/remote_signer.rs b/crates/ios/src/remote_signer.rs
@@ -228,11 +228,23 @@ fn activate_remote_session(
)
.map_err(|source| source.to_string())?;
let store_path = sessions_path()?;
- let mut state = load_sessions(store_path.as_path())?;
- state
- .activate_session(client_account_id, user_identity.clone())
- .ok_or_else(|| "pending remote signer session disappeared before activation".to_owned())?;
- save_sessions(store_path.as_path(), &state)?;
+ let activation_result = (|| -> Result<(), String> {
+ let mut state = load_sessions(store_path.as_path())?;
+ state
+ .activate_session(client_account_id, user_identity.clone())
+ .ok_or_else(|| {
+ "pending remote signer session disappeared before activation".to_owned()
+ })?;
+ save_sessions(store_path.as_path(), &state)
+ })();
+ if let Err(error) = activation_result {
+ if let Err(rollback_error) = manager.remove_account(&user_identity.id) {
+ return Err(format!(
+ "{error}. remote signer account rollback needs retry: {rollback_error}"
+ ));
+ }
+ return Err(error);
+ }
Ok(IdentityGateState::Ready {
account_id: user_identity.id.to_string(),
})