Add ResetAuthorizationOnServerLogEvent.

This commit is contained in:
levlam 2023-09-22 14:40:53 +03:00
parent e6fb913798
commit f2b2f01c33
4 changed files with 49 additions and 22 deletions

View File

@ -811,9 +811,37 @@ void AccountManager::get_active_sessions(Promise<td_api::object_ptr<td_api::sess
td_->create_handler<GetAuthorizationsQuery>(std::move(promise))->send(); td_->create_handler<GetAuthorizationsQuery>(std::move(promise))->send();
} }
class AccountManager::ResetAuthorizationOnServerLogEvent {
public:
int64 hash_;
template <class StorerT>
void store(StorerT &storer) const {
td::store(hash_, storer);
}
template <class ParserT>
void parse(ParserT &parser) {
td::parse(hash_, parser);
}
};
void AccountManager::reset_authorization_on_server(int64 hash, uint64 log_event_id, Promise<Unit> &&promise) {
if (log_event_id == 0) {
ResetAuthorizationOnServerLogEvent log_event{hash};
log_event_id = binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::ResetAuthorizationOnServer,
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<ResetAuthorizationQuery>(std::move(promise))->send(hash);
}
void AccountManager::terminate_session(int64 session_id, Promise<Unit> &&promise) { void AccountManager::terminate_session(int64 session_id, Promise<Unit> &&promise) {
on_confirm_authorization(session_id); on_confirm_authorization(session_id);
td_->create_handler<ResetAuthorizationQuery>(std::move(promise))->send(session_id); reset_authorization_on_server(session_id, 0, std::move(promise));
} }
void AccountManager::terminate_all_other_sessions(Promise<Unit> &&promise) { void AccountManager::terminate_all_other_sessions(Promise<Unit> &&promise) {
@ -860,28 +888,20 @@ class AccountManager::ChangeAuthorizationSettingsOnServerLogEvent {
} }
}; };
uint64 AccountManager::save_change_authorization_settings_on_server_log_event(
int64 hash, bool set_encrypted_requests_disabled, bool encrypted_requests_disabled, bool set_call_requests_disabled,
bool call_requests_disabled, bool confirm) {
ChangeAuthorizationSettingsOnServerLogEvent log_event{hash,
set_encrypted_requests_disabled,
encrypted_requests_disabled,
set_call_requests_disabled,
call_requests_disabled,
confirm};
return binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::ChangeAuthorizationSettingsOnServer,
get_log_event_storer(log_event));
}
void AccountManager::change_authorization_settings_on_server(int64 hash, bool set_encrypted_requests_disabled, void AccountManager::change_authorization_settings_on_server(int64 hash, bool set_encrypted_requests_disabled,
bool encrypted_requests_disabled, bool encrypted_requests_disabled,
bool set_call_requests_disabled, bool set_call_requests_disabled,
bool call_requests_disabled, bool confirm, bool call_requests_disabled, bool confirm,
uint64 log_event_id, Promise<Unit> &&promise) { uint64 log_event_id, Promise<Unit> &&promise) {
if (log_event_id == 0) { if (log_event_id == 0) {
log_event_id = save_change_authorization_settings_on_server_log_event( ChangeAuthorizationSettingsOnServerLogEvent log_event{hash,
hash, set_encrypted_requests_disabled, encrypted_requests_disabled, set_call_requests_disabled, set_encrypted_requests_disabled,
call_requests_disabled, confirm); encrypted_requests_disabled,
set_call_requests_disabled,
call_requests_disabled,
confirm};
log_event_id = binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::ChangeAuthorizationSettingsOnServer,
get_log_event_storer(log_event));
} }
auto new_promise = get_erase_log_event_promise(log_event_id, std::move(promise)); auto new_promise = get_erase_log_event_promise(log_event_id, std::move(promise));
@ -1061,6 +1081,13 @@ void AccountManager::on_binlog_events(vector<BinlogEvent> &&events) {
Auto()); Auto());
break; break;
} }
case LogEvent::HandlerType::ResetAuthorizationOnServer: {
ResetAuthorizationOnServerLogEvent log_event;
log_event_parse(log_event, event.get_data()).ensure();
reset_authorization_on_server(log_event.hash_, event.id_, Auto());
break;
}
default: default:
LOG(FATAL) << "Unsupported log event type " << event.type_; LOG(FATAL) << "Unsupported log event type " << event.type_;
} }

View File

@ -79,6 +79,7 @@ class AccountManager final : public Actor {
class UnconfirmedAuthorizations; class UnconfirmedAuthorizations;
class ChangeAuthorizationSettingsOnServerLogEvent; class ChangeAuthorizationSettingsOnServerLogEvent;
class ResetAuthorizationOnServerLogEvent;
void start_up() final; void start_up() final;
@ -98,16 +99,13 @@ class AccountManager final : public Actor {
void send_update_unconfirmed_session() const; void send_update_unconfirmed_session() const;
uint64 save_change_authorization_settings_on_server_log_event(int64 hash, bool set_encrypted_requests_disabled,
bool encrypted_requests_disabled,
bool set_call_requests_disabled,
bool call_requests_disabled, bool confirm);
void change_authorization_settings_on_server(int64 hash, bool set_encrypted_requests_disabled, void change_authorization_settings_on_server(int64 hash, bool set_encrypted_requests_disabled,
bool encrypted_requests_disabled, bool set_call_requests_disabled, bool encrypted_requests_disabled, bool set_call_requests_disabled,
bool call_requests_disabled, bool confirm, uint64 log_event_id, bool call_requests_disabled, bool confirm, uint64 log_event_id,
Promise<Unit> &&promise); Promise<Unit> &&promise);
void reset_authorization_on_server(int64 hash, uint64 log_event_id, Promise<Unit> &&promise);
Td *td_; Td *td_;
ActorShared<> parent_; ActorShared<> parent_;

View File

@ -145,6 +145,7 @@ Status init_binlog(Binlog &binlog, string path, BinlogKeyValue<Binlog> &binlog_p
events.save_app_log_events.push_back(event.clone()); events.save_app_log_events.push_back(event.clone());
break; break;
case LogEvent::HandlerType::ChangeAuthorizationSettingsOnServer: case LogEvent::HandlerType::ChangeAuthorizationSettingsOnServer:
case LogEvent::HandlerType::ResetAuthorizationOnServer:
events.to_account_manager.push_back(event.clone()); events.to_account_manager.push_back(event.clone());
break; break;
case LogEvent::HandlerType::BinlogPmcMagic: case LogEvent::HandlerType::BinlogPmcMagic:

View File

@ -113,6 +113,7 @@ class LogEvent {
SendStory = 0x403, SendStory = 0x403,
EditStory = 0x404, EditStory = 0x404,
ChangeAuthorizationSettingsOnServer = 0x500, ChangeAuthorizationSettingsOnServer = 0x500,
ResetAuthorizationOnServer = 0x501,
ConfigPmcMagic = 0x1f18, ConfigPmcMagic = 0x1f18,
BinlogPmcMagic = 0x4327 BinlogPmcMagic = 0x4327
}; };