Completed ability to recover cloud password with email.

This commit is contained in:
23rd 2021-08-17 13:52:21 +03:00 committed by John Preston
parent c3595f2e31
commit 76813db3ad
4 changed files with 44 additions and 13 deletions

View File

@ -877,8 +877,12 @@ void PasscodeBox::setNewCloudPassword(const QString &newPassword) {
MTP_string(_cloudFields.fromRecoveryCode), MTP_string(_cloudFields.fromRecoveryCode),
settings settings
)).done([=](const MTPauth_Authorization &result) { )).done([=](const MTPauth_Authorization &result) {
recoverPasswordDone(newPasswordBytes, result);
}).fail([=](const MTP::Error &error) { }).fail([=](const MTP::Error &error) {
if (MTP::IsFloodError(error)) {
_newError = tr::lng_flood_error(tr::now);
update();
}
setPasswordFail(newPasswordBytes, email, error); setPasswordFail(newPasswordBytes, email, error);
}).handleFloodErrors().send(); }).handleFloodErrors().send();
} }
@ -1239,13 +1243,27 @@ void RecoverBox::submit() {
} }
const auto send = crl::guard(this, [=] { const auto send = crl::guard(this, [=] {
_submitRequest = _api.request(MTPauth_CheckRecoveryPassword( if (_cloudFields.turningOff) {
MTP_string(code) // From "Disable cloud password".
)).done([=](const MTPBool &result) { _submitRequest = _api.request(MTPauth_RecoverPassword(
checkSubmitDone(code, result); MTP_flags(0),
}).fail([=](const MTP::Error &error) { MTP_string(code),
checkSubmitFail(error); MTPaccount_PasswordInputSettings()
}).handleFloodErrors().send(); )).done([=](const MTPauth_Authorization &result) {
proceedToClear();
}).fail([=](const MTP::Error &error) {
checkSubmitFail(error);
}).handleFloodErrors().send();
} else {
// From "Change cloud password".
_submitRequest = _api.request(MTPauth_CheckRecoveryPassword(
MTP_string(code)
)).done([=](const MTPBool &result) {
proceedToChange(code);
}).fail([=](const MTP::Error &error) {
checkSubmitFail(error);
}).handleFloodErrors().send();
}
}); });
if (_cloudFields.notEmptyPassport) { if (_cloudFields.notEmptyPassport) {
const auto confirmed = [=](Fn<void()> &&close) { const auto confirmed = [=](Fn<void()> &&close) {
@ -1273,7 +1291,16 @@ void RecoverBox::codeChanged() {
setError(QString()); setError(QString());
} }
void RecoverBox::checkSubmitDone(const QString &code, const MTPBool &result) { void RecoverBox::proceedToClear() {
_submitRequest = 0;
_newPasswordSet.fire({});
getDelegate()->show(
Box<InformBox>(tr::lng_cloud_password_removed(tr::now)),
Ui::LayerOption::CloseOther);
}
void RecoverBox::proceedToChange(const QString &code) {
Expects(!_cloudFields.turningOff);
_submitRequest = 0; _submitRequest = 0;
auto fields = _cloudFields; auto fields = _cloudFields;
@ -1281,7 +1308,6 @@ void RecoverBox::checkSubmitDone(const QString &code, const MTPBool &result) {
fields.hasRecovery = false; fields.hasRecovery = false;
// we could've been turning off, no need to force new password then // we could've been turning off, no need to force new password then
// like if (_cloudFields.turningOff) { just RecoverPassword else Check } // like if (_cloudFields.turningOff) { just RecoverPassword else Check }
fields.turningOff = ???
fields.curRequest = {}; fields.curRequest = {};
auto box = Box<PasscodeBox>(_session, fields); auto box = Box<PasscodeBox>(_session, fields);

View File

@ -210,7 +210,8 @@ protected:
private: private:
void submit(); void submit();
void codeChanged(); void codeChanged();
void checkSubmitDone(const QString &code, const MTPBool &result); void proceedToClear();
void proceedToChange(const QString &code);
void checkSubmitFail(const MTP::Error &error); void checkSubmitFail(const MTP::Error &error);
void setError(const QString &error); void setError(const QString &error);

View File

@ -228,13 +228,17 @@ void PasswordCheckWidget::codeSubmitDone(
fields.hasRecovery = false; fields.hasRecovery = false;
fields.curRequest = {}; fields.curRequest = {};
auto box = Box<PasscodeBox>(&api().instance(), nullptr, fields); auto box = Box<PasscodeBox>(&api().instance(), nullptr, fields);
const auto boxShared = std::make_shared<QPointer<PasscodeBox>>();
box->newAuthorization( box->newAuthorization(
) | rpl::start_with_next([=](const MTPauth_Authorization &result) { ) | rpl::start_with_next([=](const MTPauth_Authorization &result) {
if (boxShared) {
(*boxShared)->closeBox();
}
pwdSubmitDone(true, result); pwdSubmitDone(true, result);
}, lifetime()); }, lifetime());
Ui::show(std::move(box)); *boxShared = Ui::show(std::move(box));
} }
void PasswordCheckWidget::codeSubmitFail(const MTP::Error &error) { void PasswordCheckWidget::codeSubmitFail(const MTP::Error &error) {

View File

@ -2086,7 +2086,7 @@ void MainWidget::hideAll() {
void MainWidget::showAll() { void MainWidget::showAll() {
if (cPasswordRecovered()) { if (cPasswordRecovered()) {
cSetPasswordRecovered(false); cSetPasswordRecovered(false);
Ui::show(Box<InformBox>(tr::lng_signin_password_removed(tr::now))); Ui::show(Box<InformBox>(tr::lng_cloud_password_updated(tr::now)));
} }
if (isOneColumn()) { if (isOneColumn()) {
_sideShadow->hide(); _sideShadow->hide();