Admin Pwd reset logic
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user