From 78502aa6b10d97f3af3fe006fcdbd19b585d3b58 Mon Sep 17 00:00:00 2001
From: Torsten Flammiger <git@netfg.net>
Date: Mon, 31 Jan 2022 10:07:49 +0100
Subject: [PATCH] add error handling for register_appservice too

---
 src/database/admin.rs      | 13 ++++++++++++-
 src/database/appservice.rs |  4 ++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/database/admin.rs b/src/database/admin.rs
index 9895a83b..eef6ce10 100644
--- a/src/database/admin.rs
+++ b/src/database/admin.rs
@@ -109,7 +109,18 @@ impl Admin {
                                 }
                             }
                             AdminCommand::RegisterAppservice(yaml) => {
-                                guard.appservice.register_appservice(yaml).unwrap(); // TODO handle error
+                                match guard.appservice.register_appservice(yaml) {
+                                    Ok(Some(id)) => {
+                                        let msg: String = format!("OK. Appservice {} created", id);
+                                        send_message(RoomMessageEventContent::text_plain(msg), guard, &state_lock);
+                                    }
+                                    Ok(None) => {
+                                        send_message(RoomMessageEventContent::text_plain("WARN. Appservice created, but its ID was not returned!"), guard, &state_lock);
+                                    }
+                                    Err(_) => {
+                                        send_message(RoomMessageEventContent::text_plain("ERR: Failed register appservice. Check server log"), guard, &state_lock);
+                                    }
+                                }
                             }
                             AdminCommand::UnregisterAppservice(service_name) => {
                                 if let Ok(_) = guard.appservice.unregister_appservice(&service_name) {
diff --git a/src/database/appservice.rs b/src/database/appservice.rs
index 88de1f33..8b29aca9 100644
--- a/src/database/appservice.rs
+++ b/src/database/appservice.rs
@@ -12,7 +12,7 @@ pub struct Appservice {
 }
 
 impl Appservice {
-    pub fn register_appservice(&self, yaml: serde_yaml::Value) -> Result<()> {
+    pub fn register_appservice(&self, yaml: serde_yaml::Value) -> Result<Option<String>> {
         // TODO: Rumaify
         let id = yaml.get("id").unwrap().as_str().unwrap();
         self.id_appserviceregistrations.insert(
@@ -24,7 +24,7 @@ impl Appservice {
             .unwrap()
             .insert(id.to_owned(), yaml);
 
-        Ok(())
+        Ok(Some(id.to_owned()))
     }
 
     /// Remove an appservice registration