Move account-related methods to Account.cpp.
This commit is contained in:
parent
c2c49ebc66
commit
c64cc8ad26
@ -276,6 +276,7 @@ set(TDLIB_SOURCE
|
|||||||
td/mtproto/Transport.cpp
|
td/mtproto/Transport.cpp
|
||||||
td/mtproto/utils.cpp
|
td/mtproto/utils.cpp
|
||||||
|
|
||||||
|
td/telegram/Account.cpp
|
||||||
td/telegram/AnimationsManager.cpp
|
td/telegram/AnimationsManager.cpp
|
||||||
td/telegram/AudiosManager.cpp
|
td/telegram/AudiosManager.cpp
|
||||||
td/telegram/AuthManager.cpp
|
td/telegram/AuthManager.cpp
|
||||||
@ -453,6 +454,7 @@ set(TDLIB_SOURCE
|
|||||||
td/mtproto/utils.h
|
td/mtproto/utils.h
|
||||||
|
|
||||||
td/telegram/AccessRights.h
|
td/telegram/AccessRights.h
|
||||||
|
td/telegram/Account.h
|
||||||
td/telegram/AffectedHistory.h
|
td/telegram/AffectedHistory.h
|
||||||
td/telegram/AnimationsManager.h
|
td/telegram/AnimationsManager.h
|
||||||
td/telegram/AudiosManager.h
|
td/telegram/AudiosManager.h
|
||||||
|
255
td/telegram/Account.cpp
Normal file
255
td/telegram/Account.cpp
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
//
|
||||||
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021
|
||||||
|
//
|
||||||
|
// 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)
|
||||||
|
//
|
||||||
|
#include "td/telegram/Account.h"
|
||||||
|
|
||||||
|
#include "td/telegram/DeviceTokenManager.h"
|
||||||
|
#include "td/telegram/Global.h"
|
||||||
|
#include "td/telegram/net/NetQueryCreator.h"
|
||||||
|
#include "td/telegram/Td.h"
|
||||||
|
#include "td/telegram/telegram_api.h"
|
||||||
|
|
||||||
|
#include "td/actor/actor.h"
|
||||||
|
|
||||||
|
#include "td/utils/algorithm.h"
|
||||||
|
#include "td/utils/base64.h"
|
||||||
|
#include "td/utils/buffer.h"
|
||||||
|
#include "td/utils/logging.h"
|
||||||
|
#include "td/utils/misc.h"
|
||||||
|
#include "td/utils/Slice.h"
|
||||||
|
#include "td/utils/Status.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
namespace td {
|
||||||
|
|
||||||
|
static td_api::object_ptr<td_api::session> convert_authorization_object(
|
||||||
|
tl_object_ptr<telegram_api::authorization> &&authorization) {
|
||||||
|
CHECK(authorization != nullptr);
|
||||||
|
return td_api::make_object<td_api::session>(
|
||||||
|
authorization->hash_, authorization->current_, authorization->password_pending_, authorization->api_id_,
|
||||||
|
authorization->app_name_, authorization->app_version_, authorization->official_app_, authorization->device_model_,
|
||||||
|
authorization->platform_, authorization->system_version_, authorization->date_created_,
|
||||||
|
authorization->date_active_, authorization->ip_, authorization->country_, authorization->region_);
|
||||||
|
}
|
||||||
|
|
||||||
|
class SetAccountTtlQuery final : public Td::ResultHandler {
|
||||||
|
Promise<Unit> promise_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit SetAccountTtlQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(int32 account_ttl) {
|
||||||
|
send_query(G()->net_query_creator().create(
|
||||||
|
telegram_api::account_setAccountTTL(make_tl_object<telegram_api::accountDaysTTL>(account_ttl))));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(BufferSlice packet) final {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::account_setAccountTTL>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool result = result_ptr.move_as_ok();
|
||||||
|
if (!result) {
|
||||||
|
return on_error(Status::Error(500, "Internal Server Error: failed to set account TTL"));
|
||||||
|
}
|
||||||
|
|
||||||
|
promise_.set_value(Unit());
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(Status status) final {
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class GetAccountTtlQuery final : public Td::ResultHandler {
|
||||||
|
Promise<int32> promise_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit GetAccountTtlQuery(Promise<int32> &&promise) : promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send() {
|
||||||
|
send_query(G()->net_query_creator().create(telegram_api::account_getAccountTTL()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(BufferSlice packet) final {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::account_getAccountTTL>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto ptr = result_ptr.move_as_ok();
|
||||||
|
LOG(INFO) << "Receive result for GetAccountTtlQuery: " << to_string(ptr);
|
||||||
|
|
||||||
|
promise_.set_value(std::move(ptr->days_));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(Status status) final {
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class AcceptLoginTokenQuery final : public Td::ResultHandler {
|
||||||
|
Promise<td_api::object_ptr<td_api::session>> promise_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit AcceptLoginTokenQuery(Promise<td_api::object_ptr<td_api::session>> &&promise)
|
||||||
|
: promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(const string &login_token) {
|
||||||
|
send_query(G()->net_query_creator().create(telegram_api::auth_acceptLoginToken(BufferSlice(login_token))));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(BufferSlice packet) final {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::auth_acceptLoginToken>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG(DEBUG) << "Receive result for AcceptLoginTokenQuery: " << to_string(result_ptr.ok());
|
||||||
|
promise_.set_value(convert_authorization_object(result_ptr.move_as_ok()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(Status status) final {
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class GetAuthorizationsQuery final : public Td::ResultHandler {
|
||||||
|
Promise<td_api::object_ptr<td_api::sessions>> promise_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit GetAuthorizationsQuery(Promise<td_api::object_ptr<td_api::sessions>> &&promise)
|
||||||
|
: promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send() {
|
||||||
|
send_query(G()->net_query_creator().create(telegram_api::account_getAuthorizations()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(BufferSlice packet) final {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::account_getAuthorizations>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto ptr = result_ptr.move_as_ok();
|
||||||
|
LOG(INFO) << "Receive result for GetAuthorizationsQuery: " << to_string(ptr);
|
||||||
|
|
||||||
|
auto results =
|
||||||
|
make_tl_object<td_api::sessions>(transform(std::move(ptr->authorizations_), convert_authorization_object));
|
||||||
|
std::sort(results->sessions_.begin(), results->sessions_.end(),
|
||||||
|
[](const td_api::object_ptr<td_api::session> &lhs, const td_api::object_ptr<td_api::session> &rhs) {
|
||||||
|
if (lhs->is_current_ != rhs->is_current_) {
|
||||||
|
return lhs->is_current_;
|
||||||
|
}
|
||||||
|
if (lhs->is_password_pending_ != rhs->is_password_pending_) {
|
||||||
|
return lhs->is_password_pending_;
|
||||||
|
}
|
||||||
|
return lhs->last_active_date_ > rhs->last_active_date_;
|
||||||
|
});
|
||||||
|
|
||||||
|
promise_.set_value(std::move(results));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(Status status) final {
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ResetAuthorizationQuery final : public Td::ResultHandler {
|
||||||
|
Promise<Unit> promise_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ResetAuthorizationQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(int64 authorization_id) {
|
||||||
|
send_query(G()->net_query_creator().create(telegram_api::account_resetAuthorization(authorization_id)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(BufferSlice packet) final {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::account_resetAuthorization>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool result = result_ptr.move_as_ok();
|
||||||
|
LOG_IF(WARNING, !result) << "Failed to terminate session";
|
||||||
|
promise_.set_value(Unit());
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(Status status) final {
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ResetAuthorizationsQuery final : public Td::ResultHandler {
|
||||||
|
Promise<Unit> promise_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ResetAuthorizationsQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send() {
|
||||||
|
send_query(G()->net_query_creator().create(telegram_api::auth_resetAuthorizations()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(BufferSlice packet) final {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::auth_resetAuthorizations>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool result = result_ptr.move_as_ok();
|
||||||
|
LOG_IF(WARNING, !result) << "Failed to terminate all sessions";
|
||||||
|
send_closure(td_->device_token_manager_, &DeviceTokenManager::reregister_device);
|
||||||
|
promise_.set_value(Unit());
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(Status status) final {
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void set_account_ttl(Td *td, int32 account_ttl, Promise<Unit> &&promise) {
|
||||||
|
td->create_handler<SetAccountTtlQuery>(std::move(promise))->send(account_ttl);
|
||||||
|
}
|
||||||
|
|
||||||
|
void get_account_ttl(Td *td, Promise<int32> &&promise) {
|
||||||
|
td->create_handler<GetAccountTtlQuery>(std::move(promise))->send();
|
||||||
|
}
|
||||||
|
|
||||||
|
void confirm_qr_code_authentication(Td *td, const string &link,
|
||||||
|
Promise<td_api::object_ptr<td_api::session>> &&promise) {
|
||||||
|
Slice prefix("tg://login?token=");
|
||||||
|
if (!begins_with(to_lower(link), prefix)) {
|
||||||
|
return promise.set_error(Status::Error(400, "AUTH_TOKEN_INVALID"));
|
||||||
|
}
|
||||||
|
auto r_token = base64url_decode(Slice(link).substr(prefix.size()));
|
||||||
|
if (r_token.is_error()) {
|
||||||
|
return promise.set_error(Status::Error(400, "AUTH_TOKEN_INVALID"));
|
||||||
|
}
|
||||||
|
td->create_handler<AcceptLoginTokenQuery>(std::move(promise))->send(r_token.ok());
|
||||||
|
}
|
||||||
|
|
||||||
|
void get_active_sessions(Td *td, Promise<td_api::object_ptr<td_api::sessions>> &&promise) {
|
||||||
|
td->create_handler<GetAuthorizationsQuery>(std::move(promise))->send();
|
||||||
|
}
|
||||||
|
|
||||||
|
void terminate_session(Td *td, int64 session_id, Promise<Unit> &&promise) {
|
||||||
|
td->create_handler<ResetAuthorizationQuery>(std::move(promise))->send(session_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void terminate_all_other_sessions(Td *td, Promise<Unit> &&promise) {
|
||||||
|
td->create_handler<ResetAuthorizationsQuery>(std::move(promise))->send();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace td
|
31
td/telegram/Account.h
Normal file
31
td/telegram/Account.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
//
|
||||||
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021
|
||||||
|
//
|
||||||
|
// 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/td_api.h"
|
||||||
|
|
||||||
|
#include "td/actor/PromiseFuture.h"
|
||||||
|
|
||||||
|
#include "td/utils/common.h"
|
||||||
|
|
||||||
|
namespace td {
|
||||||
|
|
||||||
|
class Td;
|
||||||
|
|
||||||
|
void set_account_ttl(Td *td, int32 account_ttl, Promise<Unit> &&promise);
|
||||||
|
|
||||||
|
void get_account_ttl(Td *td, Promise<int32> &&promise);
|
||||||
|
|
||||||
|
void confirm_qr_code_authentication(Td *td, const string &link, Promise<td_api::object_ptr<td_api::session>> &&promise);
|
||||||
|
|
||||||
|
void get_active_sessions(Td *td, Promise<td_api::object_ptr<td_api::sessions>> &&promise);
|
||||||
|
|
||||||
|
void terminate_session(Td *td, int64 session_id, Promise<Unit> &&promise);
|
||||||
|
|
||||||
|
void terminate_all_other_sessions(Td *td, Promise<Unit> &&promise);
|
||||||
|
|
||||||
|
} // namespace td
|
@ -54,7 +54,6 @@
|
|||||||
#include "td/actor/SleepActor.h"
|
#include "td/actor/SleepActor.h"
|
||||||
|
|
||||||
#include "td/utils/algorithm.h"
|
#include "td/utils/algorithm.h"
|
||||||
#include "td/utils/base64.h"
|
|
||||||
#include "td/utils/buffer.h"
|
#include "td/utils/buffer.h"
|
||||||
#include "td/utils/format.h"
|
#include "td/utils/format.h"
|
||||||
#include "td/utils/logging.h"
|
#include "td/utils/logging.h"
|
||||||
@ -106,188 +105,6 @@ class DismissSuggestionQuery final : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class SetAccountTtlQuery final : public Td::ResultHandler {
|
|
||||||
Promise<Unit> promise_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit SetAccountTtlQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void send(int32 account_ttl) {
|
|
||||||
send_query(G()->net_query_creator().create(
|
|
||||||
telegram_api::account_setAccountTTL(make_tl_object<telegram_api::accountDaysTTL>(account_ttl))));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
|
||||||
auto result_ptr = fetch_result<telegram_api::account_setAccountTTL>(packet);
|
|
||||||
if (result_ptr.is_error()) {
|
|
||||||
return on_error(result_ptr.move_as_error());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool result = result_ptr.move_as_ok();
|
|
||||||
if (!result) {
|
|
||||||
return on_error(Status::Error(500, "Internal Server Error: failed to set account TTL"));
|
|
||||||
}
|
|
||||||
|
|
||||||
promise_.set_value(Unit());
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_error(Status status) final {
|
|
||||||
promise_.set_error(std::move(status));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class GetAccountTtlQuery final : public Td::ResultHandler {
|
|
||||||
Promise<int32> promise_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit GetAccountTtlQuery(Promise<int32> &&promise) : promise_(std::move(promise)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void send() {
|
|
||||||
send_query(G()->net_query_creator().create(telegram_api::account_getAccountTTL()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
|
||||||
auto result_ptr = fetch_result<telegram_api::account_getAccountTTL>(packet);
|
|
||||||
if (result_ptr.is_error()) {
|
|
||||||
return on_error(result_ptr.move_as_error());
|
|
||||||
}
|
|
||||||
|
|
||||||
auto ptr = result_ptr.move_as_ok();
|
|
||||||
LOG(INFO) << "Receive result for GetAccountTtlQuery: " << to_string(ptr);
|
|
||||||
|
|
||||||
promise_.set_value(std::move(ptr->days_));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_error(Status status) final {
|
|
||||||
promise_.set_error(std::move(status));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class AcceptLoginTokenQuery final : public Td::ResultHandler {
|
|
||||||
Promise<td_api::object_ptr<td_api::session>> promise_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit AcceptLoginTokenQuery(Promise<td_api::object_ptr<td_api::session>> &&promise)
|
|
||||||
: promise_(std::move(promise)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void send(const string &login_token) {
|
|
||||||
send_query(G()->net_query_creator().create(telegram_api::auth_acceptLoginToken(BufferSlice(login_token))));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
|
||||||
auto result_ptr = fetch_result<telegram_api::auth_acceptLoginToken>(packet);
|
|
||||||
if (result_ptr.is_error()) {
|
|
||||||
return on_error(result_ptr.move_as_error());
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG(DEBUG) << "Receive result for AcceptLoginTokenQuery: " << to_string(result_ptr.ok());
|
|
||||||
promise_.set_value(ContactsManager::convert_authorization_object(result_ptr.move_as_ok()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_error(Status status) final {
|
|
||||||
promise_.set_error(std::move(status));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class GetAuthorizationsQuery final : public Td::ResultHandler {
|
|
||||||
Promise<tl_object_ptr<td_api::sessions>> promise_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit GetAuthorizationsQuery(Promise<tl_object_ptr<td_api::sessions>> &&promise) : promise_(std::move(promise)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void send() {
|
|
||||||
send_query(G()->net_query_creator().create(telegram_api::account_getAuthorizations()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
|
||||||
auto result_ptr = fetch_result<telegram_api::account_getAuthorizations>(packet);
|
|
||||||
if (result_ptr.is_error()) {
|
|
||||||
return on_error(result_ptr.move_as_error());
|
|
||||||
}
|
|
||||||
|
|
||||||
auto ptr = result_ptr.move_as_ok();
|
|
||||||
LOG(INFO) << "Receive result for GetAuthorizationsQuery: " << to_string(ptr);
|
|
||||||
|
|
||||||
auto results = make_tl_object<td_api::sessions>(
|
|
||||||
transform(std::move(ptr->authorizations_), ContactsManager::convert_authorization_object));
|
|
||||||
std::sort(results->sessions_.begin(), results->sessions_.end(),
|
|
||||||
[](const td_api::object_ptr<td_api::session> &lhs, const td_api::object_ptr<td_api::session> &rhs) {
|
|
||||||
if (lhs->is_current_ != rhs->is_current_) {
|
|
||||||
return lhs->is_current_;
|
|
||||||
}
|
|
||||||
if (lhs->is_password_pending_ != rhs->is_password_pending_) {
|
|
||||||
return lhs->is_password_pending_;
|
|
||||||
}
|
|
||||||
return lhs->last_active_date_ > rhs->last_active_date_;
|
|
||||||
});
|
|
||||||
|
|
||||||
promise_.set_value(std::move(results));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_error(Status status) final {
|
|
||||||
promise_.set_error(std::move(status));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class ResetAuthorizationQuery final : public Td::ResultHandler {
|
|
||||||
Promise<Unit> promise_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit ResetAuthorizationQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void send(int64 authorization_id) {
|
|
||||||
send_query(G()->net_query_creator().create(telegram_api::account_resetAuthorization(authorization_id)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
|
||||||
auto result_ptr = fetch_result<telegram_api::account_resetAuthorization>(packet);
|
|
||||||
if (result_ptr.is_error()) {
|
|
||||||
return on_error(result_ptr.move_as_error());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool result = result_ptr.move_as_ok();
|
|
||||||
LOG_IF(WARNING, !result) << "Failed to terminate session";
|
|
||||||
promise_.set_value(Unit());
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_error(Status status) final {
|
|
||||||
promise_.set_error(std::move(status));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class ResetAuthorizationsQuery final : public Td::ResultHandler {
|
|
||||||
Promise<Unit> promise_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit ResetAuthorizationsQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void send() {
|
|
||||||
send_query(G()->net_query_creator().create(telegram_api::auth_resetAuthorizations()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
|
||||||
auto result_ptr = fetch_result<telegram_api::auth_resetAuthorizations>(packet);
|
|
||||||
if (result_ptr.is_error()) {
|
|
||||||
return on_error(result_ptr.move_as_error());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool result = result_ptr.move_as_ok();
|
|
||||||
LOG_IF(WARNING, !result) << "Failed to terminate all sessions";
|
|
||||||
send_closure(td_->device_token_manager_, &DeviceTokenManager::reregister_device);
|
|
||||||
promise_.set_value(Unit());
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_error(Status status) final {
|
|
||||||
promise_.set_error(std::move(status));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class GetWebAuthorizationsQuery final : public Td::ResultHandler {
|
class GetWebAuthorizationsQuery final : public Td::ResultHandler {
|
||||||
Promise<tl_object_ptr<td_api::connectedWebsites>> promise_;
|
Promise<tl_object_ptr<td_api::connectedWebsites>> promise_;
|
||||||
|
|
||||||
@ -5223,49 +5040,6 @@ td_api::object_ptr<td_api::CheckChatUsernameResult> ContactsManager::get_check_c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContactsManager::set_account_ttl(int32 account_ttl, Promise<Unit> &&promise) const {
|
|
||||||
td_->create_handler<SetAccountTtlQuery>(std::move(promise))->send(account_ttl);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ContactsManager::get_account_ttl(Promise<int32> &&promise) const {
|
|
||||||
td_->create_handler<GetAccountTtlQuery>(std::move(promise))->send();
|
|
||||||
}
|
|
||||||
|
|
||||||
td_api::object_ptr<td_api::session> ContactsManager::convert_authorization_object(
|
|
||||||
tl_object_ptr<telegram_api::authorization> &&authorization) {
|
|
||||||
CHECK(authorization != nullptr);
|
|
||||||
return td_api::make_object<td_api::session>(
|
|
||||||
authorization->hash_, authorization->current_, authorization->password_pending_, authorization->api_id_,
|
|
||||||
authorization->app_name_, authorization->app_version_, authorization->official_app_, authorization->device_model_,
|
|
||||||
authorization->platform_, authorization->system_version_, authorization->date_created_,
|
|
||||||
authorization->date_active_, authorization->ip_, authorization->country_, authorization->region_);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ContactsManager::confirm_qr_code_authentication(const string &link,
|
|
||||||
Promise<td_api::object_ptr<td_api::session>> &&promise) {
|
|
||||||
Slice prefix("tg://login?token=");
|
|
||||||
if (!begins_with(to_lower(link), prefix)) {
|
|
||||||
return promise.set_error(Status::Error(400, "AUTH_TOKEN_INVALID"));
|
|
||||||
}
|
|
||||||
auto r_token = base64url_decode(Slice(link).substr(prefix.size()));
|
|
||||||
if (r_token.is_error()) {
|
|
||||||
return promise.set_error(Status::Error(400, "AUTH_TOKEN_INVALID"));
|
|
||||||
}
|
|
||||||
td_->create_handler<AcceptLoginTokenQuery>(std::move(promise))->send(r_token.ok());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ContactsManager::get_active_sessions(Promise<tl_object_ptr<td_api::sessions>> &&promise) const {
|
|
||||||
td_->create_handler<GetAuthorizationsQuery>(std::move(promise))->send();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ContactsManager::terminate_session(int64 session_id, Promise<Unit> &&promise) const {
|
|
||||||
td_->create_handler<ResetAuthorizationQuery>(std::move(promise))->send(session_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ContactsManager::terminate_all_other_sessions(Promise<Unit> &&promise) const {
|
|
||||||
td_->create_handler<ResetAuthorizationsQuery>(std::move(promise))->send();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ContactsManager::get_connected_websites(Promise<tl_object_ptr<td_api::connectedWebsites>> &&promise) const {
|
void ContactsManager::get_connected_websites(Promise<tl_object_ptr<td_api::connectedWebsites>> &&promise) const {
|
||||||
td_->create_handler<GetWebAuthorizationsQuery>(std::move(promise))->send();
|
td_->create_handler<GetWebAuthorizationsQuery>(std::move(promise))->send();
|
||||||
}
|
}
|
||||||
|
@ -273,18 +273,6 @@ class ContactsManager final : public Actor {
|
|||||||
static td_api::object_ptr<td_api::CheckChatUsernameResult> get_check_chat_username_result_object(
|
static td_api::object_ptr<td_api::CheckChatUsernameResult> get_check_chat_username_result_object(
|
||||||
CheckDialogUsernameResult result);
|
CheckDialogUsernameResult result);
|
||||||
|
|
||||||
void set_account_ttl(int32 account_ttl, Promise<Unit> &&promise) const;
|
|
||||||
void get_account_ttl(Promise<int32> &&promise) const;
|
|
||||||
|
|
||||||
static td_api::object_ptr<td_api::session> convert_authorization_object(
|
|
||||||
tl_object_ptr<telegram_api::authorization> &&authorization);
|
|
||||||
|
|
||||||
void confirm_qr_code_authentication(const string &link, Promise<td_api::object_ptr<td_api::session>> &&promise);
|
|
||||||
|
|
||||||
void get_active_sessions(Promise<tl_object_ptr<td_api::sessions>> &&promise) const;
|
|
||||||
void terminate_session(int64 session_id, Promise<Unit> &&promise) const;
|
|
||||||
void terminate_all_other_sessions(Promise<Unit> &&promise) const;
|
|
||||||
|
|
||||||
void get_connected_websites(Promise<tl_object_ptr<td_api::connectedWebsites>> &&promise) const;
|
void get_connected_websites(Promise<tl_object_ptr<td_api::connectedWebsites>> &&promise) const;
|
||||||
void disconnect_website(int64 website_id, Promise<Unit> &&promise) const;
|
void disconnect_website(int64 website_id, Promise<Unit> &&promise) const;
|
||||||
void disconnect_all_websites(Promise<Unit> &&promise) const;
|
void disconnect_all_websites(Promise<Unit> &&promise) const;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
//
|
//
|
||||||
#include "td/telegram/Td.h"
|
#include "td/telegram/Td.h"
|
||||||
|
|
||||||
|
#include "td/telegram/Account.h"
|
||||||
#include "td/telegram/AnimationsManager.h"
|
#include "td/telegram/AnimationsManager.h"
|
||||||
#include "td/telegram/AudiosManager.h"
|
#include "td/telegram/AudiosManager.h"
|
||||||
#include "td/telegram/AuthManager.h"
|
#include "td/telegram/AuthManager.h"
|
||||||
@ -4538,7 +4539,7 @@ void Td::on_request(uint64 id, td_api::checkAuthenticationBotToken &request) {
|
|||||||
void Td::on_request(uint64 id, td_api::confirmQrCodeAuthentication &request) {
|
void Td::on_request(uint64 id, td_api::confirmQrCodeAuthentication &request) {
|
||||||
CLEAN_INPUT_STRING(request.link_);
|
CLEAN_INPUT_STRING(request.link_);
|
||||||
CREATE_REQUEST_PROMISE();
|
CREATE_REQUEST_PROMISE();
|
||||||
contacts_manager_->confirm_qr_code_authentication(request.link_, std::move(promise));
|
confirm_qr_code_authentication(this, request.link_, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, const td_api::getCurrentState &request) {
|
void Td::on_request(uint64 id, const td_api::getCurrentState &request) {
|
||||||
@ -4733,7 +4734,7 @@ void Td::on_request(uint64 id, const td_api::getAccountTtl &request) {
|
|||||||
promise.set_value(td_api::make_object<td_api::accountTtl>(result.ok()));
|
promise.set_value(td_api::make_object<td_api::accountTtl>(result.ok()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
contacts_manager_->get_account_ttl(std::move(query_promise));
|
get_account_ttl(this, std::move(query_promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, const td_api::setAccountTtl &request) {
|
void Td::on_request(uint64 id, const td_api::setAccountTtl &request) {
|
||||||
@ -4742,7 +4743,7 @@ void Td::on_request(uint64 id, const td_api::setAccountTtl &request) {
|
|||||||
return send_error_raw(id, 400, "New account TTL must be non-empty");
|
return send_error_raw(id, 400, "New account TTL must be non-empty");
|
||||||
}
|
}
|
||||||
CREATE_OK_REQUEST_PROMISE();
|
CREATE_OK_REQUEST_PROMISE();
|
||||||
contacts_manager_->set_account_ttl(request.ttl_->days_, std::move(promise));
|
set_account_ttl(this, request.ttl_->days_, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, td_api::deleteAccount &request) {
|
void Td::on_request(uint64 id, td_api::deleteAccount &request) {
|
||||||
@ -4772,19 +4773,19 @@ void Td::on_request(uint64 id, td_api::resendChangePhoneNumberCode &request) {
|
|||||||
void Td::on_request(uint64 id, const td_api::getActiveSessions &request) {
|
void Td::on_request(uint64 id, const td_api::getActiveSessions &request) {
|
||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
CREATE_REQUEST_PROMISE();
|
CREATE_REQUEST_PROMISE();
|
||||||
contacts_manager_->get_active_sessions(std::move(promise));
|
get_active_sessions(this, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, const td_api::terminateSession &request) {
|
void Td::on_request(uint64 id, const td_api::terminateSession &request) {
|
||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
CREATE_OK_REQUEST_PROMISE();
|
CREATE_OK_REQUEST_PROMISE();
|
||||||
contacts_manager_->terminate_session(request.session_id_, std::move(promise));
|
terminate_session(this, request.session_id_, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, const td_api::terminateAllOtherSessions &request) {
|
void Td::on_request(uint64 id, const td_api::terminateAllOtherSessions &request) {
|
||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
CREATE_OK_REQUEST_PROMISE();
|
CREATE_OK_REQUEST_PROMISE();
|
||||||
contacts_manager_->terminate_all_other_sessions(std::move(promise));
|
terminate_all_other_sessions(this, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, const td_api::getConnectedWebsites &request) {
|
void Td::on_request(uint64 id, const td_api::getConnectedWebsites &request) {
|
||||||
|
Loading…
Reference in New Issue
Block a user