From 6bff8561588fb28a4142276a3c25c916ea2e662d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Wed, 22 Apr 2020 02:00:06 -0400
Subject: [PATCH] account manager: check info

Change-Id: Iccae983c6d70ba47e0ec20c83d209c16bbe8b2b0
---
 src/jamidht/account_manager.cpp | 25 ++++++++++++++++++-------
 src/jamidht/account_manager.h   |  2 +-
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/jamidht/account_manager.cpp b/src/jamidht/account_manager.cpp
index a9f336f81d..5f4ab2d387 100644
--- a/src/jamidht/account_manager.cpp
+++ b/src/jamidht/account_manager.cpp
@@ -320,6 +320,10 @@ AccountManager::addContact(const std::string& uri, bool confirmed)
         JAMI_ERR("addContact: invalid contact URI");
         return;
     }
+    if (not info_) {
+        JAMI_ERR("addContact(): account not loaded");
+        return;
+    }
     if (info_->contacts->addContact(h, confirmed)) {
         syncDevices();
     }
@@ -333,6 +337,10 @@ AccountManager::removeContact(const std::string& uri, bool banned)
         JAMI_ERR("removeContact: invalid contact URI");
         return;
     }
+    if (not info_) {
+        JAMI_ERR("addContact(): account not loaded");
+        return;
+    }
     if (info_->contacts->removeContact(h, banned)) {
         syncDevices();
     }
@@ -391,25 +399,25 @@ AccountManager::findCertificate(const dht::InfoHash& h, std::function<void(const
 bool
 AccountManager::setCertificateStatus(const std::string& cert_id, tls::TrustStore::PermissionStatus status)
 {
-    return info_->contacts->setCertificateStatus(cert_id, status);
+    return info_ and info_->contacts->setCertificateStatus(cert_id, status);
 }
 
 std::vector<std::string>
 AccountManager::getCertificatesByStatus(tls::TrustStore::PermissionStatus status)
 {
-    return info_->contacts->getCertificatesByStatus(status);
+    return info_ ? info_->contacts->getCertificatesByStatus(status) : std::vector<std::string>{};
 }
 
 tls::TrustStore::PermissionStatus
 AccountManager::getCertificateStatus(const std::string& cert_id) const
 {
-    return info_->contacts->getCertificateStatus(cert_id);
+    return info_ ? info_->contacts->getCertificateStatus(cert_id) : tls::TrustStore::PermissionStatus::UNDEFINED;
 }
 
 bool
 AccountManager::isAllowed(const crypto::Certificate& crt, bool allowPublic)
 {
-    return info_->contacts->isAllowed(crt, allowPublic);
+    return info_ and info_->contacts->isAllowed(crt, allowPublic);
 }
 
 std::vector<std::map<std::string, std::string>>
@@ -426,7 +434,7 @@ bool
 AccountManager::acceptTrustRequest(const std::string& from)
 {
     dht::InfoHash f(from);
-    if (info_->contacts->acceptTrustRequest(f)) {
+    if (info_ and info_->contacts->acceptTrustRequest(f)) {
         sendTrustRequestConfirm(f);
         syncDevices();
         return true;
@@ -438,7 +446,7 @@ bool
 AccountManager::discardTrustRequest(const std::string& from)
 {
     dht::InfoHash f(from);
-    return info_->contacts->discardTrustRequest(f);
+    return info_ and info_->contacts->discardTrustRequest(f);
 }
 
 void
@@ -450,6 +458,10 @@ AccountManager::sendTrustRequest(const std::string& to, const std::vector<uint8_
         JAMI_ERR("can't send trust request to invalid hash: %s", to.c_str());
         return;
     }
+    if (not info_) {
+        JAMI_ERR("sendTrustRequest(): account not loaded");
+        return;
+    }
     if (info_->contacts->addContact(toH)) {
         syncDevices();
     }
@@ -474,7 +486,6 @@ AccountManager::sendTrustRequestConfirm(const dht::InfoHash& toH)
     });
 }
 
-
 void
 AccountManager::forEachDevice(const dht::InfoHash& to,
                            std::function<void(const dht::InfoHash&)>&& op,
diff --git a/src/jamidht/account_manager.h b/src/jamidht/account_manager.h
index 4a0b94428a..0e7baa8260 100644
--- a/src/jamidht/account_manager.h
+++ b/src/jamidht/account_manager.h
@@ -135,7 +135,7 @@ public:
     virtual void startSync();
 
     const AccountInfo* getInfo() const {
-        return info_.get()  ;
+        return info_.get();
     }
 
     // Device management
-- 
GitLab