Add login failed lock.

This commit is contained in:
sunwen
2023-09-25 14:35:34 +08:00
parent b9e122351c
commit e1cbebfd01
2 changed files with 32 additions and 2 deletions

View File

@@ -5,6 +5,7 @@
#include <QDesktopWidget>
#include <QToolButton>
#include <QtWidgets/QLabel>
#include <QTimer>
#include "event/EventCenter.h"
#include "dialogs/DialogManager.h"
@@ -13,6 +14,12 @@
#include "json/jsonobject.h"
#include "components/ULineEdit.h"
namespace
{
const int LOGIN_LOCK_COUNT = 3;
const int LOGIN_LOCK_MINUTIES = 1;
}
LoginDialog::LoginDialog(QWidget* aParent)
: QDialog(aParent)
, mVMainLayout(new QVBoxLayout(this))
@@ -27,11 +34,15 @@ LoginDialog::LoginDialog(QWidget* aParent)
, mErrorMessage(new QLabel(this))
, mIsRunning(false)
, mHideClickCount(0)
, mLoginFailedCount(0)
, mLoginFailedTimer(new QTimer(this))
{
initializeAllWidget();
setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint| Qt::BypassWindowManagerHint);
setGeometry(QApplication::desktop()->screenGeometry());
mAccountEdit->setText(JsonObject::Instance()->defaultUser());
mLoginFailedTimer->setSingleShot(true);
connect(mLoginFailedTimer, &QTimer::timeout, this, &LoginDialog::resetLoginFailedCount);
}
LoginDialog::~LoginDialog()
@@ -134,7 +145,6 @@ void LoginDialog::initializeLoginButton()
void LoginDialog::initializeErrorMessage()
{
mErrorMessage->setObjectName("warn");
mErrorMessage->setText("Login failed, username or password error!");
mErrorMessage->setVisible(false);
mDialogContentsLayout->addWidget(mErrorMessage, 0, Qt::AlignCenter);
}
@@ -148,6 +158,13 @@ void LoginDialog::clearInputData()
void LoginDialog::doLogin()
{
if(mLoginFailedCount >= LOGIN_LOCK_COUNT)
{
mErrorMessage->setText(QString(tr("Login locked. Please retry after %1 minutes.")).arg(LOGIN_LOCK_MINUTIES));
mErrorMessage->setVisible(true);
return;
}
QString strUserCode = mAccountEdit->text();
QString strPassWord = mPasswordEdit->text();
@@ -157,6 +174,7 @@ void LoginDialog::doLogin()
QString encryptPwd = User::getEncryptedPassword(strPassWord);
if (User::QueryUser(strUserCode, encryptPwd))
{
resetLoginFailedCount();
mErrorMessage->setVisible(false);
accept();
LOG_USER_OPERATION("Login Sucessful");
@@ -166,7 +184,13 @@ void LoginDialog::doLogin()
else
{
LOG_USER_OPERATION(QString("Login Failed, User Name: %1").arg(strUserCode));
++mLoginFailedCount;
mErrorMessage->setText(QString(tr("Login failed, username or password error! Remaining retries: %1")).arg(LOGIN_LOCK_COUNT - mLoginFailedCount));
mErrorMessage->setVisible(true);
if(LOGIN_LOCK_COUNT - mLoginFailedCount == 0)
{
mLoginFailedTimer->start(LOGIN_LOCK_MINUTIES * 60000);
}
}
}
@@ -198,5 +222,8 @@ void LoginDialog::showEvent(QShowEvent* event)
emit loginDialogShown();
}
void LoginDialog::resetLoginFailedCount()
{
mLoginFailedCount = 0;
}