diff options
Diffstat (limited to 'protocols/Telegram/tdlib/td/td/telegram/AuthManager.hpp')
-rw-r--r-- | protocols/Telegram/tdlib/td/td/telegram/AuthManager.hpp | 168 |
1 files changed, 116 insertions, 52 deletions
diff --git a/protocols/Telegram/tdlib/td/td/telegram/AuthManager.hpp b/protocols/Telegram/tdlib/td/td/telegram/AuthManager.hpp index 89027abd61..c6cf496d13 100644 --- a/protocols/Telegram/tdlib/td/td/telegram/AuthManager.hpp +++ b/protocols/Telegram/tdlib/td/td/telegram/AuthManager.hpp @@ -1,100 +1,164 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#pragma once + #include "td/telegram/AuthManager.h" +#include "td/telegram/logevent/LogEventHelper.h" +#include "td/telegram/SendCodeHelper.hpp" +#include "td/telegram/Version.h" + +#include "td/utils/format.h" +#include "td/utils/SliceBuilder.h" #include "td/utils/tl_helpers.h" namespace td { -template <class T> -void SendCodeHelper::AuthenticationCodeInfo::store(T &storer) const { - using td::store; - store(type, storer); - store(length, storer); - store(pattern, storer); -} -template <class T> -void SendCodeHelper::AuthenticationCodeInfo::parse(T &parser) { - using td::parse; - parse(type, parser); - parse(length, parser); - parse(pattern, parser); -} -template <class T> -void SendCodeHelper::store(T &storer) const { +template <class StorerT> +void AuthManager::WaitPasswordState::store(StorerT &storer) const { using td::store; - store(phone_number_, storer); - store(phone_registered_, storer); - store(phone_code_hash_, storer); - store(sent_code_info_, storer); - store(next_code_info_, storer); - store(next_code_timestamp_, storer); -} - -template <class T> -void SendCodeHelper::parse(T &parser) { - using td::parse; - parse(phone_number_, parser); - parse(phone_registered_, parser); - parse(phone_code_hash_, parser); - parse(sent_code_info_, parser); - parse(next_code_info_, parser); - parse(next_code_timestamp_, parser); -} -template <class T> -void AuthManager::WaitPasswordState::store(T &storer) const { - using td::store; - store(current_salt_, storer); - store(new_salt_, storer); + store(current_client_salt_, storer); + store(current_server_salt_, storer); + store(srp_g_, storer); + store(srp_p_, storer); + store(srp_B_, storer); + store(srp_id_, storer); store(hint_, storer); store(has_recovery_, storer); store(email_address_pattern_, storer); } -template <class T> -void AuthManager::WaitPasswordState::parse(T &parser) { +template <class ParserT> +void AuthManager::WaitPasswordState::parse(ParserT &parser) { using td::parse; - parse(current_salt_, parser); - parse(new_salt_, parser); + parse(current_client_salt_, parser); + parse(current_server_salt_, parser); + parse(srp_g_, parser); + parse(srp_p_, parser); + parse(srp_B_, parser); + parse(srp_id_, parser); parse(hint_, parser); parse(has_recovery_, parser); parse(email_address_pattern_, parser); } -template <class T> -void AuthManager::DbState::store(T &storer) const { +template <class StorerT> +void AuthManager::DbState::store(StorerT &storer) const { using td::store; + bool has_terms_of_service = !terms_of_service_.get_id().empty(); + bool is_pbkdf2_supported = true; + bool is_srp_supported = true; + bool is_wait_registration_supported = true; + bool is_wait_registration_stores_phone_number = true; + bool is_wait_qr_code_confirmation_supported = true; + bool is_time_store_supported = true; + BEGIN_STORE_FLAGS(); + STORE_FLAG(has_terms_of_service); + STORE_FLAG(is_pbkdf2_supported); + STORE_FLAG(is_srp_supported); + STORE_FLAG(is_wait_registration_supported); + STORE_FLAG(is_wait_registration_stores_phone_number); + STORE_FLAG(is_wait_qr_code_confirmation_supported); + STORE_FLAG(allow_apple_id_); + STORE_FLAG(allow_google_id_); + STORE_FLAG(is_time_store_supported); + END_STORE_FLAGS(); store(state_, storer); store(api_id_, storer); store(api_hash_, storer); - store(state_timestamp_, storer); + store_time(expires_at_, storer); + + if (has_terms_of_service) { + store(terms_of_service_, storer); + } - if (state_ == State::WaitCode) { + if (state_ == State::WaitEmailAddress) { store(send_code_helper_, storer); + } else if (state_ == State::WaitEmailCode) { + store(send_code_helper_, storer); + store(email_address_, storer); + store(email_code_info_, storer); + store(next_phone_number_login_date_, storer); + } else if (state_ == State::WaitCode) { + store(send_code_helper_, storer); + } else if (state_ == State::WaitQrCodeConfirmation) { + store(other_user_ids_, storer); + store(login_token_, storer); + store_time(login_token_expires_at_, storer); } else if (state_ == State::WaitPassword) { store(wait_password_state_, storer); + } else if (state_ == State::WaitRegistration) { + store(send_code_helper_, storer); } else { UNREACHABLE(); } } -template <class T> -void AuthManager::DbState::parse(T &parser) { + +template <class ParserT> +void AuthManager::DbState::parse(ParserT &parser) { using td::parse; + bool has_terms_of_service = false; + bool is_pbkdf2_supported = false; + bool is_srp_supported = false; + bool is_wait_registration_supported = false; + bool is_wait_registration_stores_phone_number = false; + bool is_wait_qr_code_confirmation_supported = false; + bool is_time_store_supported = false; + if (parser.version() >= static_cast<int32>(Version::AddTermsOfService)) { + BEGIN_PARSE_FLAGS(); + PARSE_FLAG(has_terms_of_service); + PARSE_FLAG(is_pbkdf2_supported); + PARSE_FLAG(is_srp_supported); + PARSE_FLAG(is_wait_registration_supported); + PARSE_FLAG(is_wait_registration_stores_phone_number); + PARSE_FLAG(is_wait_qr_code_confirmation_supported); + PARSE_FLAG(allow_apple_id_); + PARSE_FLAG(allow_google_id_); + PARSE_FLAG(is_time_store_supported); + END_PARSE_FLAGS(); + } + if (!is_time_store_supported) { + return parser.set_error("Have no time store support"); + } + CHECK(is_pbkdf2_supported); + CHECK(is_srp_supported); + CHECK(is_wait_registration_supported); + CHECK(is_wait_registration_stores_phone_number); + CHECK(is_wait_qr_code_confirmation_supported); + parse(state_, parser); parse(api_id_, parser); parse(api_hash_, parser); - parse(state_timestamp_, parser); + parse_time(expires_at_, parser); - if (state_ == State::WaitCode) { + if (has_terms_of_service) { + parse(terms_of_service_, parser); + } + + if (state_ == State::WaitEmailAddress) { + parse(send_code_helper_, parser); + } else if (state_ == State::WaitEmailCode) { parse(send_code_helper_, parser); + parse(email_address_, parser); + parse(email_code_info_, parser); + parse(next_phone_number_login_date_, parser); + } else if (state_ == State::WaitCode) { + parse(send_code_helper_, parser); + } else if (state_ == State::WaitQrCodeConfirmation) { + parse(other_user_ids_, parser); + parse(login_token_, parser); + parse_time(login_token_expires_at_, parser); } else if (state_ == State::WaitPassword) { parse(wait_password_state_, parser); + } else if (state_ == State::WaitRegistration) { + parse(send_code_helper_, parser); } else { parser.set_error(PSTRING() << "Unexpected " << tag("state", static_cast<int32>(state_))); } } + } // namespace td |