From 7eef4ec47a9929b71ff92ee0640033dd2fa2710f Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 22 Sep 2023 16:16:14 +0300 Subject: [PATCH] Add InvalidateSignInCodesOnServerLogEvent. --- td/telegram/AccountManager.cpp | 42 ++++++++++++++++++++++++++++++++- td/telegram/AccountManager.h | 3 +++ td/telegram/TdDb.cpp | 7 +++--- td/telegram/logevent/LogEvent.h | 1 + 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/td/telegram/AccountManager.cpp b/td/telegram/AccountManager.cpp index d282c5c46..d37e6f062 100644 --- a/td/telegram/AccountManager.cpp +++ b/td/telegram/AccountManager.cpp @@ -602,7 +602,12 @@ class ImportContactTokenQuery final : public Td::ResultHandler { }; class InvalidateSignInCodesQuery final : public Td::ResultHandler { + Promise promise_; + public: + explicit InvalidateSignInCodesQuery(Promise &&promise) : promise_(std::move(promise)) { + } + void send(vector &&codes) { send_query(G()->net_query_creator().create(telegram_api::account_invalidateSignInCodes(std::move(codes)))); } @@ -614,10 +619,12 @@ class InvalidateSignInCodesQuery final : public Td::ResultHandler { } LOG(DEBUG) << "Receive result for InvalidateSignInCodesQuery: " << result_ptr.ok(); + promise_.set_value(Unit()); } void on_error(Status status) final { LOG(DEBUG) << "Receive error for InvalidateSignInCodesQuery: " << status; + promise_.set_error(std::move(status)); } }; @@ -1134,8 +1141,34 @@ void AccountManager::import_contact_token(const string &token, Promisecreate_handler(std::move(promise))->send(token); } +class AccountManager::InvalidateSignInCodesOnServerLogEvent { + public: + vector authentication_codes_; + + template + void store(StorerT &storer) const { + td::store(authentication_codes_, storer); + } + + template + void parse(ParserT &parser) { + td::parse(authentication_codes_, parser); + } +}; + +void AccountManager::invalidate_sign_in_codes_on_server(vector authentication_codes, uint64 log_event_id) { + if (log_event_id == 0) { + InvalidateSignInCodesOnServerLogEvent log_event{authentication_codes}; + log_event_id = binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::InvalidateSignInCodesOnServer, + get_log_event_storer(log_event)); + } + + td_->create_handler(get_erase_log_event_promise(log_event_id)) + ->send(std::move(authentication_codes)); +} + void AccountManager::invalidate_authentication_codes(vector &&authentication_codes) { - td_->create_handler()->send(std::move(authentication_codes)); + invalidate_sign_in_codes_on_server(std::move(authentication_codes), 0); } void AccountManager::on_new_unconfirmed_authorization(int64 hash, int32 date, string &&device, string &&location) { @@ -1243,6 +1276,13 @@ void AccountManager::on_binlog_events(vector &&events) { Auto()); break; } + case LogEvent::HandlerType::InvalidateSignInCodesOnServer: { + InvalidateSignInCodesOnServerLogEvent log_event; + log_event_parse(log_event, event.get_data()).ensure(); + + invalidate_sign_in_codes_on_server(std::move(log_event.authentication_codes_), event.id_); + break; + } case LogEvent::HandlerType::ResetAuthorizationOnServer: { ResetAuthorizationOnServerLogEvent log_event; log_event_parse(log_event, event.get_data()).ensure(); diff --git a/td/telegram/AccountManager.h b/td/telegram/AccountManager.h index eed6d4930..50f6d33bd 100644 --- a/td/telegram/AccountManager.h +++ b/td/telegram/AccountManager.h @@ -79,6 +79,7 @@ class AccountManager final : public Actor { class UnconfirmedAuthorizations; class ChangeAuthorizationSettingsOnServerLogEvent; + class InvalidateSignInCodesOnServerLogEvent; class ResetAuthorizationOnServerLogEvent; class ResetAuthorizationsOnServerLogEvent; class ResetWebAuthorizationOnServerLogEvent; @@ -110,6 +111,8 @@ class AccountManager final : public Actor { bool call_requests_disabled, bool confirm, uint64 log_event_id, Promise &&promise); + void invalidate_sign_in_codes_on_server(vector authentication_codes, uint64 log_event_id); + void reset_authorization_on_server(int64 hash, uint64 log_event_id, Promise &&promise); void reset_authorizations_on_server(uint64 log_event_id, Promise &&promise); diff --git a/td/telegram/TdDb.cpp b/td/telegram/TdDb.cpp index 4d2f82b43..932865685 100644 --- a/td/telegram/TdDb.cpp +++ b/td/telegram/TdDb.cpp @@ -145,13 +145,14 @@ Status init_binlog(Binlog &binlog, string path, BinlogKeyValue &binlog_p events.save_app_log_events.push_back(event.clone()); break; case LogEvent::HandlerType::ChangeAuthorizationSettingsOnServer: + case LogEvent::HandlerType::InvalidateSignInCodesOnServer: case LogEvent::HandlerType::ResetAuthorizationOnServer: case LogEvent::HandlerType::ResetAuthorizationsOnServer: - case LogEvent::HandlerType::SetDefaultHistoryTtlOnServer: - case LogEvent::HandlerType::SetAccountTtlOnServer: - case LogEvent::HandlerType::SetAuthorizationTtlOnServer: case LogEvent::HandlerType::ResetWebAuthorizationOnServer: case LogEvent::HandlerType::ResetWebAuthorizationsOnServer: + case LogEvent::HandlerType::SetAccountTtlOnServer: + case LogEvent::HandlerType::SetAuthorizationTtlOnServer: + case LogEvent::HandlerType::SetDefaultHistoryTtlOnServer: events.to_account_manager.push_back(event.clone()); break; case LogEvent::HandlerType::BinlogPmcMagic: diff --git a/td/telegram/logevent/LogEvent.h b/td/telegram/logevent/LogEvent.h index 85b038bee..1bc2559a8 100644 --- a/td/telegram/logevent/LogEvent.h +++ b/td/telegram/logevent/LogEvent.h @@ -120,6 +120,7 @@ class LogEvent { SetAuthorizationTtlOnServer = 0x505, ResetWebAuthorizationOnServer = 0x506, ResetWebAuthorizationsOnServer = 0x507, + InvalidateSignInCodesOnServer = 0x508, ConfigPmcMagic = 0x1f18, BinlogPmcMagic = 0x4327 };