rename BusMessage to ToOverlordMessage

This commit is contained in:
Mike Dilger 2023-01-06 15:12:36 +13:00
parent 4b70a761f4
commit b997ca8668
12 changed files with 62 additions and 63 deletions

View File

@ -5,7 +5,7 @@ use zeroize::Zeroize;
/// This is a message sent to the Overlord
#[derive(Debug, Clone, Serialize)]
pub struct BusMessage {
pub struct ToOverlordMessage {
/// What kind of message is this
pub kind: String,
@ -13,9 +13,9 @@ pub struct BusMessage {
pub json_payload: String,
}
/// We may send passwords through BusMessage objects, so we zeroize
/// We may send passwords through ToOverlordMessage objects, so we zeroize
/// bus message payloads upon drop.
impl Drop for BusMessage {
impl Drop for ToOverlordMessage {
fn drop(&mut self) {
self.json_payload.zeroize();
}

View File

@ -1,4 +1,4 @@
use crate::comms::{BusMessage, ToMinionMessage};
use crate::comms::{ToMinionMessage, ToOverlordMessage};
use thiserror::Error;
#[derive(Error, Debug)]
@ -19,7 +19,7 @@ pub enum Error {
JoinError(#[from] tokio::task::JoinError),
#[error("Error sending mpsc: {0}")]
MpscSend(#[from] tokio::sync::mpsc::error::SendError<BusMessage>),
MpscSend(#[from] tokio::sync::mpsc::error::SendError<ToOverlordMessage>),
#[error("NIP-05 public key not found")]
Nip05NotFound,

View File

@ -1,4 +1,4 @@
use crate::comms::{BusMessage, ToMinionMessage};
use crate::comms::{ToMinionMessage, ToOverlordMessage};
use crate::db::{DbEvent, DbRelay};
use crate::error::Error;
use crate::feed::Feed;
@ -25,11 +25,11 @@ pub struct Globals {
/// This is a mpsc channel. The Overlord listens on it.
/// To create a sender, just clone() it.
pub to_overlord: mpsc::UnboundedSender<BusMessage>,
pub to_overlord: mpsc::UnboundedSender<ToOverlordMessage>,
/// This is ephemeral. It is filled during lazy_static initialization,
/// and stolen away when the Overlord is created.
pub tmp_overlord_receiver: Mutex<Option<mpsc::UnboundedReceiver<BusMessage>>>,
pub tmp_overlord_receiver: Mutex<Option<mpsc::UnboundedReceiver<ToOverlordMessage>>>,
/// All nostr events, keyed by the event Id
pub events: RwLock<HashMap<Id, Event>>,

View File

@ -19,7 +19,7 @@ mod settings;
mod signer;
mod ui;
use crate::comms::BusMessage;
use crate::comms::ToOverlordMessage;
use crate::error::Error;
use crate::globals::GLOBALS;
use std::ops::DerefMut;
@ -92,7 +92,7 @@ async fn tokio_main() {
// Any task can call this to shutdown
pub fn initiate_shutdown() -> Result<(), Error> {
let to_overlord = GLOBALS.to_overlord.clone();
let _ = to_overlord.send(BusMessage {
let _ = to_overlord.send(ToOverlordMessage {
kind: "shutdown".to_string(),
json_payload: serde_json::to_string("").unwrap(),
}); // ignore errors

View File

@ -1,7 +1,7 @@
mod handle_websocket;
mod subscription;
use crate::comms::{BusMessage, ToMinionMessage, ToMinionPayload};
use crate::comms::{ToMinionMessage, ToMinionPayload, ToOverlordMessage};
use crate::db::DbRelay;
use crate::error::Error;
use crate::globals::GLOBALS;
@ -23,7 +23,7 @@ use tungstenite::protocol::{Message as WsMessage, WebSocketConfig};
pub struct Minion {
url: Url,
to_overlord: UnboundedSender<BusMessage>,
to_overlord: UnboundedSender<ToOverlordMessage>,
from_overlord: Receiver<ToMinionMessage>,
dbrelay: DbRelay,
nip11: Option<RelayInformationDocument>,
@ -221,7 +221,7 @@ impl Minion {
};
#[allow(clippy::collapsible_if)]
if to_minion_message.target == self.url.inner() || to_minion_message.target == "all" {
keepgoing = self.handle_bus_message(to_minion_message).await?;
keepgoing = self.handle_message(to_minion_message).await?;
}
},
}
@ -229,7 +229,7 @@ impl Minion {
Ok(keepgoing)
}
pub async fn handle_bus_message(&mut self, message: ToMinionMessage) -> Result<bool, Error> {
pub async fn handle_message(&mut self, message: ToMinionMessage) -> Result<bool, Error> {
match message.payload {
ToMinionPayload::Shutdown => {
tracing::info!("{}: Websocket listener shutting down", &self.url);
@ -262,7 +262,7 @@ impl Minion {
}
async fn tell_overlord_we_are_ready(&self) -> Result<(), Error> {
self.to_overlord.send(BusMessage {
self.to_overlord.send(ToOverlordMessage {
kind: "minion_is_ready".to_string(),
json_payload: "".to_owned(),
})?;

View File

@ -1,7 +1,7 @@
mod minion;
mod relay_picker;
use crate::comms::{BusMessage, ToMinionMessage, ToMinionPayload};
use crate::comms::{ToMinionMessage, ToMinionPayload, ToOverlordMessage};
use crate::db::{DbEvent, DbPersonRelay, DbRelay};
use crate::error::Error;
use crate::globals::{Globals, GLOBALS};
@ -20,7 +20,7 @@ use zeroize::Zeroize;
pub struct Overlord {
to_minions: Sender<ToMinionMessage>,
inbox: UnboundedReceiver<BusMessage>,
inbox: UnboundedReceiver<ToOverlordMessage>,
// All the minion tasks running.
minions: task::JoinSet<()>,
@ -33,7 +33,7 @@ pub struct Overlord {
}
impl Overlord {
pub fn new(inbox: UnboundedReceiver<BusMessage>) -> Overlord {
pub fn new(inbox: UnboundedReceiver<ToOverlordMessage>) -> Overlord {
let to_minions = GLOBALS.to_minions.clone();
Overlord {
to_minions,
@ -276,27 +276,27 @@ impl Overlord {
if self.minions.is_empty() {
// Just listen on inbox
let bus_message = self.inbox.recv().await;
let bus_message = match bus_message {
let message = self.inbox.recv().await;
let message = match message {
Some(bm) => bm,
None => {
// All senders dropped, or one of them closed.
return Ok(false);
}
};
keepgoing = self.handle_bus_message(bus_message).await?;
keepgoing = self.handle_message(message).await?;
} else {
// Listen on inbox, and dying minions
select! {
bus_message = self.inbox.recv() => {
let bus_message = match bus_message {
message = self.inbox.recv() => {
let message = match message {
Some(bm) => bm,
None => {
// All senders dropped, or one of them closed.
return Ok(false);
}
};
keepgoing = self.handle_bus_message(bus_message).await?;
keepgoing = self.handle_message(message).await?;
},
task_nextjoined = self.minions.join_next_with_id() => {
self.handle_task_nextjoined(task_nextjoined).await;
@ -355,9 +355,9 @@ impl Overlord {
}
}
async fn handle_bus_message(&mut self, bus_message: BusMessage) -> Result<bool, Error> {
async fn handle_message(&mut self, message: ToOverlordMessage) -> Result<bool, Error> {
#[allow(clippy::single_match)] // because temporarily so
match &*bus_message.kind {
match &*message.kind {
"shutdown" => {
tracing::info!("Overlord shutting down");
return Ok(false);
@ -371,7 +371,7 @@ impl Overlord {
self.get_missing_events().await?;
}
"follow_nip35" => {
let dns_id: String = serde_json::from_str(&bus_message.json_payload)?;
let dns_id: String = serde_json::from_str(&message.json_payload)?;
let _ = tokio::spawn(async move {
if let Err(e) = Overlord::get_and_follow_nip35(dns_id).await {
tracing::error!("{}", e);
@ -379,15 +379,15 @@ impl Overlord {
});
}
"follow_bech32" => {
let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?;
let data: (String, String) = serde_json::from_str(&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)?;
let data: (String, String) = serde_json::from_str(&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)?;
let mut password: String = serde_json::from_str(&message.json_payload)?;
GLOBALS
.signer
.write()
@ -404,7 +404,7 @@ impl Overlord {
}
}
"generate_private_key" => {
let mut password: String = serde_json::from_str(&bus_message.json_payload)?;
let mut password: String = serde_json::from_str(&message.json_payload)?;
GLOBALS
.signer
.write()
@ -415,7 +415,7 @@ impl Overlord {
}
"import_priv" => {
let (mut import_priv, mut password): (String, String) =
serde_json::from_str(&bus_message.json_payload)?;
serde_json::from_str(&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();
@ -435,7 +435,7 @@ impl Overlord {
}
}
"import_pub" => {
let pubstr: String = serde_json::from_str(&bus_message.json_payload)?;
let pubstr: String = serde_json::from_str(&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() {
@ -469,17 +469,16 @@ impl Overlord {
}
}
"post_textnote" => {
let content: String = serde_json::from_str(&bus_message.json_payload)?;
let content: String = serde_json::from_str(&message.json_payload)?;
self.post_textnote(content).await?;
}
"post_reply" => {
let (content, reply_to): (String, Id) =
serde_json::from_str(&bus_message.json_payload)?;
serde_json::from_str(&message.json_payload)?;
self.post_reply(content, reply_to).await?;
}
"like" => {
let (id, pubkey): (Id, PublicKey) =
serde_json::from_str(&bus_message.json_payload)?;
let (id, pubkey): (Id, PublicKey) = serde_json::from_str(&message.json_payload)?;
self.post_like(id, pubkey).await?;
}
"process_incoming_events" => {
@ -494,12 +493,12 @@ impl Overlord {
});
}
"add_relay" => {
let relay_str: String = serde_json::from_str(&bus_message.json_payload)?;
let relay_str: String = serde_json::from_str(&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 pubkey: PublicKeyHex = serde_json::from_str(&message.json_payload)?;
let person_relays = DbPersonRelay::fetch_for_pubkeys(&[pubkey.clone()]).await?;
for person_relay in person_relays.iter() {

View File

@ -1,5 +1,5 @@
use super::{GossipUi, Page};
use crate::comms::BusMessage;
use crate::comms::ToOverlordMessage;
use crate::feed::FeedKind;
use crate::globals::{Globals, GLOBALS};
use crate::ui::widgets::{CopyButton, LikeButton, ReplyButton};
@ -85,7 +85,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
.clicked()
{
let tx = GLOBALS.to_overlord.clone();
let _ = tx.send(BusMessage {
let _ = tx.send(ToOverlordMessage {
kind: "get_missing_events".to_string(),
json_payload: serde_json::to_string("").unwrap(),
});
@ -98,7 +98,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
.clicked()
{
let tx = GLOBALS.to_overlord.clone();
let _ = tx.send(BusMessage {
let _ = tx.send(ToOverlordMessage {
kind: "process_incoming_events".to_string(),
json_payload: serde_json::to_string("").unwrap(),
});
@ -153,7 +153,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
let tx = GLOBALS.to_overlord.clone();
match app.replying_to {
Some(_id) => {
let _ = tx.send(BusMessage {
let _ = tx.send(ToOverlordMessage {
kind: "post_reply".to_string(),
json_payload: serde_json::to_string(&(
&app.draft,
@ -163,7 +163,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
});
}
None => {
let _ = tx.send(BusMessage {
let _ = tx.send(ToOverlordMessage {
kind: "post_textnote".to_string(),
json_payload: serde_json::to_string(&app.draft).unwrap(),
});
@ -452,7 +452,7 @@ fn render_post_actual(
GLOBALS.dismissed.blocking_write().push(event.id);
}
if ui.button("Update Metadata").clicked() {
let _ = GLOBALS.to_overlord.send(BusMessage {
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
kind: "update_metadata".to_string(),
json_payload: serde_json::to_string(
&event.pubkey.as_hex_string(),
@ -498,7 +498,7 @@ fn render_post_actual(
if ui.add(LikeButton {}).clicked() {
let tx = GLOBALS.to_overlord.clone();
let _ = tx.send(BusMessage {
let _ = tx.send(ToOverlordMessage {
kind: "like".to_string(),
json_payload: serde_json::to_string(&(&event.id, &event.pubkey))
.unwrap(),

View File

@ -1,5 +1,5 @@
use super::GossipUi;
use crate::comms::BusMessage;
use crate::comms::ToOverlordMessage;
use crate::globals::GLOBALS;
use eframe::egui;
use egui::{Context, TextEdit, Ui};
@ -25,7 +25,7 @@ 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 {
let _ = tx.send(ToOverlordMessage {
kind: "follow_nip35".to_string(),
json_payload: serde_json::to_string(&app.nip35follow).unwrap(),
});
@ -48,7 +48,7 @@ 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 {
let _ = tx.send(ToOverlordMessage {
kind: "follow_bech32".to_string(),
json_payload: serde_json::to_string(&(
&app.follow_bech32_pubkey,
@ -76,7 +76,7 @@ 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 {
let _ = tx.send(ToOverlordMessage {
kind: "follow_hexkey".to_string(),
json_payload: serde_json::to_string(&(
&app.follow_hex_pubkey,

View File

@ -1,5 +1,5 @@
use super::{GossipUi, Page};
use crate::comms::BusMessage;
use crate::comms::ToOverlordMessage;
use crate::db::DbPerson;
use crate::globals::GLOBALS;
use eframe::egui;
@ -57,7 +57,7 @@ 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 {
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
kind: "update_metadata".to_string(),
json_payload: serde_json::to_string(&pubkeyhex).unwrap(),
});

View File

@ -1,5 +1,5 @@
use super::GossipUi;
use crate::comms::BusMessage;
use crate::comms::ToOverlordMessage;
use crate::db::DbRelay;
use crate::globals::GLOBALS;
use eframe::egui;
@ -25,7 +25,7 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
let test_url = Url::new(&app.new_relay_url);
if test_url.is_valid_relay_url() {
let tx = GLOBALS.to_overlord.clone();
let _ = tx.send(BusMessage {
let _ = tx.send(ToOverlordMessage {
kind: "add_relay".to_string(),
json_payload: serde_json::to_string(&app.new_relay_url).unwrap(),
});
@ -61,7 +61,7 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
ui.with_layout(Layout::bottom_up(Align::Center), |ui| {
if ui.button("SAVE CHANGES").clicked() {
let tx = GLOBALS.to_overlord.clone();
let _ = tx.send(BusMessage {
let _ = tx.send(ToOverlordMessage {
kind: "save_relays".to_string(),
json_payload: serde_json::to_string("").unwrap(),
});

View File

@ -1,5 +1,5 @@
use super::GossipUi;
use crate::comms::BusMessage;
use crate::comms::ToOverlordMessage;
use crate::GLOBALS;
use eframe::egui;
use egui::widgets::{Button, Slider};
@ -152,7 +152,7 @@ pub(super) fn update(
// Tell the overlord to save them
let tx = GLOBALS.to_overlord.clone();
let _ = tx.send(BusMessage {
let _ = tx.send(ToOverlordMessage {
kind: "save_settings".to_string(),
json_payload: serde_json::to_string("").unwrap(),
});

View File

@ -1,5 +1,5 @@
use super::GossipUi;
use crate::comms::BusMessage;
use crate::comms::ToOverlordMessage;
use crate::globals::GLOBALS;
use crate::ui::widgets::CopyButton;
use eframe::egui;
@ -142,7 +142,7 @@ 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 {
let _ = tx.send(ToOverlordMessage {
kind: "unlock_key".to_string(),
json_payload: serde_json::to_string(&app.password).unwrap(),
});
@ -158,7 +158,7 @@ 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 {
let _ = tx.send(ToOverlordMessage {
kind: "generate_private_key".to_string(),
json_payload: serde_json::to_string(&app.password).unwrap(),
});
@ -186,7 +186,7 @@ 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 {
let _ = tx.send(ToOverlordMessage {
kind: "import_priv".to_string(),
json_payload: serde_json::to_string(&(&app.import_priv, &app.password)).unwrap(),
});
@ -224,7 +224,7 @@ 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 {
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
kind: "delete_pub".to_string(),
json_payload: serde_json::to_string(&app.import_pub).unwrap(),
});
@ -234,7 +234,7 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
ui.label("Enter your public key");
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 {
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
kind: "import_pub".to_string(),
json_payload: serde_json::to_string(&app.import_pub).unwrap(),
});