Remove usage of the default account.passwordInputSettings constructor.

This commit is contained in:
levlam 2021-07-31 09:06:43 +03:00
parent cbb496675d
commit efa770ce73

View File

@ -635,13 +635,16 @@ Result<PasswordManager::PasswordInputSettings> PasswordManager::get_password_inp
Result<PasswordManager::PasswordInputSettings> PasswordManager::get_password_input_settings( Result<PasswordManager::PasswordInputSettings> PasswordManager::get_password_input_settings(
const UpdateSettings &update_settings, bool has_password, const NewPasswordState &state, const UpdateSettings &update_settings, bool has_password, const NewPasswordState &state,
const PasswordPrivateState *private_state) { const PasswordPrivateState *private_state) {
auto settings = make_tl_object<telegram_api::account_passwordInputSettings>();
bool have_secret = private_state != nullptr && private_state->secret; bool have_secret = private_state != nullptr && private_state->secret;
auto update_secure_secret = update_settings.update_secure_secret; auto update_secure_secret = update_settings.update_secure_secret;
int32 flags = 0;
BufferSlice new_password_hash;
tl_object_ptr<telegram_api::PasswordKdfAlgo> new_algo;
string new_hint;
if (update_settings.update_password) { if (update_settings.update_password) {
settings->flags_ |= telegram_api::account_passwordInputSettings::NEW_PASSWORD_HASH_MASK; flags |= telegram_api::account_passwordInputSettings::NEW_PASSWORD_HASH_MASK;
settings->flags_ |= telegram_api::account_passwordInputSettings::NEW_ALGO_MASK; flags |= telegram_api::account_passwordInputSettings::NEW_ALGO_MASK;
settings->flags_ |= telegram_api::account_passwordInputSettings::HINT_MASK; flags |= telegram_api::account_passwordInputSettings::HINT_MASK;
if (!update_settings.new_password.empty()) { if (!update_settings.new_password.empty()) {
auto new_client_salt = create_salt(state.client_salt); auto new_client_salt = create_salt(state.client_salt);
@ -650,16 +653,15 @@ Result<PasswordManager::PasswordInputSettings> PasswordManager::get_password_inp
if (new_hash.is_error()) { if (new_hash.is_error()) {
return Status::Error(400, "Unable to change password, because it may be unsafe"); return Status::Error(400, "Unable to change password, because it may be unsafe");
} }
settings->new_password_hash_ = new_hash.move_as_ok(); new_password_hash = new_hash.move_as_ok();
settings->new_algo_ = new_algo = make_tl_object<telegram_api::passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow>(
make_tl_object<telegram_api::passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow>( std::move(new_client_salt), BufferSlice(state.server_salt), state.srp_g, BufferSlice(state.srp_p));
std::move(new_client_salt), BufferSlice(state.server_salt), state.srp_g, BufferSlice(state.srp_p)); new_hint = std::move(update_settings.new_hint);
settings->hint_ = std::move(update_settings.new_hint);
if (have_secret) { if (have_secret) {
update_secure_secret = true; update_secure_secret = true;
} }
} else { } else {
settings->new_algo_ = make_tl_object<telegram_api::passwordKdfAlgoUnknown>(); new_algo = make_tl_object<telegram_api::passwordKdfAlgoUnknown>();
} }
} }
@ -673,6 +675,7 @@ Result<PasswordManager::PasswordInputSettings> PasswordManager::get_password_inp
update_secure_secret = false; update_secure_secret = false;
} }
tl_object_ptr<telegram_api::secureSecretSettings> new_secure_settings;
if (update_secure_secret) { if (update_secure_secret) {
auto secret = have_secret ? std::move(private_state->secret.value()) : secure_storage::Secret::create_new(); auto secret = have_secret ? std::move(private_state->secret.value()) : secure_storage::Secret::create_new();
auto algorithm = auto algorithm =
@ -681,15 +684,16 @@ Result<PasswordManager::PasswordInputSettings> PasswordManager::get_password_inp
update_settings.update_password ? update_settings.new_password : update_settings.current_password, update_settings.update_password ? update_settings.new_password : update_settings.current_password,
algorithm->salt_.as_slice(), secure_storage::EnryptionAlgorithm::Pbkdf2); algorithm->salt_.as_slice(), secure_storage::EnryptionAlgorithm::Pbkdf2);
settings->flags_ |= telegram_api::account_passwordInputSettings::NEW_SECURE_SETTINGS_MASK; flags |= telegram_api::account_passwordInputSettings::NEW_SECURE_SETTINGS_MASK;
settings->new_secure_settings_ = make_tl_object<telegram_api::secureSecretSettings>( new_secure_settings = make_tl_object<telegram_api::secureSecretSettings>(
std::move(algorithm), BufferSlice(encrypted_secret.as_slice()), secret.get_hash()); std::move(algorithm), BufferSlice(encrypted_secret.as_slice()), secret.get_hash());
} }
if (update_settings.update_recovery_email_address) { if (update_settings.update_recovery_email_address) {
settings->flags_ |= telegram_api::account_passwordInputSettings::EMAIL_MASK; flags |= telegram_api::account_passwordInputSettings::EMAIL_MASK;
settings->email_ = std::move(update_settings.recovery_email_address);
} }
return std::move(settings); return make_tl_object<telegram_api::account_passwordInputSettings>(
flags, std::move(new_algo), std::move(new_password_hash), new_hint, update_settings.recovery_email_address,
std::move(new_secure_settings));
} }
void PasswordManager::do_update_password_settings_impl(UpdateSettings update_settings, PasswordState state, void PasswordManager::do_update_password_settings_impl(UpdateSettings update_settings, PasswordState state,