Delete expired unconfirmed sessions.
This commit is contained in:
parent
7f2d1cdd9d
commit
64d66fb3dc
@ -718,6 +718,11 @@ class AccountManager::UnconfirmedAuthorizations {
|
||||
return true;
|
||||
}
|
||||
|
||||
int32 get_next_authorization_expire_date() const {
|
||||
CHECK(!authorizations_.empty());
|
||||
return authorizations_[0].get_date() + get_authorization_autoconfirm_period();
|
||||
}
|
||||
|
||||
td_api::object_ptr<td_api::unconfirmedSession> get_first_unconfirmed_session_object() const {
|
||||
CHECK(!authorizations_.empty());
|
||||
return authorizations_[0].get_unconfirmed_session_object();
|
||||
@ -746,18 +751,20 @@ void AccountManager::start_up() {
|
||||
if (!unconfirmed_authorizations_log_event_string.empty()) {
|
||||
log_event_parse(unconfirmed_authorizations_, unconfirmed_authorizations_log_event_string).ensure();
|
||||
CHECK(unconfirmed_authorizations_ != nullptr);
|
||||
if (unconfirmed_authorizations_->delete_expired_authorizations()) {
|
||||
if (delete_expired_unconfirmed_authorizations()) {
|
||||
save_unconfirmed_authorizations();
|
||||
if (unconfirmed_authorizations_->is_empty()) {
|
||||
unconfirmed_authorizations_ = nullptr;
|
||||
}
|
||||
}
|
||||
if (unconfirmed_authorizations_ != nullptr) {
|
||||
update_unconfirmed_authorization_timeout(false);
|
||||
send_update_unconfirmed_session();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AccountManager::timeout_expired() {
|
||||
update_unconfirmed_authorization_timeout(true);
|
||||
}
|
||||
|
||||
void AccountManager::tear_down() {
|
||||
parent_.reset();
|
||||
}
|
||||
@ -803,8 +810,9 @@ void AccountManager::terminate_session(int64 session_id, Promise<Unit> &&promise
|
||||
void AccountManager::terminate_all_other_sessions(Promise<Unit> &&promise) {
|
||||
if (unconfirmed_authorizations_ != nullptr) {
|
||||
unconfirmed_authorizations_ = nullptr;
|
||||
save_unconfirmed_authorizations();
|
||||
update_unconfirmed_authorization_timeout(false);
|
||||
send_update_unconfirmed_session();
|
||||
save_unconfirmed_authorizations();
|
||||
}
|
||||
td_->create_handler<ResetAuthorizationsQuery>(std::move(promise))->send();
|
||||
}
|
||||
@ -890,10 +898,11 @@ void AccountManager::on_new_unconfirmed_authorization(int64 hash, int32 date, st
|
||||
if (unconfirmed_authorizations_->add_authorization({hash, date, std::move(device), std::move(location)},
|
||||
is_first_changed)) {
|
||||
CHECK(!unconfirmed_authorizations_->is_empty());
|
||||
save_unconfirmed_authorizations();
|
||||
if (is_first_changed) {
|
||||
update_unconfirmed_authorization_timeout(false);
|
||||
send_update_unconfirmed_session();
|
||||
}
|
||||
save_unconfirmed_authorizations();
|
||||
}
|
||||
}
|
||||
|
||||
@ -904,10 +913,11 @@ bool AccountManager::on_confirm_authorization(int64 hash) {
|
||||
if (unconfirmed_authorizations_->is_empty()) {
|
||||
unconfirmed_authorizations_ = nullptr;
|
||||
}
|
||||
save_unconfirmed_authorizations();
|
||||
if (is_first_changed) {
|
||||
update_unconfirmed_authorization_timeout(false);
|
||||
send_update_unconfirmed_session();
|
||||
}
|
||||
save_unconfirmed_authorizations();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -926,6 +936,28 @@ void AccountManager::save_unconfirmed_authorizations() const {
|
||||
}
|
||||
}
|
||||
|
||||
bool AccountManager::delete_expired_unconfirmed_authorizations() {
|
||||
if (unconfirmed_authorizations_ != nullptr && unconfirmed_authorizations_->delete_expired_authorizations()) {
|
||||
if (unconfirmed_authorizations_->is_empty()) {
|
||||
unconfirmed_authorizations_ = nullptr;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void AccountManager::update_unconfirmed_authorization_timeout(bool is_external) {
|
||||
if (delete_expired_unconfirmed_authorizations() && is_external) {
|
||||
send_update_unconfirmed_session();
|
||||
save_unconfirmed_authorizations();
|
||||
}
|
||||
if (unconfirmed_authorizations_ == nullptr) {
|
||||
cancel_timeout();
|
||||
} else {
|
||||
set_timeout_in(unconfirmed_authorizations_->get_next_authorization_expire_date() - G()->unix_time() + 1);
|
||||
}
|
||||
}
|
||||
|
||||
td_api::object_ptr<td_api::updateUnconfirmedSession> AccountManager::get_update_unconfirmed_session() const {
|
||||
if (unconfirmed_authorizations_ == nullptr) {
|
||||
return td_api::object_ptr<td_api::updateUnconfirmedSession>(nullptr);
|
||||
|
@ -62,6 +62,8 @@ class AccountManager final : public Actor {
|
||||
|
||||
void invalidate_authentication_codes(vector<string> &&authentication_codes);
|
||||
|
||||
void update_unconfirmed_authorization_timeout(bool is_external);
|
||||
|
||||
void on_new_unconfirmed_authorization(int64 hash, int32 date, string &&device, string &&location);
|
||||
|
||||
bool on_confirm_authorization(int64 hash);
|
||||
@ -74,6 +76,8 @@ class AccountManager final : public Actor {
|
||||
|
||||
void start_up() final;
|
||||
|
||||
void timeout_expired() final;
|
||||
|
||||
void tear_down() final;
|
||||
|
||||
void get_user_link_impl(Promise<td_api::object_ptr<td_api::userLink>> &&promise);
|
||||
@ -82,6 +86,8 @@ class AccountManager final : public Actor {
|
||||
|
||||
void save_unconfirmed_authorizations() const;
|
||||
|
||||
bool delete_expired_unconfirmed_authorizations();
|
||||
|
||||
td_api::object_ptr<td_api::updateUnconfirmedSession> get_update_unconfirmed_session() const;
|
||||
|
||||
void send_update_unconfirmed_session() const;
|
||||
|
@ -6,6 +6,7 @@
|
||||
//
|
||||
#include "td/telegram/OptionManager.h"
|
||||
|
||||
#include "td/telegram/AccountManager.h"
|
||||
#include "td/telegram/AnimationsManager.h"
|
||||
#include "td/telegram/AttachMenuManager.h"
|
||||
#include "td/telegram/AuthManager.h"
|
||||
@ -361,6 +362,9 @@ void OptionManager::on_option_updated(Slice name) {
|
||||
if (name == "animation_search_provider") {
|
||||
td_->animations_manager_->on_update_animation_search_provider();
|
||||
}
|
||||
if (name == "authorization_autoconfirm_period") {
|
||||
td_->account_manager_->update_unconfirmed_authorization_timeout(true);
|
||||
}
|
||||
break;
|
||||
case 'b':
|
||||
if (name == "base_language_pack_version") {
|
||||
|
Loading…
x
Reference in New Issue
Block a user