summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--APPSERVICES.md8
-rw-r--r--src/database/admin.rs4
-rw-r--r--src/database/appservice.rs9
-rw-r--r--src/database/rooms.rs9
4 files changed, 30 insertions, 0 deletions
diff --git a/APPSERVICES.md b/APPSERVICES.md
index 26c34cc..894bc6f 100644
--- a/APPSERVICES.md
+++ b/APPSERVICES.md
@@ -42,6 +42,14 @@ could help.
## Appservice-specific instructions
+### Remove an appservice
+
+To remove an appservice go to your admin room and execute
+
+```@conduit:your.server.name: unregister_appservice <name>```
+
+where `<name>` one of the output of `list_appservices`.
+
### Tested appservices
These appservices have been tested and work with Conduit without any extra steps:
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::<Vec<_>>()) {
let count = appservices.len();
diff --git a/src/database/appservice.rs b/src/database/appservice.rs
index 7cc9137..caa48ad 100644
--- a/src/database/appservice.rs
+++ b/src/database/appservice.rs
@@ -27,6 +27,15 @@ impl Appservice {
Ok(())
}
+ /**
+ * Remove an appservice registration
+ * service_name 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<Option<serde_yaml::Value>> {
self.cached_registrations
.read()
diff --git a/src/database/rooms.rs b/src/database/rooms.rs
index fb9ecbf..612bd51 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("Missing appservice identifier"),
+ ));
+ }
+ }
"list_appservices" => {
db.admin.send(AdminCommand::ListAppservices);
}