mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-18 23:27:09 +02:00
Added ability to validate expired cloud password in management section.
This commit is contained in:
parent
f3efa85206
commit
e364b80d0a
7 changed files with 69 additions and 12 deletions
|
@ -730,6 +730,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"lng_cloud_password_reset_cancel_title" = "Cancel reset";
|
||||
"lng_cloud_password_reset_cancel_sure" = "Cancel the password reset process? If you request a new reset later, it will take another 7 days.";
|
||||
"lng_cloud_password_reset_later" = "You recently requested a password reset that was cancelled. Please wait {duration} before making a new request.";
|
||||
"lng_cloud_password_expired" = "Please re-enter your password.";
|
||||
|
||||
"lng_connection_auto_connecting" = "Default (connecting...)";
|
||||
"lng_connection_auto" = "Default ({transport} used)";
|
||||
|
|
|
@ -11,7 +11,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "lang/lang_keys.h"
|
||||
#include "lottie/lottie_icon.h"
|
||||
#include "main/main_session.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_common.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_email.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_email_confirm.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_hint.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_input.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_manage.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_start.h"
|
||||
#include "settings/settings_common.h"
|
||||
#include "ui/boxes/confirm_box.h"
|
||||
#include "ui/widgets/buttons.h"
|
||||
#include "ui/widgets/input_fields.h"
|
||||
#include "ui/widgets/labels.h"
|
||||
|
@ -250,6 +258,10 @@ Api::CloudPassword &AbstractStep::cloudPassword() {
|
|||
return _controller->session().api().cloudPassword();
|
||||
}
|
||||
|
||||
rpl::producer<AbstractStep::Types> AbstractStep::removeTypes() {
|
||||
return rpl::never<Types>();
|
||||
}
|
||||
|
||||
void AbstractStep::showBack() {
|
||||
_showBack.fire({});
|
||||
}
|
||||
|
@ -276,6 +288,30 @@ void AbstractStep::setInnerFocus() {
|
|||
}
|
||||
}
|
||||
|
||||
bool AbstractStep::isPasswordInvalidError(const QString &type) {
|
||||
if (type == u"PASSWORD_HASH_INVALID"_q
|
||||
|| type == u"SRP_PASSWORD_CHANGED"_q) {
|
||||
|
||||
// Most likely the cloud password has been changed on another device.
|
||||
// Quit.
|
||||
_quits.fire(AbstractStep::Types{
|
||||
CloudPasswordStartId(),
|
||||
CloudPasswordInputId(),
|
||||
CloudPasswordHintId(),
|
||||
CloudPasswordEmailId(),
|
||||
CloudPasswordEmailConfirmId(),
|
||||
CloudPasswordManageId(),
|
||||
});
|
||||
controller()->show(
|
||||
Ui::MakeInformBox(tr::lng_cloud_password_expired()),
|
||||
Ui::LayerOption::CloseOther);
|
||||
setStepData(StepData());
|
||||
showBack();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
rpl::producer<Type> AbstractStep::sectionShowOther() {
|
||||
return _showOther.events();
|
||||
}
|
||||
|
@ -284,6 +320,10 @@ rpl::producer<> AbstractStep::sectionShowBack() {
|
|||
return _showBack.events();
|
||||
}
|
||||
|
||||
rpl::producer<std::vector<Type>> AbstractStep::removeFromStack() {
|
||||
return rpl::merge(removeTypes(), _quits.events());
|
||||
}
|
||||
|
||||
void AbstractStep::setStepDataReference(std::any &data) {
|
||||
_stepData = &data;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,8 @@ struct StepData {
|
|||
ProcessRecover processRecover;
|
||||
};
|
||||
|
||||
void SetupAutoCloseTimer(rpl::lifetime &lifetime, Fn<void()> callback);
|
||||
|
||||
void SetupHeader(
|
||||
not_null<Ui::VerticalLayout*> content,
|
||||
const QString &lottie,
|
||||
|
@ -102,15 +104,18 @@ private:
|
|||
|
||||
class AbstractStep : public AbstractSection {
|
||||
public:
|
||||
using Types = std::vector<Type>;
|
||||
AbstractStep(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller);
|
||||
~AbstractStep();
|
||||
|
||||
void showFinished() override;
|
||||
void setInnerFocus() override;
|
||||
[[nodiscard]] rpl::producer<Type> sectionShowOther() override;
|
||||
[[nodiscard]] rpl::producer<> sectionShowBack() override;
|
||||
void showFinished() override final;
|
||||
void setInnerFocus() override final;
|
||||
[[nodiscard]] rpl::producer<Type> sectionShowOther() override final;
|
||||
[[nodiscard]] rpl::producer<> sectionShowBack() override final;
|
||||
|
||||
[[nodiscard]] rpl::producer<Types> removeFromStack() override final;
|
||||
|
||||
void setStepDataReference(std::any &data) override;
|
||||
|
||||
|
@ -118,6 +123,10 @@ protected:
|
|||
[[nodiscard]] not_null<Window::SessionController*> controller() const;
|
||||
[[nodiscard]] Api::CloudPassword &cloudPassword();
|
||||
|
||||
[[nodiscard]] virtual rpl::producer<Types> removeTypes();
|
||||
|
||||
bool isPasswordInvalidError(const QString &type);
|
||||
|
||||
void showBack();
|
||||
void showOther(Type type);
|
||||
|
||||
|
@ -136,6 +145,7 @@ private:
|
|||
rpl::event_stream<> _showFinished;
|
||||
rpl::event_stream<Type> _showOther;
|
||||
rpl::event_stream<> _showBack;
|
||||
rpl::event_stream<Types> _quits;
|
||||
|
||||
std::any *_stepData;
|
||||
|
||||
|
|
|
@ -121,6 +121,7 @@ void Email::setupContent() {
|
|||
if (MTP::IsFloodError(type)) {
|
||||
error->show();
|
||||
error->setText(tr::lng_flood_error(tr::now));
|
||||
} else if (AbstractStep::isPasswordInvalidError(type)) {
|
||||
} else if (type == u"EMAIL_INVALID"_q) {
|
||||
error->show();
|
||||
error->setText(tr::lng_cloud_password_bad_email(tr::now));
|
||||
|
|
|
@ -56,7 +56,8 @@ public:
|
|||
[[nodiscard]] rpl::producer<QString> title() override;
|
||||
void setupContent();
|
||||
|
||||
[[nodiscard]] rpl::producer<std::vector<Type>> removeFromStack() override;
|
||||
protected:
|
||||
[[nodiscard]] rpl::producer<std::vector<Type>> removeTypes() override;
|
||||
|
||||
private:
|
||||
rpl::lifetime _requestLifetime;
|
||||
|
@ -67,7 +68,7 @@ rpl::producer<QString> EmailConfirm::title() {
|
|||
return tr::lng_settings_cloud_password_email_title();
|
||||
}
|
||||
|
||||
rpl::producer<std::vector<Type>> EmailConfirm::removeFromStack() {
|
||||
rpl::producer<std::vector<Type>> EmailConfirm::removeTypes() {
|
||||
return rpl::single(std::vector<Type>{
|
||||
CloudPasswordStartId(),
|
||||
CloudPasswordInputId(),
|
||||
|
|
|
@ -118,7 +118,8 @@ public:
|
|||
[[nodiscard]] rpl::producer<QString> title() override;
|
||||
void setupContent();
|
||||
|
||||
[[nodiscard]] rpl::producer<std::vector<Type>> removeFromStack() override;
|
||||
protected:
|
||||
[[nodiscard]] rpl::producer<std::vector<Type>> removeTypes() override;
|
||||
|
||||
private:
|
||||
void setupRecoverButton(
|
||||
|
@ -132,7 +133,7 @@ private:
|
|||
|
||||
};
|
||||
|
||||
rpl::producer<std::vector<Type>> Input::removeFromStack() {
|
||||
rpl::producer<std::vector<Type>> Input::removeTypes() {
|
||||
return _removesFromStack.value();
|
||||
}
|
||||
|
||||
|
|
|
@ -94,11 +94,12 @@ public:
|
|||
[[nodiscard]] rpl::producer<QString> title() override;
|
||||
void setupContent();
|
||||
|
||||
[[nodiscard]] rpl::producer<std::vector<Type>> removeFromStack() override;
|
||||
|
||||
[[nodiscard]] QPointer<Ui::RpWidget> createPinnedToBottom(
|
||||
not_null<Ui::RpWidget*> parent) override;
|
||||
|
||||
protected:
|
||||
[[nodiscard]] rpl::producer<std::vector<Type>> removeTypes() override;
|
||||
|
||||
private:
|
||||
rpl::variable<bool> _isBottomFillerShown;
|
||||
|
||||
|
@ -112,7 +113,7 @@ rpl::producer<QString> Manage::title() {
|
|||
return tr::lng_settings_cloud_password_start_title();
|
||||
}
|
||||
|
||||
rpl::producer<std::vector<Type>> Manage::removeFromStack() {
|
||||
rpl::producer<std::vector<Type>> Manage::removeTypes() {
|
||||
return rpl::single(std::vector<Type>{
|
||||
CloudPasswordStartId(),
|
||||
CloudPasswordInputId(),
|
||||
|
@ -221,7 +222,9 @@ QPointer<Ui::RpWidget> Manage::createPinnedToBottom(
|
|||
QString(),
|
||||
false,
|
||||
QString()
|
||||
) | rpl::start_with_done([=] {
|
||||
) | rpl::start_with_error_done([=](const QString &type) {
|
||||
AbstractStep::isPasswordInvalidError(type);
|
||||
}, [=] {
|
||||
setStepData(StepData());
|
||||
close();
|
||||
showBack();
|
||||
|
|
Loading…
Add table
Reference in a new issue