From 59b5a2174cc4049d89e0b2dccf76ad39c2156833 Mon Sep 17 00:00:00 2001
From: Adrien Beraud <adrien.beraud@savoirfairelinux.com>
Date: Thu, 25 Jul 2024 16:13:32 -0400
Subject: [PATCH] JamiAccount: consume credentials from config

GitLab: #1028
Change-Id: Ie1f6055c9d117e02538b2dfce5525d8ba15a06a2
---
 src/jamidht/jamiaccount.cpp        |  9 +++++----
 src/jamidht/jamiaccount.h          |  6 ++++++
 src/jamidht/jamiaccount_config.cpp | 10 +++++-----
 src/jamidht/jamiaccount_config.h   | 10 ++++++----
 4 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index 97db9b72cc..cb1b3a5639 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -936,10 +936,11 @@ JamiAccount::loadConfig()
         std::error_code ec;
         std::filesystem::remove(cachePath_ / "dhtproxy", ec);
     }
-    loadAccount(config().archive_password_scheme,
-                config().archive_password,
-                config().archive_pin,
-                config().archive_path);
+    auto credentials = consumeConfigCredentials();
+    loadAccount(credentials.archive_password_scheme,
+                credentials.archive_password,
+                credentials.archive_pin,
+                credentials.archive_path);
 }
 
 bool
diff --git a/src/jamidht/jamiaccount.h b/src/jamidht/jamiaccount.h
index 347deb409a..09d72334b4 100644
--- a/src/jamidht/jamiaccount.h
+++ b/src/jamidht/jamiaccount.h
@@ -133,6 +133,12 @@ public:
         return *static_cast<const JamiAccountConfig*>(&Account::config());
     }
 
+    JamiAccountConfig::Credentials
+    consumeConfigCredentials() {
+        auto conf = static_cast<JamiAccountConfig*>(config_.get());
+        return std::move(conf->credentials);
+    }
+
     void loadConfig() override;
 
     /**
diff --git a/src/jamidht/jamiaccount_config.cpp b/src/jamidht/jamiaccount_config.cpp
index 552d2f66b6..aa841b267c 100644
--- a/src/jamidht/jamiaccount_config.cpp
+++ b/src/jamidht/jamiaccount_config.cpp
@@ -207,11 +207,11 @@ JamiAccountConfig::fromMap(const std::map<std::string, std::string>& details)
     parseBool(details, libjami::Account::ConfProperties::DHT::PUBLIC_IN_CALLS, dhtPublicInCalls);
     // parseString(details, libjami::Account::ConfProperties::USERNAME, username);
 
-    parseString(details, libjami::Account::ConfProperties::ARCHIVE_PASSWORD, archive_password);
-    parseString(details, libjami::Account::ConfProperties::ARCHIVE_PASSWORD_SCHEME, archive_password_scheme);
-    parseString(details, libjami::Account::ConfProperties::ARCHIVE_PIN, archive_pin);
-    std::transform(archive_pin.begin(), archive_pin.end(), archive_pin.begin(), ::toupper);
-    parseString(details, libjami::Account::ConfProperties::ARCHIVE_PATH, archive_path);
+    parseString(details, libjami::Account::ConfProperties::ARCHIVE_PASSWORD, credentials.archive_password);
+    parseString(details, libjami::Account::ConfProperties::ARCHIVE_PASSWORD_SCHEME, credentials.archive_password_scheme);
+    parseString(details, libjami::Account::ConfProperties::ARCHIVE_PIN, credentials.archive_pin);
+    std::transform(credentials.archive_pin.begin(), credentials.archive_pin.end(), credentials.archive_pin.begin(), ::toupper);
+    parseString(details, libjami::Account::ConfProperties::ARCHIVE_PATH, credentials.archive_path);
     parseString(details, libjami::Account::ConfProperties::DEVICE_NAME, deviceName);
 
     auto oldProxyServer = proxyServer, oldProxyServerList = proxyListUrl;
diff --git a/src/jamidht/jamiaccount_config.h b/src/jamidht/jamiaccount_config.h
index 6fbda16cd8..4cbb5a4818 100644
--- a/src/jamidht/jamiaccount_config.h
+++ b/src/jamidht/jamiaccount_config.h
@@ -69,10 +69,12 @@ struct JamiAccountConfig : public SipAccountBaseConfig {
     std::string archivePath {"archive.gz"};
     bool archiveHasPassword {true};
     // not saved, only used client->daemon
-    std::string archive_password_scheme;
-    std::string archive_password;
-    std::string archive_pin;
-    std::string archive_path;
+    struct Credentials {
+        std::string archive_password_scheme;
+        std::string archive_password;
+        std::string archive_pin;
+        std::string archive_path;
+    } credentials;
 
     std::string receipt {};
     std::vector<uint8_t> receiptSignature {};
-- 
GitLab