Admin Pwd reset logic
This commit is contained in:
@@ -2,11 +2,20 @@
|
||||
|
||||
#include <QtWidgets/QVBoxLayout>
|
||||
#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)
|
||||
: GUIFormBaseDialog(parent, f)
|
||||
, mLeSpCode(new ULineEdit(this))
|
||||
{
|
||||
this->setMinimumHeight(300);
|
||||
this->setMinimumHeight(380);
|
||||
this->setMinimumWidth(200);
|
||||
mFormWidget->setObjectName("Adminform");
|
||||
auto layout = new QVBoxLayout(mFormWidget);
|
||||
@@ -15,12 +24,93 @@ AdminSPwdDialog::AdminSPwdDialog(QWidget *parent, Qt::WindowFlags f)
|
||||
lblMsg->setObjectName("Notice");
|
||||
lblMsg->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
|
||||
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);
|
||||
QLabel* lblSCode = new QLabel(mFormWidget);
|
||||
lblSCode->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
|
||||
layout->addWidget(lblSCode, Qt::AlignHCenter);
|
||||
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);
|
||||
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;
|
||||
}
|
||||
@@ -1,16 +1,27 @@
|
||||
#ifndef CF2CD71D_5155_4FC5_B382_331CBD884F97
|
||||
#define CF2CD71D_5155_4FC5_B382_331CBD884F97
|
||||
#include "GUIFormBaseDialog.h"
|
||||
|
||||
#include "components/ULineEdit.h"
|
||||
#include <QString>
|
||||
class AdminSPwdDialog :public GUIFormBaseDialog{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit AdminSPwdDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
|
||||
~AdminSPwdDialog() override = default;
|
||||
QString getNewPwd();
|
||||
protected:
|
||||
bool updateReferenceData() override{return true;}
|
||||
void generateCode();
|
||||
void generateSPCode();
|
||||
void generatePwd();
|
||||
bool updateReferenceData() override;
|
||||
|
||||
private:
|
||||
|
||||
QString Crypt();
|
||||
QString mCode;
|
||||
QString mSpCode;
|
||||
QString mNewPwd;
|
||||
ULineEdit* mLeSpCode;
|
||||
};
|
||||
|
||||
#endif /* CF2CD71D_5155_4FC5_B382_331CBD884F97 */
|
||||
|
||||
@@ -119,14 +119,14 @@ void DialogManager::requestScreenSaverStop(bool aIsStopLocker)
|
||||
mScreenSaverWindow->stop(aIsStopLocker);
|
||||
}
|
||||
|
||||
int DialogManager::requestResetAdminPwd()
|
||||
DialogResult DialogManager::requestResetAdminPwd()
|
||||
{
|
||||
AdminSPwdDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return ret;
|
||||
return DialogResult(ret, dialog.getNewPwd());
|
||||
}
|
||||
|
||||
int DialogManager::requestAddAccount(QSqlTableModel* model) {
|
||||
|
||||
@@ -48,7 +48,7 @@ public:
|
||||
void requestLogin(QWidget* aParent);
|
||||
void requestScreenSaverPlay();
|
||||
void requestScreenSaverStop(bool aIsStopLocker = false);
|
||||
int requestResetAdminPwd();
|
||||
DialogResult requestResetAdminPwd();
|
||||
int requestAddAccount(QSqlTableModel* model);
|
||||
int requestEditSelfAccount();
|
||||
int requestEditAdminAccount(const QMap<QString, QVariant>& values);
|
||||
|
||||
@@ -66,7 +66,10 @@ void LoginDialog::initializeLayout()
|
||||
mHideClickCount++;
|
||||
if (mHideClickCount == 5){
|
||||
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));
|
||||
|
||||
Reference in New Issue
Block a user