diff --git a/Telegram/SourceFiles/api/api_cloud_password.cpp b/Telegram/SourceFiles/api/api_cloud_password.cpp index 1a3f7da2a..a94298913 100644 --- a/Telegram/SourceFiles/api/api_cloud_password.cpp +++ b/Telegram/SourceFiles/api/api_cloud_password.cpp @@ -295,4 +295,39 @@ rpl::producer CloudPassword::set( }; } +rpl::producer CloudPassword::check( + const QString &password) { + return [=](auto consumer) { + _api.request(MTPaccount_GetPassword( + )).done([=](const MTPaccount_Password &result) { + const auto latestState = ProcessMtpState(result); + const auto input = [&] { + if (password.isEmpty()) { + return Core::CloudPasswordResult{ + MTP_inputCheckPasswordEmpty() + }; + } + const auto hash = Core::ComputeCloudPasswordHash( + latestState.mtp.request.algo, + bytes::make_span(password.toUtf8())); + return Core::ComputeCloudPasswordCheck( + latestState.mtp.request, + hash); + }(); + + _api.request(MTPaccount_GetPasswordSettings( + input.result + )).done([=](const MTPaccount_PasswordSettings &result) { + consumer.put_done(); + }).fail([=](const MTP::Error &error) { + consumer.put_error_copy(error.type()); + }).send(); + }).fail([=](const MTP::Error &error) { + consumer.put_error_copy(error.type()); + }).send(); + + return rpl::lifetime(); + }; +} + } // namespace Api diff --git a/Telegram/SourceFiles/api/api_cloud_password.h b/Telegram/SourceFiles/api/api_cloud_password.h index a01f973df..d86f81e5b 100644 --- a/Telegram/SourceFiles/api/api_cloud_password.h +++ b/Telegram/SourceFiles/api/api_cloud_password.h @@ -44,6 +44,7 @@ public: const QString &hint, bool hasRecoveryEmail, const QString &recoveryEmail); + rpl::producer check(const QString &password); private: void apply(Core::CloudPasswordState state);