From bcc75c7fd19150c3008c7c1fae22cc687fc89628 Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com> Date: Fri, 15 May 2020 14:17:42 -0400 Subject: [PATCH] account: check if password is valid Change-Id: Ice7459ba421c28f72c05bfda5283b733acef4695 --- src/client/configurationmanager.cpp | 6 ++++++ src/dring/configurationmanager_interface.h | 1 + src/jamidht/account_manager.h | 2 ++ src/jamidht/archive_account_manager.cpp | 11 +++++++++++ src/jamidht/archive_account_manager.h | 3 ++- src/jamidht/jamiaccount.cpp | 6 ++++++ src/jamidht/jamiaccount.h | 2 ++ src/manager.cpp | 9 +++++++++ src/manager.h | 2 ++ 9 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/client/configurationmanager.cpp b/src/client/configurationmanager.cpp index 7216dde8b2..382ca29465 100644 --- a/src/client/configurationmanager.cpp +++ b/src/client/configurationmanager.cpp @@ -251,6 +251,12 @@ sendRegister(const std::string& accountID, bool enable) jami::Manager::instance().sendRegister(accountID, enable); } +bool +isPasswordValid(const std::string& accountID, const std::string& password) +{ + return jami::Manager::instance().isPasswordValid(accountID, password); +} + void registerAllAccounts() { diff --git a/src/dring/configurationmanager_interface.h b/src/dring/configurationmanager_interface.h index 1a2000b9ef..7741056024 100644 --- a/src/dring/configurationmanager_interface.h +++ b/src/dring/configurationmanager_interface.h @@ -65,6 +65,7 @@ DRING_PUBLIC bool exportToFile(const std::string& accountID, const std::string& DRING_PUBLIC bool revokeDevice(const std::string& accountID, const std::string& password, const std::string& deviceID); DRING_PUBLIC std::map<std::string, std::string> getKnownRingDevices(const std::string& accountID); DRING_PUBLIC bool changeAccountPassword(const std::string& accountID, const std::string& password_old, const std::string& password_new); +DRING_PUBLIC bool isPasswordValid(const std::string& accountID, const std::string& password); DRING_PUBLIC bool lookupName(const std::string& account, const std::string& nameserver, const std::string& name); DRING_PUBLIC bool lookupAddress(const std::string& account, const std::string& nameserver, const std::string& address); diff --git a/src/jamidht/account_manager.h b/src/jamidht/account_manager.h index 0e7baa8260..bc30f8b05a 100644 --- a/src/jamidht/account_manager.h +++ b/src/jamidht/account_manager.h @@ -121,6 +121,8 @@ public: virtual void syncDevices() = 0; + virtual bool isPasswordValid(const std::string& password) {}; + dht::crypto::Identity loadIdentity(const std::string& crt_path, const std::string& key_path, const std::string& key_pwd) const; const AccountInfo* useIdentity( diff --git a/src/jamidht/archive_account_manager.cpp b/src/jamidht/archive_account_manager.cpp index 5e4b0b9144..c5f1202773 100644 --- a/src/jamidht/archive_account_manager.cpp +++ b/src/jamidht/archive_account_manager.cpp @@ -673,6 +673,17 @@ ArchiveAccountManager::exportArchive(const std::string& destinationPath, const s } } +bool +ArchiveAccountManager::isPasswordValid(const std::string& password) +{ + try { + readArchive(password); + return true; + } catch (...) { + return false; + } +} + #if HAVE_RINGNS void diff --git a/src/jamidht/archive_account_manager.h b/src/jamidht/archive_account_manager.h index 8c87db3879..ef7778aa1c 100644 --- a/src/jamidht/archive_account_manager.h +++ b/src/jamidht/archive_account_manager.h @@ -60,6 +60,7 @@ public: void addDevice(const std::string& password, AddDeviceCallback) override; bool revokeDevice(const std::string& password, const std::string& device, RevokeDeviceCallback) override; bool exportArchive(const std::string& destinationPath, const std::string& password); + bool isPasswordValid(const std::string& password) override; #if HAVE_RINGNS /*void lookupName(const std::string& name, LookupCallback cb) override; @@ -97,4 +98,4 @@ private: std::string archivePath_; }; -} \ No newline at end of file +} diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index c11c3c2dfa..a2425203d5 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -971,6 +971,12 @@ JamiAccount::changeArchivePassword(const std::string& password_old, const std::s return true; } +bool +JamiAccount::isPasswordValid(const std::string& password) +{ + return accountManager_->isPasswordValid(password); +} + void JamiAccount::addDevice(const std::string& password) { diff --git a/src/jamidht/jamiaccount.h b/src/jamidht/jamiaccount.h index 3d7a47d952..5c28f0fb19 100644 --- a/src/jamidht/jamiaccount.h +++ b/src/jamidht/jamiaccount.h @@ -331,6 +331,8 @@ public: bool revokeDevice(const std::string& password, const std::string& device); std::map<std::string, std::string> getKnownDevices() const; + bool isPasswordValid(const std::string& password); + bool changeArchivePassword(const std::string& password_old, const std::string& password_new); void connectivityChanged() override; diff --git a/src/manager.cpp b/src/manager.cpp index 89cea7d97e..015ff69cf4 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -2933,6 +2933,15 @@ Manager::sendRegister(const std::string& accountID, bool enable) acc->doUnregister(); } +bool +Manager::isPasswordValid(const std::string& accountID, const std::string& password) +{ + const auto acc = getAccount<JamiAccount>(accountID); + if (!acc) + return false; + return acc->isPasswordValid(password); +} + uint64_t Manager::sendTextMessage(const std::string& accountID, const std::string& to, const std::map<std::string, std::string>& payloads) diff --git a/src/manager.h b/src/manager.h index dd972dfae5..c50b701593 100644 --- a/src/manager.h +++ b/src/manager.h @@ -388,6 +388,8 @@ class DRING_TESTABLE Manager { */ void sendRegister(const std::string& accountId, bool enable); + bool isPasswordValid(const std::string& accountID, const std::string& password); + uint64_t sendTextMessage(const std::string& accountID, const std::string& to, const std::map<std::string, std::string>& payloads); -- GitLab