Add td_api::setApplicationVerificationToken.
This commit is contained in:
parent
fcf8f012b4
commit
76ece1b6e0
@ -9358,6 +9358,13 @@ removeAllFilesFromDownloads only_active:Bool only_completed:Bool delete_from_cac
|
|||||||
searchFileDownloads query:string only_active:Bool only_completed:Bool offset:string limit:int32 = FoundFileDownloads;
|
searchFileDownloads query:string only_active:Bool only_completed:Bool offset:string limit:int32 = FoundFileDownloads;
|
||||||
|
|
||||||
|
|
||||||
|
//@description Application verification has been completed. Can be called before authorization
|
||||||
|
//@verification_id Unique identifier for the verification process as received from updateApplicationVerificationRequired
|
||||||
|
//@token Play Integrity API token for the Android application, or secret from push notification for the iOS application;
|
||||||
|
//-pass an empty string to abort verification and receive error VERIFICATION_FAILED for the request
|
||||||
|
setApplicationVerificationToken verification_id:int53 token:string = Ok;
|
||||||
|
|
||||||
|
|
||||||
//@description Returns information about a file with messages exported from another application @message_file_head Beginning of the message file; up to 100 first lines
|
//@description Returns information about a file with messages exported from another application @message_file_head Beginning of the message file; up to 100 first lines
|
||||||
getMessageFileType message_file_head:string = MessageFileType;
|
getMessageFileType message_file_head:string = MessageFileType;
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@ test.useConfigSimple = help.ConfigSimple;
|
|||||||
test.parseInputAppEvent = InputAppEvent;
|
test.parseInputAppEvent = InputAppEvent;
|
||||||
|
|
||||||
invokeWithBusinessConnectionPrefix#dd289f8e connection_id:string = Error;
|
invokeWithBusinessConnectionPrefix#dd289f8e connection_id:string = Error;
|
||||||
|
invokeWithGooglePlayIntegrityPrefix#1df92984 nonce:string token:string = Error;
|
||||||
|
invokeWithApnsSecretPrefix#0dae54f8 nonce:string secret:string = Error;
|
||||||
|
|
||||||
---types---
|
---types---
|
||||||
|
|
||||||
|
@ -2768,6 +2768,7 @@ bool Td::is_preauthentication_request(int32 id) {
|
|||||||
case td_api::getNetworkStatistics::ID:
|
case td_api::getNetworkStatistics::ID:
|
||||||
case td_api::addNetworkStatistics::ID:
|
case td_api::addNetworkStatistics::ID:
|
||||||
case td_api::resetNetworkStatistics::ID:
|
case td_api::resetNetworkStatistics::ID:
|
||||||
|
case td_api::setApplicationVerificationToken::ID:
|
||||||
case td_api::getCountries::ID:
|
case td_api::getCountries::ID:
|
||||||
case td_api::getCountryCode::ID:
|
case td_api::getCountryCode::ID:
|
||||||
case td_api::getPhoneNumberInfo::ID:
|
case td_api::getPhoneNumberInfo::ID:
|
||||||
@ -7499,6 +7500,14 @@ void Td::on_request(uint64 id, td_api::searchFileDownloads &request) {
|
|||||||
request.only_completed_, std::move(request.offset_), request.limit_, std::move(promise));
|
request.only_completed_, std::move(request.offset_), request.limit_, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Td::on_request(uint64 id, td_api::setApplicationVerificationToken &request) {
|
||||||
|
CHECK_IS_USER();
|
||||||
|
CLEAN_INPUT_STRING(request.token_);
|
||||||
|
CREATE_OK_REQUEST_PROMISE();
|
||||||
|
G()->net_query_dispatcher().set_verification_token(request.verification_id_, std::move(request.token_),
|
||||||
|
std::move(promise));
|
||||||
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, td_api::getMessageFileType &request) {
|
void Td::on_request(uint64 id, td_api::getMessageFileType &request) {
|
||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
CLEAN_INPUT_STRING(request.message_file_head_);
|
CLEAN_INPUT_STRING(request.message_file_head_);
|
||||||
|
@ -1325,6 +1325,8 @@ class Td final : public Actor {
|
|||||||
|
|
||||||
void on_request(uint64 id, td_api::searchFileDownloads &request);
|
void on_request(uint64 id, td_api::searchFileDownloads &request);
|
||||||
|
|
||||||
|
void on_request(uint64 id, td_api::setApplicationVerificationToken &request);
|
||||||
|
|
||||||
void on_request(uint64 id, td_api::getMessageFileType &request);
|
void on_request(uint64 id, td_api::getMessageFileType &request);
|
||||||
|
|
||||||
void on_request(uint64 id, const td_api::getMessageImportConfirmationText &request);
|
void on_request(uint64 id, const td_api::getMessageImportConfirmationText &request);
|
||||||
|
@ -4923,6 +4923,11 @@ class CliClient final : public Actor {
|
|||||||
chat_id, message_thread_id_, get_input_message_reply_to(), default_message_send_options(),
|
chat_id, message_thread_id_, get_input_message_reply_to(), default_message_send_options(),
|
||||||
std::move(input_message_contents)));
|
std::move(input_message_contents)));
|
||||||
}
|
}
|
||||||
|
} else if (op == "savt") {
|
||||||
|
int64 verification_id;
|
||||||
|
string token;
|
||||||
|
get_args(args, verification_id, token);
|
||||||
|
send_request(td_api::make_object<td_api::setApplicationVerificationToken>(verification_id, token));
|
||||||
} else if (op == "gmft") {
|
} else if (op == "gmft") {
|
||||||
auto r_message_file_head = read_file_str(args, 2 << 10);
|
auto r_message_file_head = read_file_str(args, 2 << 10);
|
||||||
if (r_message_file_head.is_error()) {
|
if (r_message_file_head.is_error()) {
|
||||||
|
@ -410,4 +410,12 @@ void NetQueryDispatcher::check_authorization_is_ok() {
|
|||||||
send_closure(dc_auth_manager_, &DcAuthManager::check_authorization_is_ok);
|
send_closure(dc_auth_manager_, &DcAuthManager::check_authorization_is_ok);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetQueryDispatcher::set_verification_token(int64 verification_id, string &&token, Promise<Unit> &&promise) {
|
||||||
|
if (verifier_.empty()) {
|
||||||
|
return promise.set_error(Status::Error(400, "Application verification not allowed"));
|
||||||
|
}
|
||||||
|
send_closure_later(verifier_, &NetQueryVerifier::set_verification_token, verification_id, std::move(token),
|
||||||
|
std::move(promise));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -57,6 +57,8 @@ class NetQueryDispatcher {
|
|||||||
void set_main_dc_id(int32 new_main_dc_id);
|
void set_main_dc_id(int32 new_main_dc_id);
|
||||||
void check_authorization_is_ok();
|
void check_authorization_is_ok();
|
||||||
|
|
||||||
|
void set_verification_token(int64 verification_id, string &&token, Promise<Unit> &&promise);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::atomic<bool> stop_flag_{false};
|
std::atomic<bool> stop_flag_{false};
|
||||||
bool need_destroy_auth_key_{false};
|
bool need_destroy_auth_key_{false};
|
||||||
|
@ -11,6 +11,9 @@
|
|||||||
#include "td/telegram/Td.h"
|
#include "td/telegram/Td.h"
|
||||||
|
|
||||||
#include "td/utils/common.h"
|
#include "td/utils/common.h"
|
||||||
|
#include "td/utils/Slice.h"
|
||||||
|
#include "td/utils/Storer.h"
|
||||||
|
#include "td/utils/utf8.h"
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
@ -18,6 +21,12 @@ void NetQueryVerifier::verify(NetQueryPtr query, string nonce) {
|
|||||||
CHECK(query->is_ready());
|
CHECK(query->is_ready());
|
||||||
CHECK(query->is_error());
|
CHECK(query->is_error());
|
||||||
|
|
||||||
|
if (!check_utf8(nonce)) {
|
||||||
|
query->set_error(Status::Error(400, "Invalid verification nonce"));
|
||||||
|
G()->net_query_dispatcher().dispatch(std::move(query));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto query_id = next_query_id_++;
|
auto query_id = next_query_id_++;
|
||||||
queries_.emplace(query_id, std::make_pair(std::move(query), nonce));
|
queries_.emplace(query_id, std::make_pair(std::move(query), nonce));
|
||||||
|
|
||||||
@ -25,6 +34,34 @@ void NetQueryVerifier::verify(NetQueryPtr query, string nonce) {
|
|||||||
td_api::make_object<td_api::updateApplicationVerificationRequired>(query_id, nonce));
|
td_api::make_object<td_api::updateApplicationVerificationRequired>(query_id, nonce));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetQueryVerifier::set_verification_token(int64 query_id, string &&token, Promise<Unit> &&promise) {
|
||||||
|
auto it = queries_.find(query_id);
|
||||||
|
if (it == queries_.end()) {
|
||||||
|
return promise.set_error(Status::Error(400, "Verification not found"));
|
||||||
|
}
|
||||||
|
auto query = std::move(it->second.first);
|
||||||
|
auto nonce = std::move(it->second.second);
|
||||||
|
queries_.erase(it);
|
||||||
|
promise.set_value(Unit());
|
||||||
|
|
||||||
|
if (token.empty()) {
|
||||||
|
query->set_error(Status::Error(400, "VERIFICATION_FAILED"));
|
||||||
|
} else {
|
||||||
|
#if TD_ANDROID
|
||||||
|
telegram_api::invokeWithGooglePlayIntegrityPrefix prefix(nonce, token);
|
||||||
|
#else
|
||||||
|
telegram_api::invokeWithApnsSecretPrefix prefix(nonce, token);
|
||||||
|
#endif
|
||||||
|
auto storer = DefaultStorer<telegram_api::Function>(prefix);
|
||||||
|
string prefix_str(storer.size(), '\0');
|
||||||
|
auto real_size = storer.store(MutableSlice(prefix_str).ubegin());
|
||||||
|
CHECK(real_size == prefix_str.size());
|
||||||
|
query->add_verification_prefix(prefix_str);
|
||||||
|
}
|
||||||
|
query->resend();
|
||||||
|
G()->net_query_dispatcher().dispatch(std::move(query));
|
||||||
|
}
|
||||||
|
|
||||||
void NetQueryVerifier::tear_down() {
|
void NetQueryVerifier::tear_down() {
|
||||||
for (auto &it : queries_) {
|
for (auto &it : queries_) {
|
||||||
it.second.first->set_error(Global::request_aborted_error());
|
it.second.first->set_error(Global::request_aborted_error());
|
||||||
|
@ -21,8 +21,11 @@ class NetQueryVerifier final : public Actor {
|
|||||||
public:
|
public:
|
||||||
explicit NetQueryVerifier(ActorShared<> parent) : parent_(std::move(parent)) {
|
explicit NetQueryVerifier(ActorShared<> parent) : parent_(std::move(parent)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void verify(NetQueryPtr query, string nonce);
|
void verify(NetQueryPtr query, string nonce);
|
||||||
|
|
||||||
|
void set_verification_token(int64 query_id, string &&token, Promise<Unit> &&promise);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void tear_down() final;
|
void tear_down() final;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user