From df3d50b056c668f64404627dc77820ebfbce939c Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 22 Sep 2023 16:04:00 +0300 Subject: [PATCH] Add ResetWebAuthorizationsOnServerLogEvent. --- td/telegram/AccountManager.cpp | 33 ++++++++++++++++++++++++++++++++- td/telegram/AccountManager.h | 3 +++ td/telegram/TdDb.cpp | 1 + td/telegram/logevent/LogEvent.h | 1 + 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/td/telegram/AccountManager.cpp b/td/telegram/AccountManager.cpp index 8b9939903..d282c5c46 100644 --- a/td/telegram/AccountManager.cpp +++ b/td/telegram/AccountManager.cpp @@ -1081,10 +1081,34 @@ void AccountManager::disconnect_website(int64 website_id, Promise &&promis reset_web_authorization_on_server(website_id, 0, std::move(promise)); } -void AccountManager::disconnect_all_websites(Promise &&promise) { +class AccountManager::ResetWebAuthorizationsOnServerLogEvent { + public: + template + void store(StorerT &storer) const { + } + + template + void parse(ParserT &parser) { + } +}; + +void AccountManager::reset_web_authorizations_on_server(uint64 log_event_id, Promise &&promise) { + if (log_event_id == 0) { + ResetWebAuthorizationsOnServerLogEvent log_event; + log_event_id = binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::ResetWebAuthorizationsOnServer, + get_log_event_storer(log_event)); + } + + auto new_promise = get_erase_log_event_promise(log_event_id, std::move(promise)); + promise = std::move(new_promise); // to prevent self-move + td_->create_handler(std::move(promise))->send(); } +void AccountManager::disconnect_all_websites(Promise &&promise) { + reset_web_authorizations_on_server(0, std::move(promise)); +} + void AccountManager::get_user_link(Promise> &&promise) { td_->contacts_manager_->get_me( PromiseCreator::lambda([actor_id = actor_id(this), promise = std::move(promise)](Result &&result) mutable { @@ -1240,6 +1264,13 @@ void AccountManager::on_binlog_events(vector &&events) { reset_web_authorization_on_server(log_event.hash_, event.id_, Auto()); break; } + case LogEvent::HandlerType::ResetWebAuthorizationsOnServer: { + ResetWebAuthorizationsOnServerLogEvent log_event; + log_event_parse(log_event, event.get_data()).ensure(); + + reset_web_authorizations_on_server(event.id_, Auto()); + break; + } case LogEvent::HandlerType::SetAccountTtlOnServer: { SetAccountTtlOnServerLogEvent log_event; log_event_parse(log_event, event.get_data()).ensure(); diff --git a/td/telegram/AccountManager.h b/td/telegram/AccountManager.h index 73e2fa4b8..eed6d4930 100644 --- a/td/telegram/AccountManager.h +++ b/td/telegram/AccountManager.h @@ -82,6 +82,7 @@ class AccountManager final : public Actor { class ResetAuthorizationOnServerLogEvent; class ResetAuthorizationsOnServerLogEvent; class ResetWebAuthorizationOnServerLogEvent; + class ResetWebAuthorizationsOnServerLogEvent; class SetAccountTtlOnServerLogEvent; class SetAuthorizationTtlOnServerLogEvent; class SetDefaultHistoryTtlOnServerLogEvent; @@ -115,6 +116,8 @@ class AccountManager final : public Actor { void reset_web_authorization_on_server(int64 hash, uint64 log_event_id, Promise &&promise); + void reset_web_authorizations_on_server(uint64 log_event_id, Promise &&promise); + void set_account_ttl_on_server(int32 account_ttl, uint64 log_event_id, Promise &&promise); void set_authorization_ttl_on_server(int32 authorization_ttl_days, uint64 log_event_id, Promise &&promise); diff --git a/td/telegram/TdDb.cpp b/td/telegram/TdDb.cpp index 78b87a105..4d2f82b43 100644 --- a/td/telegram/TdDb.cpp +++ b/td/telegram/TdDb.cpp @@ -151,6 +151,7 @@ Status init_binlog(Binlog &binlog, string path, BinlogKeyValue &binlog_p case LogEvent::HandlerType::SetAccountTtlOnServer: case LogEvent::HandlerType::SetAuthorizationTtlOnServer: case LogEvent::HandlerType::ResetWebAuthorizationOnServer: + case LogEvent::HandlerType::ResetWebAuthorizationsOnServer: 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 094be3f74..85b038bee 100644 --- a/td/telegram/logevent/LogEvent.h +++ b/td/telegram/logevent/LogEvent.h @@ -119,6 +119,7 @@ class LogEvent { SetAccountTtlOnServer = 0x504, SetAuthorizationTtlOnServer = 0x505, ResetWebAuthorizationOnServer = 0x506, + ResetWebAuthorizationsOnServer = 0x507, ConfigPmcMagic = 0x1f18, BinlogPmcMagic = 0x4327 };