tools: use yaml config file instead of default values

Change-Id: Ib9466e7b7a8f093620949ad4557817c26e52566e
diff --git a/tools/dsh/dsh.yaml b/tools/dsh/dsh.yaml
new file mode 100644
index 0000000..54e13ab
--- /dev/null
+++ b/tools/dsh/dsh.yaml
@@ -0,0 +1,8 @@
+bootstrap: "bootstrap.jami.net"
+id_path: HOME/.dhtnet # Change this to the path of the id directory
+turn_host: "turn.jami.net"
+turn_user: "ring"
+turn_pass: "ring"
+turn_realm: "ring"
+binary: "bash"
+CA: HOME/.dhtnet # Change this to the path of the CA directory
diff --git a/tools/dsh/main.cpp b/tools/dsh/main.cpp
index b6697a3..7c5e006 100644
--- a/tools/dsh/main.cpp
+++ b/tools/dsh/main.cpp
@@ -122,13 +122,40 @@
         }
     }
 
-    // default values
-    if (params.bootstrap.empty())
-        params.bootstrap = "bootstrap.jami.net";
-    if (params.binary.empty())
-        params.binary = "bash";
-    if (params.path.empty())
-        params.path = std::filesystem::path(getenv("HOME")) / ".dhtnet";
+    // extract values from dsh yaml file
+    if (!params.dsh_configuration.empty()) {
+        printf("read configuration file: %s\n", params.dsh_configuration.c_str());
+        std::ifstream config_file(params.dsh_configuration);
+        if (!config_file.is_open()) {
+            std::cerr << "Error: Could not open configuration file.\n";
+        } else {
+            YAML::Node config = YAML::Load(config_file);
+            if (config["bootstrap"] && params.bootstrap.empty()) {
+                params.bootstrap = config["bootstrap"].as<std::string>();
+            }
+            if (config["id_path"] && params.path.empty()) {
+                params.path = config["id_path"].as<std::string>();
+            }
+            if (config["turn_host"] && params.turn_host.empty()) {
+                params.turn_host = config["turn_host"].as<std::string>();
+            }
+            if (config["turn_user"] && params.turn_user.empty()) {
+                params.turn_user = config["turn_user"].as<std::string>();
+            }
+            if (config["turn_pass"] && params.turn_pass.empty()) {
+                params.turn_pass = config["turn_pass"].as<std::string>();
+            }
+            if (config["turn_realm"] && params.turn_realm.empty()) {
+                params.turn_realm = config["turn_realm"].as<std::string>();
+            }
+            if (config["CA"] && params.ca.empty()) {
+                params.ca = config["CA"].as<std::string>();
+            }
+            if (config["binary"] && params.binary.empty()) {
+                params.binary = config["binary"].as<std::string>();
+            }
+        }
+    }
     return params;
 }
 
@@ -179,7 +206,7 @@
 
     fmt::print("dsh 1.0\n");
 
-    auto identity = dhtnet::loadIdentity(params.path);
+    auto identity = dhtnet::loadIdentity(params.path, params.ca);
     fmt::print("Loaded identity: {} from {}\n", identity.second->getId(), params.path);
 
     std::unique_ptr<dhtnet::Dsh> dhtsh;