From 4c1c6819ba001d30dccc80483a3e301b110bea5c Mon Sep 17 00:00:00 2001 From: Torsten Flammiger Date: Sat, 18 Dec 2021 21:37:12 +0100 Subject: [PATCH] Added an (untested) option to unregister an appservice previously added by calling register_appservice --- src/database/admin.rs | 4 ++++ src/database/appservice.rs | 10 ++++++++++ src/database/rooms.rs | 9 +++++++++ 3 files changed, 23 insertions(+) diff --git a/src/database/admin.rs b/src/database/admin.rs index 1e5c47c..0702bcd 100644 --- a/src/database/admin.rs +++ b/src/database/admin.rs @@ -12,6 +12,7 @@ use tracing::warn; pub enum AdminCommand { RegisterAppservice(serde_yaml::Value), + UnregisterAppservice(String), ListAppservices, SendMessage(RoomMessageEventContent), } @@ -96,6 +97,9 @@ impl Admin { AdminCommand::RegisterAppservice(yaml) => { guard.appservice.register_appservice(yaml).unwrap(); // TODO handle error } + AdminCommand::UnregisterAppservice(service_name) => { + guard.appservice.unregister_appservice(&service_name).unwrap(); // TODO: see above + } AdminCommand::ListAppservices => { if let Ok(appservices) = guard.appservice.iter_ids().map(|ids| ids.collect::>()) { let count = appservices.len(); diff --git a/src/database/appservice.rs b/src/database/appservice.rs index 7cc9137..41fd0b2 100644 --- a/src/database/appservice.rs +++ b/src/database/appservice.rs @@ -27,6 +27,16 @@ impl Appservice { Ok(()) } + /** + * Remove a appservice registration + * + * id is the name you send to register the service + */ + pub fn unregister_appservice(&self, service_name: &str) -> Result<()> { + self.id_appserviceregistrations.remove(service_name.as_bytes())?; + Ok(()) + } + pub fn get_registration(&self, id: &str) -> Result> { self.cached_registrations .read() diff --git a/src/database/rooms.rs b/src/database/rooms.rs index fb9ecbf..ddf0e52 100644 --- a/src/database/rooms.rs +++ b/src/database/rooms.rs @@ -1528,6 +1528,15 @@ impl Rooms { )); } } + "unregister_appservice" => { + if args.len() == 1 { + db.admin.send(AdminCommand::UnregisterAppservice(args[0].to_owned())); + } else { + db.admin.send(AdminCommand::SendMessage( + RoomMessageEventContent::text_plain("Invalid appservice identifier. Need a valid identifier string"), + )); + } + } "list_appservices" => { db.admin.send(AdminCommand::ListAppservices); }