diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index d1607adc..4d87c6a9 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -930,19 +930,23 @@ encryptedCredentials data:bytes hash:bytes secret:bytes = EncryptedCredentials; encryptedPassportData type:PassportDataType data:bytes files:vector value:string selfie:file = EncryptedPassportData; -//@class PassportDataError @description Contains description of an error in a Telegram Passport data; for bots only +//@class InputPassportDataErrorSource @description Contains description of an error in a Telegram Passport data; for bots only -//@description A field of data contains an error. The error is considered resolved when the field's value changes @type Telegram Passport data type @field_name Field name @data_hash Current data hash @message Error message -passportDataErrorDataField type:PassportDataType field_name:string data_hash:bytes message:string = PassportDataError; +//@description A field of data contains an error. The error is considered resolved when the field's value changes @field_name Field name @data_hash Current data hash +inputPassportDataErrorSourceDataField field_name:string data_hash:bytes = InputPassportDataErrorSource; -//@description A file contains an error. The error is considered resolved when the file changes @type Telegram Passport data type @file_hash Hash of the file with an error @message Error message -passportDataErrorFile type:PassportDataType file_hash:bytes message:string = PassportDataError; +//@description A file contains an error. The error is considered resolved when the file changes @file_hash Hash of the file with an error +inputPassportDataErrorSourceFile file_hash:bytes = InputPassportDataErrorSource; -//@description A list of attached files contains an error. The error is considered resolved when the file list changes @type Telegram Passport data type @file_hashes Hashes of all files @message Error message -passportDataErrorFiles type:PassportDataType file_hashes:vector message:string = PassportDataError; +//@description A list of attached files contains an error. The error is considered resolved when the file list changes @type Telegram Passport data type @file_hashes Hashes of all files +inputPassportDataErrorSourceFiles file_hashes:vector = InputPassportDataErrorSource; -//@description A selfie contains an error. The error is considered resolved when the file with the selfie changes @type Telegram Passport data type @file_hash Current file with the selfie hash @message Error message -passportDataErrorSelfie type:PassportDataType file_hash:bytes message:string = PassportDataError; +//@description A selfie contains an error. The error is considered resolved when the file with the selfie changes @file_hash Current file with the selfie hash +inputPassportDataErrorSourceSelfie file_hash:bytes = InputPassportDataErrorSource; + + +//@description Contains description of an error in a Telegram Passport data; for bots only @type Telegram Passport data type with the error @message Error message @source Error source +inputPassportDataError type:PassportDataType message:string source:InputPassportDataErrorSource = InputPassportDataError; //@class MessageContent @description Contains the content of a message @@ -1063,7 +1067,7 @@ messageWebsiteConnected domain_name:string = MessageContent; //@description Telegram Passport data has been sent @types List of types of sent data messagePassportDataSent types:vector = MessageContent; -//@description Telegram Passport data has been received; for bots only @data List of received Telegram Passport data @credentials Encrypted Secure storage data credentials +//@description Telegram Passport data has been received; for bots only @data List of received Telegram Passport data @credentials Encrypted data credentials messagePassportDataReceived data:vector credentials:encryptedCredentials = MessageContent; //@description Message content that is not supported by the client @@ -2996,7 +3000,7 @@ setPassportData data:InputPassportData password:string = PassportData; deletePassportData type:PassportDataType = Ok; //@description Informs a user that some Telegram Passport data contains errors; for bots only. The user will not be able to resend data, until the errors are fixed @user_id User identifier @errors The errors -setPassportDataErrors user_id:int32 errors:vector = Ok; +setPassportDataErrors user_id:int32 errors:vector = Ok; //@description Sends phone number verification code for Telegram Passport diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index 820b763c..6141d2b9 100644 Binary files a/td/generate/scheme/td_api.tlo and b/td/generate/scheme/td_api.tlo differ diff --git a/td/telegram/SecureManager.cpp b/td/telegram/SecureManager.cpp index 8b116e6a..7e19ea53 100644 --- a/td/telegram/SecureManager.cpp +++ b/td/telegram/SecureManager.cpp @@ -514,77 +514,57 @@ void SecureManager::delete_secure_value(SecureValueType type, Promise prom } void SecureManager::set_secure_value_errors(Td *td, tl_object_ptr input_user, - vector> errors, + vector> errors, Promise promise) { CHECK(td != nullptr); CHECK(input_user != nullptr); vector> input_errors; - for (auto &error_ptr : errors) { - if (error_ptr == nullptr) { + for (auto &error : errors) { + if (error == nullptr) { return promise.set_error(Status::Error(400, "Error must be non-empty")); } - switch (error_ptr->get_id()) { - case td_api::passportDataErrorDataField::ID: { - auto error = td_api::move_object_as(error_ptr); - if (error->type_ == nullptr) { - return promise.set_error(Status::Error(400, "Type must be non-empty")); - } - if (!clean_input_string(error->message_)) { - return promise.set_error(Status::Error(400, "Error message must be encoded in UTF-8")); - } - if (!clean_input_string(error->field_name_)) { + if (error->type_ == nullptr) { + return promise.set_error(Status::Error(400, "Type must be non-empty")); + } + if (!clean_input_string(error->message_)) { + return promise.set_error(Status::Error(400, "Error message must be encoded in UTF-8")); + } + if (error->source_ == nullptr) { + return promise.set_error(Status::Error(400, "Error source must be non-empty")); + } + + auto type = get_secure_value_type_object(get_secure_value_type_td_api(error->type_)); + switch (error->source_->get_id()) { + case td_api::inputPassportDataErrorSourceDataField::ID: { + auto source = td_api::move_object_as(error->source_); + if (!clean_input_string(source->field_name_)) { return promise.set_error(Status::Error(400, "Field name must be encoded in UTF-8")); } - auto type = get_secure_value_type_object(get_secure_value_type_td_api(error->type_)); input_errors.push_back(make_tl_object( - std::move(type), BufferSlice(error->data_hash_), error->field_name_, error->message_)); + std::move(type), BufferSlice(source->data_hash_), source->field_name_, error->message_)); break; } - case td_api::passportDataErrorFile::ID: { - auto error = td_api::move_object_as(error_ptr); - if (error->type_ == nullptr) { - return promise.set_error(Status::Error(400, "Type must be non-empty")); - } - if (!clean_input_string(error->message_)) { - return promise.set_error(Status::Error(400, "Error message must be encoded in UTF-8")); - } - - auto type = get_secure_value_type_object(get_secure_value_type_td_api(error->type_)); + case td_api::inputPassportDataErrorSourceFile::ID: { + auto source = td_api::move_object_as(error->source_); input_errors.push_back(make_tl_object( - std::move(type), BufferSlice(error->file_hash_), error->message_)); + std::move(type), BufferSlice(source->file_hash_), error->message_)); break; } - case td_api::passportDataErrorFiles::ID: { - auto error = td_api::move_object_as(error_ptr); - if (error->type_ == nullptr) { - return promise.set_error(Status::Error(400, "Type must be non-empty")); - } - if (!clean_input_string(error->message_)) { - return promise.set_error(Status::Error(400, "Error message must be encoded in UTF-8")); - } - if (error->file_hashes_.empty()) { + case td_api::inputPassportDataErrorSourceFiles::ID: { + auto source = td_api::move_object_as(error->source_); + if (source->file_hashes_.empty()) { return promise.set_error(Status::Error(400, "Error hashes must be non-empty")); } - - auto type = get_secure_value_type_object(get_secure_value_type_td_api(error->type_)); - auto file_hashes = transform(error->file_hashes_, [](Slice hash) { return BufferSlice(hash); }); + auto file_hashes = transform(source->file_hashes_, [](Slice hash) { return BufferSlice(hash); }); input_errors.push_back(make_tl_object( std::move(type), std::move(file_hashes), error->message_)); break; } - case td_api::passportDataErrorSelfie::ID: { - auto error = td_api::move_object_as(error_ptr); - if (error->type_ == nullptr) { - return promise.set_error(Status::Error(400, "Type must be non-empty")); - } - if (!clean_input_string(error->message_)) { - return promise.set_error(Status::Error(400, "Error message must be encoded in UTF-8")); - } - - auto type = get_secure_value_type_object(get_secure_value_type_td_api(error->type_)); + case td_api::inputPassportDataErrorSourceSelfie::ID: { + auto source = td_api::move_object_as(error->source_); input_errors.push_back(make_tl_object( - std::move(type), BufferSlice(error->file_hash_), error->message_)); + std::move(type), BufferSlice(source->file_hash_), error->message_)); break; } default: diff --git a/td/telegram/SecureManager.h b/td/telegram/SecureManager.h index b40dcc7a..4d4b331a 100644 --- a/td/telegram/SecureManager.h +++ b/td/telegram/SecureManager.h @@ -131,7 +131,7 @@ class SecureManager : public NetQueryCallback { void set_secure_value(string password, SecureValue secure_value, Promise promise); void delete_secure_value(SecureValueType type, Promise promise); void set_secure_value_errors(Td *td, tl_object_ptr input_user, - vector> errors, Promise promise); + vector> errors, Promise promise); void get_passport_authorization_form(string password, UserId bot_user_id, string scope, string public_key, string payload, Promise promise);