Admin Pwd reset logic

This commit is contained in:
kradchen
2023-09-13 14:27:37 +08:00
parent 88e193ae84
commit 941b2824ea
5 changed files with 114 additions and 10 deletions

View File

@@ -2,11 +2,20 @@
#include <QtWidgets/QVBoxLayout> #include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QLabel> #include <QtWidgets/QLabel>
#include <QtCore/QCryptographicHash>
#include <qrandom.h>
#include <QDebug>
#include <QTime>
#include "models/User.h"
#include "db/SQLHelper.h"
AdminSPwdDialog::AdminSPwdDialog(QWidget *parent, Qt::WindowFlags f) AdminSPwdDialog::AdminSPwdDialog(QWidget *parent, Qt::WindowFlags f)
: GUIFormBaseDialog(parent, f) : GUIFormBaseDialog(parent, f)
, mLeSpCode(new ULineEdit(this))
{ {
this->setMinimumHeight(300); this->setMinimumHeight(380);
this->setMinimumWidth(200); this->setMinimumWidth(200);
mFormWidget->setObjectName("Adminform"); mFormWidget->setObjectName("Adminform");
auto layout = new QVBoxLayout(mFormWidget); auto layout = new QVBoxLayout(mFormWidget);
@@ -15,12 +24,93 @@ AdminSPwdDialog::AdminSPwdDialog(QWidget *parent, Qt::WindowFlags f)
lblMsg->setObjectName("Notice"); lblMsg->setObjectName("Notice");
lblMsg->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred); lblMsg->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
lblMsg->setWordWrap(true); lblMsg->setWordWrap(true);
lblMsg->setText(tr("Please give this code to producer for getting the SP Code to reset admininistrator's password to\"123456\"!")); lblMsg->setText(tr("Please give this code to producer for getting the SP Code to reset admininistrator's password!"));
layout->addWidget(lblMsg, Qt::AlignHCenter); layout->addWidget(lblMsg, Qt::AlignHCenter);
QLabel* lblSCode = new QLabel(mFormWidget); QLabel* lblSCode = new QLabel(mFormWidget);
lblSCode->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); lblSCode->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
layout->addWidget(lblSCode, Qt::AlignHCenter); layout->addWidget(lblSCode, Qt::AlignHCenter);
lblSCode->setObjectName("resetCode"); lblSCode->setObjectName("resetCode");
lblSCode->setText("U S C T"); qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
generateCode();
lblSCode->setText(mCode);
lblSCode->setAlignment(Qt::AlignCenter); lblSCode->setAlignment(Qt::AlignCenter);
mLeSpCode->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
mLeSpCode->setPlaceholderText(tr("Input the SP Code here"));
layout->addWidget(mLeSpCode, Qt::AlignHCenter);
generateSPCode();
}
QString AdminSPwdDialog::getNewPwd()
{
return mNewPwd;
}
void AdminSPwdDialog::generateCode()
{
mCode.clear();
for (size_t i = 0; i < 4; i++)
{
int num = qrand()%3;
if(num == 0){
mCode+=QString::number(qrand()%10);
mCode+=" ";
}
if(num == 1){
int temp = 'A';
mCode +=static_cast<QChar>(temp+qrand()%26);
mCode +=" ";
}
if(num == 2){
int temp = 'a';
mCode +=static_cast<QChar>(temp+qrand()%26);
mCode +=" ";
}
}
}
void AdminSPwdDialog::generatePwd()
{
mNewPwd.clear();
for (size_t i = 0; i < 8; i++)
{
int num = qrand()%3;
if(num == 0){
mNewPwd+=QString::number(qrand()%10);
}
if(num == 1){
int temp = 'A';
mNewPwd +=static_cast<QChar>(temp+qrand()%26);
}
if(num == 2){
int temp = 'a';
mNewPwd +=static_cast<QChar>(temp+qrand()%26);
}
}
}
void AdminSPwdDialog::generateSPCode()
{
QByteArray byteWd = mCode.replace(" ","").append("USCT").toLatin1();
QByteArray bytePwdMd5 = QCryptographicHash::hash(byteWd, QCryptographicHash::Sha256);
mSpCode = bytePwdMd5.toHex();
qDebug()<<mSpCode;
mSpCode = QCryptographicHash::hash(mSpCode.left(8).toLatin1(), QCryptographicHash::Md5).toHex();
}
bool AdminSPwdDialog::updateReferenceData()
{
QByteArray byteSP = mLeSpCode->text().left(8).toLatin1();
QByteArray byteSPMd5 = QCryptographicHash::hash(byteSP, QCryptographicHash::Md5);
QString SPMD5 = byteSPMd5.toHex();
bool flag = SPMD5 == mSpCode;
if (!flag) return false;
generatePwd();
QString CryptPwd = User::getEncryptedPassword(mNewPwd);
bool execSqlFlag = SQLHelper::exec(QString("update Account set Password='%1' where UserCode='usct'").arg(CryptPwd));
return execSqlFlag;
} }

