fix(mesh): nuclear clear-all wipes state files + shared secrets
Some checks failed
Build Archipelago ISO (dev) / build-iso (push) Failing after 20s
Some checks failed
Build Archipelago ISO (dev) / build-iso (push) Failing after 20s
Clear All now deletes messages.json, mesh-contacts.json, sessions.json, mesh-outbox.json and clears shared secrets for a truly clean slate. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -216,38 +216,36 @@ impl RpcHandler {
|
||||
}
|
||||
}
|
||||
|
||||
/// mesh.clear-all — Clear all peers, messages, contacts, and presence data.
|
||||
/// Resets the mesh state to a fresh start while keeping the device connected.
|
||||
/// mesh.clear-all — Nuclear reset: wipe all mesh state files and restart
|
||||
/// the service for a completely clean slate.
|
||||
pub(in crate::api::rpc) async fn handle_mesh_clear_all(&self) -> Result<serde_json::Value> {
|
||||
let data_dir = self.config.data_dir.clone();
|
||||
// Delete all mesh state files
|
||||
for filename in &[
|
||||
"messages.json",
|
||||
"mesh-contacts.json",
|
||||
"sessions.json",
|
||||
"mesh-outbox.json",
|
||||
] {
|
||||
let _ = tokio::fs::remove_file(data_dir.join(filename)).await;
|
||||
}
|
||||
// Clear in-memory state
|
||||
let service = self.mesh_service.read().await;
|
||||
if let Some(svc) = service.as_ref() {
|
||||
let state = svc.state();
|
||||
// Clear peers (except synthetic federation peers)
|
||||
state.peers.write().await.clear();
|
||||
// Clear all messages
|
||||
state.messages.write().await.clear();
|
||||
// Clear contacts
|
||||
state.contacts.write().await.clear();
|
||||
// Clear presence
|
||||
state.presence.write().await.clear();
|
||||
// Clear chunk buffer
|
||||
state.chunk_buffer.write().await.clear();
|
||||
state.shared_secrets.write().await.clear();
|
||||
// Re-seed federation peers
|
||||
let data_dir = self.config.data_dir.clone();
|
||||
crate::mesh::seed_federation_peers_into_mesh(state, &data_dir).await;
|
||||
// Delete persisted messages file
|
||||
let msg_file = data_dir.join("messages.json");
|
||||
let _ = tokio::fs::remove_file(&msg_file).await;
|
||||
// Delete persisted contacts file
|
||||
let contacts_file = data_dir.join("mesh-contacts.json");
|
||||
let _ = tokio::fs::remove_file(&contacts_file).await;
|
||||
// Trigger a contact refresh from the radio device
|
||||
let _ = state.send_cmd(
|
||||
crate::mesh::listener::MeshCommand::RefreshContacts,
|
||||
).await;
|
||||
Ok(serde_json::json!({ "status": "cleared" }))
|
||||
} else {
|
||||
Ok(serde_json::json!({ "status": "no_service" }))
|
||||
}
|
||||
Ok(serde_json::json!({ "status": "cleared" }))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user