From 4b70a761f4d1dc2be59bbca62f6c156e7d37e832 Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Fri, 6 Jan 2023 15:11:34 +1300 Subject: [PATCH] BusMessage.target is no longer needed (it is now always overlord) --- src/comms.rs | 3 - src/main.rs | 1 - src/overlord/minion/mod.rs | 1 - src/overlord/mod.rs | 300 ++++++++++++++++++------------------- src/ui/feed.rs | 6 - src/ui/people/follow.rs | 3 - src/ui/people/person.rs | 1 - src/ui/relays.rs | 2 - src/ui/settings.rs | 1 - src/ui/you.rs | 5 - 10 files changed, 146 insertions(+), 177 deletions(-) diff --git a/src/comms.rs b/src/comms.rs index 3710d30c..9bbb047d 100644 --- a/src/comms.rs +++ b/src/comms.rs @@ -6,9 +6,6 @@ use zeroize::Zeroize; /// This is a message sent to the Overlord #[derive(Debug, Clone, Serialize)] pub struct BusMessage { - /// Indended recipient of the message - pub target: String, - /// What kind of message is this pub kind: String, diff --git a/src/main.rs b/src/main.rs index be0a00c9..d350f842 100644 --- a/src/main.rs +++ b/src/main.rs @@ -93,7 +93,6 @@ async fn tokio_main() { pub fn initiate_shutdown() -> Result<(), Error> { let to_overlord = GLOBALS.to_overlord.clone(); let _ = to_overlord.send(BusMessage { - target: "all".to_string(), kind: "shutdown".to_string(), json_payload: serde_json::to_string("").unwrap(), }); // ignore errors diff --git a/src/overlord/minion/mod.rs b/src/overlord/minion/mod.rs index 7c5d552f..dbcfa9ad 100644 --- a/src/overlord/minion/mod.rs +++ b/src/overlord/minion/mod.rs @@ -263,7 +263,6 @@ impl Minion { async fn tell_overlord_we_are_ready(&self) -> Result<(), Error> { self.to_overlord.send(BusMessage { - target: "overlord".to_string(), kind: "minion_is_ready".to_string(), json_payload: "".to_owned(), })?; diff --git a/src/overlord/mod.rs b/src/overlord/mod.rs index e3888579..c121bef5 100644 --- a/src/overlord/mod.rs +++ b/src/overlord/mod.rs @@ -357,172 +357,164 @@ impl Overlord { async fn handle_bus_message(&mut self, bus_message: BusMessage) -> Result { #[allow(clippy::single_match)] // because temporarily so - match &*bus_message.target { - "all" => match &*bus_message.kind { - "shutdown" => { - tracing::info!("Overlord shutting down"); - return Ok(false); + match &*bus_message.kind { + "shutdown" => { + tracing::info!("Overlord shutting down"); + return Ok(false); + } + "minion_is_ready" => {} + "save_settings" => { + GLOBALS.settings.read().await.save().await?; + tracing::debug!("Settings saved."); + } + "get_missing_events" => { + self.get_missing_events().await?; + } + "follow_nip35" => { + let dns_id: String = serde_json::from_str(&bus_message.json_payload)?; + let _ = tokio::spawn(async move { + if let Err(e) = Overlord::get_and_follow_nip35(dns_id).await { + tracing::error!("{}", e); + } + }); + } + "follow_bech32" => { + let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?; + Overlord::follow_bech32(data.0, data.1).await?; + } + "follow_hexkey" => { + let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?; + Overlord::follow_hexkey(data.0, data.1).await?; + } + "unlock_key" => { + let mut password: String = serde_json::from_str(&bus_message.json_payload)?; + GLOBALS + .signer + .write() + .await + .unlock_encrypted_private_key(&password)?; + password.zeroize(); + + // Update public key from private key + let public_key = GLOBALS.signer.read().await.public_key().unwrap(); + { + let mut settings = GLOBALS.settings.write().await; + settings.public_key = Some(public_key); + settings.save().await?; } - _ => {} - }, - "overlord" => match &*bus_message.kind { - "minion_is_ready" => {} - "save_settings" => { - GLOBALS.settings.read().await.save().await?; - tracing::debug!("Settings saved."); - } - "get_missing_events" => { - self.get_missing_events().await?; - } - "follow_nip35" => { - let dns_id: String = serde_json::from_str(&bus_message.json_payload)?; - let _ = tokio::spawn(async move { - if let Err(e) = Overlord::get_and_follow_nip35(dns_id).await { - tracing::error!("{}", e); - } - }); - } - "follow_bech32" => { - let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?; - Overlord::follow_bech32(data.0, data.1).await?; - } - "follow_hexkey" => { - let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?; - Overlord::follow_hexkey(data.0, data.1).await?; - } - "unlock_key" => { - let mut password: String = serde_json::from_str(&bus_message.json_payload)?; + } + "generate_private_key" => { + let mut password: String = serde_json::from_str(&bus_message.json_payload)?; + GLOBALS + .signer + .write() + .await + .generate_private_key(&password)?; + password.zeroize(); + GLOBALS.signer.read().await.save_through_settings().await?; + } + "import_priv" => { + let (mut import_priv, mut password): (String, String) = + serde_json::from_str(&bus_message.json_payload)?; + let maybe_pk1 = PrivateKey::try_from_bech32_string(&import_priv); + let maybe_pk2 = PrivateKey::try_from_hex_string(&import_priv); + import_priv.zeroize(); + if maybe_pk1.is_err() && maybe_pk2.is_err() { + password.zeroize(); + *GLOBALS.status_message.write().await = + "Private key not recognized.".to_owned(); + } else { + let privkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap()); GLOBALS .signer .write() .await - .unlock_encrypted_private_key(&password)?; + .set_private_key(privkey, &password)?; password.zeroize(); - - // Update public key from private key - let public_key = GLOBALS.signer.read().await.public_key().unwrap(); + GLOBALS.signer.read().await.save_through_settings().await?; + } + } + "import_pub" => { + let pubstr: String = serde_json::from_str(&bus_message.json_payload)?; + let maybe_pk1 = PublicKey::try_from_bech32_string(&pubstr); + let maybe_pk2 = PublicKey::try_from_hex_string(&pubstr); + if maybe_pk1.is_err() && maybe_pk2.is_err() { + *GLOBALS.status_message.write().await = "Public key not recognized.".to_owned(); + } else { + let pubkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap()); + GLOBALS.signer.write().await.set_public_key(pubkey); + GLOBALS.signer.read().await.save_through_settings().await?; + } + } + "delete_pub" => { + GLOBALS.signer.write().await.clear_public_key(); + GLOBALS.signer.read().await.save_through_settings().await?; + } + "save_relays" => { + let dirty_relays: Vec = GLOBALS + .relays + .read() + .await + .iter() + .filter_map(|(_, r)| if r.dirty { Some(r.to_owned()) } else { None }) + .collect(); + tracing::info!("Saving {} relays", dirty_relays.len()); + for relay in dirty_relays.iter() { + // Just update 'post' since that's all 'dirty' indicates currently + DbRelay::update_post(relay.url.to_owned(), relay.post).await?; + if let Some(relay) = GLOBALS.relays.write().await.get_mut(&Url::new(&relay.url)) { - let mut settings = GLOBALS.settings.write().await; - settings.public_key = Some(public_key); - settings.save().await?; + relay.dirty = false; } } - "generate_private_key" => { - let mut password: String = serde_json::from_str(&bus_message.json_payload)?; - GLOBALS - .signer - .write() - .await - .generate_private_key(&password)?; - password.zeroize(); - GLOBALS.signer.read().await.save_through_settings().await?; - } - "import_priv" => { - let (mut import_priv, mut password): (String, String) = - serde_json::from_str(&bus_message.json_payload)?; - let maybe_pk1 = PrivateKey::try_from_bech32_string(&import_priv); - let maybe_pk2 = PrivateKey::try_from_hex_string(&import_priv); - import_priv.zeroize(); - if maybe_pk1.is_err() && maybe_pk2.is_err() { - password.zeroize(); - *GLOBALS.status_message.write().await = - "Private key not recognized.".to_owned(); - } else { - let privkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap()); - GLOBALS - .signer - .write() - .await - .set_private_key(privkey, &password)?; - password.zeroize(); - GLOBALS.signer.read().await.save_through_settings().await?; - } - } - "import_pub" => { - let pubstr: String = serde_json::from_str(&bus_message.json_payload)?; - let maybe_pk1 = PublicKey::try_from_bech32_string(&pubstr); - let maybe_pk2 = PublicKey::try_from_hex_string(&pubstr); - if maybe_pk1.is_err() && maybe_pk2.is_err() { - *GLOBALS.status_message.write().await = - "Public key not recognized.".to_owned(); - } else { - let pubkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap()); - GLOBALS.signer.write().await.set_public_key(pubkey); - GLOBALS.signer.read().await.save_through_settings().await?; - } - } - "delete_pub" => { - GLOBALS.signer.write().await.clear_public_key(); - GLOBALS.signer.read().await.save_through_settings().await?; - } - "save_relays" => { - let dirty_relays: Vec = GLOBALS - .relays - .read() - .await - .iter() - .filter_map(|(_, r)| if r.dirty { Some(r.to_owned()) } else { None }) - .collect(); - tracing::info!("Saving {} relays", dirty_relays.len()); - for relay in dirty_relays.iter() { - // Just update 'post' since that's all 'dirty' indicates currently - DbRelay::update_post(relay.url.to_owned(), relay.post).await?; - if let Some(relay) = - GLOBALS.relays.write().await.get_mut(&Url::new(&relay.url)) - { - relay.dirty = false; - } - } - } - "post_textnote" => { - let content: String = serde_json::from_str(&bus_message.json_payload)?; - self.post_textnote(content).await?; - } - "post_reply" => { - let (content, reply_to): (String, Id) = - serde_json::from_str(&bus_message.json_payload)?; - self.post_reply(content, reply_to).await?; - } - "like" => { - let (id, pubkey): (Id, PublicKey) = - serde_json::from_str(&bus_message.json_payload)?; - self.post_like(id, pubkey).await?; - } - "process_incoming_events" => { - // Clear new events - GLOBALS.event_is_new.write().await.clear(); + } + "post_textnote" => { + let content: String = serde_json::from_str(&bus_message.json_payload)?; + self.post_textnote(content).await?; + } + "post_reply" => { + let (content, reply_to): (String, Id) = + serde_json::from_str(&bus_message.json_payload)?; + self.post_reply(content, reply_to).await?; + } + "like" => { + let (id, pubkey): (Id, PublicKey) = + serde_json::from_str(&bus_message.json_payload)?; + self.post_like(id, pubkey).await?; + } + "process_incoming_events" => { + // Clear new events + GLOBALS.event_is_new.write().await.clear(); - let _ = tokio::spawn(async move { - for (event, url, sub) in GLOBALS.incoming_events.write().await.drain(..) { - let _ = crate::process::process_new_event(&event, true, Some(url), sub) - .await; - } + let _ = tokio::spawn(async move { + for (event, url, sub) in GLOBALS.incoming_events.write().await.drain(..) { + let _ = + crate::process::process_new_event(&event, true, Some(url), sub).await; + } + }); + } + "add_relay" => { + let relay_str: String = serde_json::from_str(&bus_message.json_payload)?; + let dbrelay = DbRelay::new(relay_str)?; + DbRelay::insert(dbrelay).await?; + } + "update_metadata" => { + let pubkey: PublicKeyHex = serde_json::from_str(&bus_message.json_payload)?; + let person_relays = DbPersonRelay::fetch_for_pubkeys(&[pubkey.clone()]).await?; + + for person_relay in person_relays.iter() { + // Start a minion for this relay if there is none + if !self.urls_watching.contains(&Url::new(&person_relay.relay)) { + self.start_minion(person_relay.relay.clone()).await?; + } + + // Subscribe to metadata and contact lists for this person + let _ = self.to_minions.send(ToMinionMessage { + target: person_relay.relay.to_string(), + payload: ToMinionPayload::TempSubscribeMetadata(pubkey.clone()), }); } - "add_relay" => { - let relay_str: String = serde_json::from_str(&bus_message.json_payload)?; - let dbrelay = DbRelay::new(relay_str)?; - DbRelay::insert(dbrelay).await?; - } - "update_metadata" => { - let pubkey: PublicKeyHex = serde_json::from_str(&bus_message.json_payload)?; - let person_relays = DbPersonRelay::fetch_for_pubkeys(&[pubkey.clone()]).await?; - - for person_relay in person_relays.iter() { - // Start a minion for this relay if there is none - if !self.urls_watching.contains(&Url::new(&person_relay.relay)) { - self.start_minion(person_relay.relay.clone()).await?; - } - - // Subscribe to metadata and contact lists for this person - let _ = self.to_minions.send(ToMinionMessage { - target: person_relay.relay.to_string(), - payload: ToMinionPayload::TempSubscribeMetadata(pubkey.clone()), - }); - } - } - _ => {} - }, + } _ => {} } diff --git a/src/ui/feed.rs b/src/ui/feed.rs index 9c27937e..3e22436a 100644 --- a/src/ui/feed.rs +++ b/src/ui/feed.rs @@ -86,7 +86,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "get_missing_events".to_string(), json_payload: serde_json::to_string("").unwrap(), }); @@ -100,7 +99,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "process_incoming_events".to_string(), json_payload: serde_json::to_string("").unwrap(), }); @@ -156,7 +154,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram match app.replying_to { Some(_id) => { let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "post_reply".to_string(), json_payload: serde_json::to_string(&( &app.draft, @@ -167,7 +164,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram } None => { let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "post_textnote".to_string(), json_payload: serde_json::to_string(&app.draft).unwrap(), }); @@ -457,7 +453,6 @@ fn render_post_actual( } if ui.button("Update Metadata").clicked() { let _ = GLOBALS.to_overlord.send(BusMessage { - target: "overlord".to_string(), kind: "update_metadata".to_string(), json_payload: serde_json::to_string( &event.pubkey.as_hex_string(), @@ -504,7 +499,6 @@ fn render_post_actual( if ui.add(LikeButton {}).clicked() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "like".to_string(), json_payload: serde_json::to_string(&(&event.id, &event.pubkey)) .unwrap(), diff --git a/src/ui/people/follow.rs b/src/ui/people/follow.rs index bb4b9af8..ddd14cbb 100644 --- a/src/ui/people/follow.rs +++ b/src/ui/people/follow.rs @@ -26,7 +26,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if ui.button("follow").clicked() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "follow_nip35".to_string(), json_payload: serde_json::to_string(&app.nip35follow).unwrap(), }); @@ -50,7 +49,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if ui.button("follow").clicked() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "follow_bech32".to_string(), json_payload: serde_json::to_string(&( &app.follow_bech32_pubkey, @@ -79,7 +77,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if ui.button("follow").clicked() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "follow_hexkey".to_string(), json_payload: serde_json::to_string(&( &app.follow_hex_pubkey, diff --git a/src/ui/people/person.rs b/src/ui/people/person.rs index 6ef4f720..c0d313a7 100644 --- a/src/ui/people/person.rs +++ b/src/ui/people/person.rs @@ -58,7 +58,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra if ui.button("UPDATE METADATA").clicked() { let _ = GLOBALS.to_overlord.send(BusMessage { - target: "overlord".to_string(), kind: "update_metadata".to_string(), json_payload: serde_json::to_string(&pubkeyhex).unwrap(), }); diff --git a/src/ui/relays.rs b/src/ui/relays.rs index ffdec8fd..40eeb2de 100644 --- a/src/ui/relays.rs +++ b/src/ui/relays.rs @@ -26,7 +26,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if test_url.is_valid_relay_url() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "add_relay".to_string(), json_payload: serde_json::to_string(&app.new_relay_url).unwrap(), }); @@ -63,7 +62,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if ui.button("SAVE CHANGES").clicked() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "save_relays".to_string(), json_payload: serde_json::to_string("").unwrap(), }); diff --git a/src/ui/settings.rs b/src/ui/settings.rs index 7e712af6..881a21dd 100644 --- a/src/ui/settings.rs +++ b/src/ui/settings.rs @@ -153,7 +153,6 @@ pub(super) fn update( // Tell the overlord to save them let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "save_settings".to_string(), json_payload: serde_json::to_string("").unwrap(), }); diff --git a/src/ui/you.rs b/src/ui/you.rs index a3cb0e8f..f15d1bc1 100644 --- a/src/ui/you.rs +++ b/src/ui/you.rs @@ -143,7 +143,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if ui.button("Unlock Private Key").clicked() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "unlock_key".to_string(), json_payload: serde_json::to_string(&app.password).unwrap(), }); @@ -160,7 +159,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if ui.button("Generate Now").clicked() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "generate_private_key".to_string(), json_payload: serde_json::to_string(&app.password).unwrap(), }); @@ -189,7 +187,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if ui.button("import").clicked() { let tx = GLOBALS.to_overlord.clone(); let _ = tx.send(BusMessage { - target: "overlord".to_string(), kind: "import_priv".to_string(), json_payload: serde_json::to_string(&(&app.import_priv, &app.password)).unwrap(), }); @@ -228,7 +225,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr if ui.button("Delete this public key").clicked() { let _ = GLOBALS.to_overlord.send(BusMessage { - target: "overlord".to_string(), kind: "delete_pub".to_string(), json_payload: serde_json::to_string(&app.import_pub).unwrap(), }); @@ -239,7 +235,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr ui.add(TextEdit::singleline(&mut app.import_pub).hint_text("npub1 or hex")); if ui.button("Import a Public Key").clicked() { let _ = GLOBALS.to_overlord.send(BusMessage { - target: "overlord".to_string(), kind: "import_pub".to_string(), json_payload: serde_json::to_string(&app.import_pub).unwrap(), });