View File

@@ -1,16 +1,27 @@
#ifndef CF2CD71D_5155_4FC5_B382_331CBD884F97 #ifndef CF2CD71D_5155_4FC5_B382_331CBD884F97
#define CF2CD71D_5155_4FC5_B382_331CBD884F97 #define CF2CD71D_5155_4FC5_B382_331CBD884F97
#include "GUIFormBaseDialog.h" #include "GUIFormBaseDialog.h"
#include "components/ULineEdit.h"
#include <QString>
class AdminSPwdDialog :public GUIFormBaseDialog{ class AdminSPwdDialog :public GUIFormBaseDialog{
Q_OBJECT Q_OBJECT
public: public:
explicit AdminSPwdDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); explicit AdminSPwdDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
~AdminSPwdDialog() override = default; ~AdminSPwdDialog() override = default;
QString getNewPwd();
protected: protected:
bool updateReferenceData() override{return true;} void generateCode();
void generateSPCode();
void generatePwd();
bool updateReferenceData() override;
private: private:
QString Crypt();
QString mCode;
QString mSpCode;
QString mNewPwd;
ULineEdit* mLeSpCode;
}; };
#endif /* CF2CD71D_5155_4FC5_B382_331CBD884F97 */ #endif /* CF2CD71D_5155_4FC5_B382_331CBD884F97 */

View File

@@ -119,14 +119,14 @@ void DialogManager::requestScreenSaverStop(bool aIsStopLocker)
mScreenSaverWindow->stop(aIsStopLocker); mScreenSaverWindow->stop(aIsStopLocker);
} }
int DialogManager::requestResetAdminPwd() DialogResult DialogManager::requestResetAdminPwd()
{ {
AdminSPwdDialog dialog(mTopWidget); AdminSPwdDialog dialog(mTopWidget);
setTopWidget(&dialog); setTopWidget(&dialog);
dialog.setWindowModality(Qt::WindowModal); dialog.setWindowModality(Qt::WindowModal);
int ret = dialog.exec(); int ret = dialog.exec();
releaseTopWidget(&dialog); releaseTopWidget(&dialog);
return ret; return DialogResult(ret, dialog.getNewPwd());
} }
int DialogManager::requestAddAccount(QSqlTableModel* model) { int DialogManager::requestAddAccount(QSqlTableModel* model) {

View File

@@ -48,7 +48,7 @@ public:
void requestLogin(QWidget* aParent); void requestLogin(QWidget* aParent);
void requestScreenSaverPlay(); void requestScreenSaverPlay();
void requestScreenSaverStop(bool aIsStopLocker = false); void requestScreenSaverStop(bool aIsStopLocker = false);
int requestResetAdminPwd(); DialogResult requestResetAdminPwd();
int requestAddAccount(QSqlTableModel* model); int requestAddAccount(QSqlTableModel* model);
int requestEditSelfAccount(); int requestEditSelfAccount();
int requestEditAdminAccount(const QMap<QString, QVariant>& values); int requestEditAdminAccount(const QMap<QString, QVariant>& values);

View File

@@ -66,7 +66,10 @@ void LoginDialog::initializeLayout()
mHideClickCount++; mHideClickCount++;
if (mHideClickCount == 5){ if (mHideClickCount == 5){
mHideClickCount = 0; mHideClickCount = 0;
DialogManager::Default()->requestResetAdminPwd(); DialogResult result = DialogManager::Default()->requestResetAdminPwd();
if (result.ResultCode != QDialog::Accepted) return;
DialogManager::Default()->requestAlertMessage(QString(tr("New password:%1")).arg(result.ResultData.toString()),
DialogButtonMode::OkOnly,tr("Reset success"));
} }
}); });
mVMainLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding)); mVMainLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));