From bb3fb0f9b6f46e25a183d688029989db4118778c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Fri, 8 Nov 2019 14:52:12 -0500 Subject: [PATCH] jamiaccount: check accountManager, cleanup Change-Id: I44b6f6663eaaca1bf9811ac220eac68f175bb28b --- src/jamidht/account_manager.h | 4 +- src/jamidht/jamiaccount.cpp | 93 ++++++++++++++++++---------- src/jamidht/server_account_manager.h | 4 +- 3 files changed, 65 insertions(+), 36 deletions(-) diff --git a/src/jamidht/account_manager.h b/src/jamidht/account_manager.h index 40fc32c27e..6284939e55 100644 --- a/src/jamidht/account_manager.h +++ b/src/jamidht/account_manager.h @@ -34,12 +34,12 @@ #include <map> namespace dht { - class DhtRunner; +class DhtRunner; } namespace jami { -class AccountArchive; +struct AccountArchive; struct AccountInfo { dht::crypto::Identity identity; diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index 0229f92e63..ea3454b7ea 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -387,6 +387,10 @@ initICE(const std::vector<uint8_t> &msg, const std::shared_ptr<IceTransport> &ic void JamiAccount::startOutgoingCall(const std::shared_ptr<SIPCall>& call, const std::string& toUri) { + if (not accountManager_) { + call->onFailure(ENETDOWN); + return; + } // TODO: for now, we automatically trust all explicitly called peers setCertificateStatus(toUri, tls::TrustStore::PermissionStatus::ALLOWED); @@ -836,6 +840,8 @@ JamiAccount::exportArchive(const std::string& destinationPath, const std::string bool JamiAccount::revokeDevice(const std::string& password, const std::string& device) { + if (not accountManager_) + return false; return accountManager_->revokeDevice(password, device, [this, device](AccountManager::RevokeDeviceResult result){ switch(result) { case AccountManager::RevokeDeviceResult::SUCCESS: @@ -1184,34 +1190,37 @@ void JamiAccount::lookupName(const std::string& name) { auto acc = getAccountID(); - accountManager_->lookupUri(name, nameServer_, [acc,name](const std::string& result, NameDirectory::Response response) { - emitSignal<DRing::ConfigurationSignal::RegisteredNameFound>(acc, (int)response, result, name); - }); + if (accountManager_) + accountManager_->lookupUri(name, nameServer_, [acc,name](const std::string& result, NameDirectory::Response response) { + emitSignal<DRing::ConfigurationSignal::RegisteredNameFound>(acc, (int)response, result, name); + }); } void JamiAccount::lookupAddress(const std::string& addr) { auto acc = getAccountID(); - accountManager_->lookupAddress(addr, [acc,addr](const std::string& result, NameDirectory::Response response) { - emitSignal<DRing::ConfigurationSignal::RegisteredNameFound>(acc, (int)response, addr, result); - }); + if (accountManager_) + accountManager_->lookupAddress(addr, [acc,addr](const std::string& result, NameDirectory::Response response) { + emitSignal<DRing::ConfigurationSignal::RegisteredNameFound>(acc, (int)response, addr, result); + }); } void JamiAccount::registerName(const std::string& password, const std::string& name) { - accountManager_->registerName(password, name, [acc=getAccountID(), name, w=weak()](NameDirectory::RegistrationResponse response){ - int res = (response == NameDirectory::RegistrationResponse::success) ? 0 : ( - (response == NameDirectory::RegistrationResponse::invalidCredentials) ? 1 : ( - (response == NameDirectory::RegistrationResponse::invalidName) ? 2 : ( - (response == NameDirectory::RegistrationResponse::alreadyTaken) ? 3 : 4))); - if (response == NameDirectory::RegistrationResponse::success) { - if (auto this_ = w.lock()) - this_->registeredName_ = name; - } - emitSignal<DRing::ConfigurationSignal::NameRegistrationEnded>(acc, res, name); - }); + if (accountManager_) + accountManager_->registerName(password, name, [acc=getAccountID(), name, w=weak()](NameDirectory::RegistrationResponse response){ + int res = (response == NameDirectory::RegistrationResponse::success) ? 0 : ( + (response == NameDirectory::RegistrationResponse::invalidCredentials) ? 1 : ( + (response == NameDirectory::RegistrationResponse::invalidName) ? 2 : ( + (response == NameDirectory::RegistrationResponse::alreadyTaken) ? 3 : 4))); + if (response == NameDirectory::RegistrationResponse::success) { + if (auto this_ = w.lock()) + this_->registeredName_ = name; + } + emitSignal<DRing::ConfigurationSignal::NameRegistrationEnded>(acc, res, name); + }); } #endif @@ -1999,19 +2008,23 @@ JamiAccount::connectivityChanged() bool JamiAccount::findCertificate(const dht::InfoHash& h, std::function<void(const std::shared_ptr<dht::crypto::Certificate>&)>&& cb) { - return accountManager_->findCertificate(h, std::move(cb)); + if (accountManager_) + return accountManager_->findCertificate(h, std::move(cb)); + return false; } bool JamiAccount::findCertificate(const std::string& crt_id) { - return accountManager_->findCertificate(dht::InfoHash(crt_id)); + if (accountManager_) + return accountManager_->findCertificate(dht::InfoHash(crt_id)); + return false; } bool JamiAccount::setCertificateStatus(const std::string& cert_id, tls::TrustStore::PermissionStatus status) { - bool done = accountManager_->setCertificateStatus(cert_id, status); + bool done = accountManager_ ? accountManager_->setCertificateStatus(cert_id, status) : false; if (done) { findCertificate(cert_id); emitSignal<DRing::ConfigurationSignal::CertificateStateChanged>(getAccountID(), cert_id, tls::TrustStore::statusToStr(status)); @@ -2022,7 +2035,9 @@ JamiAccount::setCertificateStatus(const std::string& cert_id, tls::TrustStore::P std::vector<std::string> JamiAccount::getCertificatesByStatus(tls::TrustStore::PermissionStatus status) { - return accountManager_->getCertificatesByStatus(status); + if (accountManager_) + return accountManager_->getCertificatesByStatus(status); + return {}; } template<typename ID=dht::Value::Id> @@ -2254,20 +2269,25 @@ JamiAccount::getContactHeader(pjsip_transport* t) void JamiAccount::addContact(const std::string& uri, bool confirmed) { - JAMI_WARN("JamiAccount::addContact %d", confirmed); - accountManager_->addContact(uri, confirmed); + if (accountManager_) + accountManager_->addContact(uri, confirmed); + else + JAMI_WARN("[Account %s] addContact: account not loaded", getAccountID().c_str()); } void JamiAccount::removeContact(const std::string& uri, bool ban) { - accountManager_->removeContact(uri, ban); + if (accountManager_) + accountManager_->removeContact(uri, ban); + else + JAMI_WARN("[Account %s] removeContact: account not loaded", getAccountID().c_str()); } std::map<std::string, std::string> JamiAccount::getContactDetails(const std::string& uri) const { - return accountManager_->getInfo() ? accountManager_->getContactDetails(uri) : std::map<std::string, std::string>{}; + return (accountManager_ and accountManager_->getInfo()) ? accountManager_->getContactDetails(uri) : std::map<std::string, std::string>{}; } std::vector<std::map<std::string, std::string>> @@ -2289,28 +2309,37 @@ JamiAccount::getTrustRequests() const bool JamiAccount::acceptTrustRequest(const std::string& from) { - JAMI_WARN("JamiAccount::acceptTrustRequest"); - return accountManager_->acceptTrustRequest(from); + if (accountManager_) + return accountManager_->acceptTrustRequest(from); + JAMI_WARN("[Account %s] acceptTrustRequest: account not loaded", getAccountID().c_str()); + return false; } bool JamiAccount::discardTrustRequest(const std::string& from) { - return accountManager_->discardTrustRequest(from); + if (accountManager_) + return accountManager_->discardTrustRequest(from); + JAMI_WARN("[Account %s] discardTrustRequest: account not loaded", getAccountID().c_str()); + return false; } void JamiAccount::sendTrustRequest(const std::string& to, const std::vector<uint8_t>& payload) { - JAMI_WARN("JamiAccount::sendTrustRequest"); - return accountManager_->sendTrustRequest(to, payload); + if (accountManager_) + accountManager_->sendTrustRequest(to, payload); + else + JAMI_WARN("[Account %s] sendTrustRequest: account not loaded", getAccountID().c_str()); } void JamiAccount::sendTrustRequestConfirm(const std::string& to) { - JAMI_WARN("JamiAccount::sendTrustRequestConfirm"); - return accountManager_->sendTrustRequestConfirm(dht::InfoHash(to)); + if (accountManager_) + accountManager_->sendTrustRequestConfirm(dht::InfoHash(to)); + else + JAMI_WARN("[Account %s] sendTrustRequestConfirm: account not loaded", getAccountID().c_str()); } /* sync */ diff --git a/src/jamidht/server_account_manager.h b/src/jamidht/server_account_manager.h index 5d14ea6cbd..367f619981 100644 --- a/src/jamidht/server_account_manager.h +++ b/src/jamidht/server_account_manager.h @@ -43,13 +43,13 @@ public: AuthFailureCallback onFailure, OnChangeCallback onChange) override; - bool changePassword(const std::string& password_old, const std::string& password_new) override { + bool changePassword(const std::string& /*password_old*/, const std::string& /*password_new*/) override { return false; } void syncDevices() override; - bool revokeDevice(const std::string& password, const std::string& device, RevokeDeviceCallback cb); + bool revokeDevice(const std::string& password, const std::string& device, RevokeDeviceCallback cb) override; void registerName(const std::string& password, const std::string& name, RegistrationCallback cb) override; -- GitLab