From 241382d30581f10a883683252dfea2d219e25714 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 16 Oct 2025 17:11:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A5=D1=8D=D1=88=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/CMakeLists.txt | 2 + DataBaseLMS/hashtools.cpp | 14 ++++ DataBaseLMS/hashtools.h | 15 +++++ DataBaseLMS/user.cpp | 11 +++- DataBaseLMS/user.h | 6 ++ .../dialogauthorizationinstructor.cpp | 12 ++++ .../dialogauthorizationinstructor.h | 4 ++ .../dialogauthorizationinstructor.ui | 35 +++++++--- .../instructors/dialogeditinstructor.cpp | 27 ++++++++ .../instructors/dialogeditinstructor.h | 4 ++ .../instructors/dialogeditinstructor.ui | 23 ++++++- .../instructors/editorinstructors.cpp | 57 ++++------------- .../instructorsandtraineeswidget.cpp | 4 ++ InstructorsAndTrainees/resources.qrc | 1 + .../resources/icons/eye.png | Bin 0 -> 34568 bytes .../trainees/dialogedittrainee.cpp | 29 +++++++++ .../trainees/dialogedittrainee.h | 4 ++ .../trainees/dialogedittrainee.ui | 29 +++++++-- .../trainees/editortrainees.cpp | 60 +++--------------- 19 files changed, 221 insertions(+), 116 deletions(-) create mode 100644 DataBaseLMS/hashtools.cpp create mode 100644 DataBaseLMS/hashtools.h create mode 100644 InstructorsAndTrainees/resources/icons/eye.png diff --git a/DataBaseLMS/CMakeLists.txt b/DataBaseLMS/CMakeLists.txt index 6ed1ff7..1497cf9 100644 --- a/DataBaseLMS/CMakeLists.txt +++ b/DataBaseLMS/CMakeLists.txt @@ -33,6 +33,8 @@ add_library(DataBaseLMS SHARED timingoftrainee.cpp timingoftrainee.h contactModel.h + hashtools.cpp + hashtools.h resources.qrc ) diff --git a/DataBaseLMS/hashtools.cpp b/DataBaseLMS/hashtools.cpp new file mode 100644 index 0000000..00ed01e --- /dev/null +++ b/DataBaseLMS/hashtools.cpp @@ -0,0 +1,14 @@ +#include "hashtools.h" +#include + +HashTools::HashTools() +{ + +} + +QString HashTools::hashingMD5string(QString str) +{// Вычисление MD5 хэша строки + + QByteArray md5Hash = QCryptographicHash::hash(str.toUtf8(), QCryptographicHash::Md5).toHex(); + return QString(md5Hash); +} diff --git a/DataBaseLMS/hashtools.h b/DataBaseLMS/hashtools.h new file mode 100644 index 0000000..87a2aba --- /dev/null +++ b/DataBaseLMS/hashtools.h @@ -0,0 +1,15 @@ +#ifndef HASHTOOLS_H +#define HASHTOOLS_H + +#include +#include "DataBaseLMS_global.h" + +class DATABASELMS_EXPORT HashTools +{ +public: + HashTools(); +public: + static QString hashingMD5string(QString str); +}; + +#endif // HASHTOOLS_H diff --git a/DataBaseLMS/user.cpp b/DataBaseLMS/user.cpp index abe8ea1..ebbcc15 100644 --- a/DataBaseLMS/user.cpp +++ b/DataBaseLMS/user.cpp @@ -1,4 +1,6 @@ #include "user.h" +#include "hashtools.h" +#include const QString User::TypeUserDBInstructor = "instructor"; const QString User::TypeUserDBTrainee = "trainee"; @@ -10,7 +12,14 @@ User::User(): archived(), loggedIn(), TypeUserDB(), - isAdmin(false) + isAdmin(false), + needSetPassword(false) { } + +void User::hashingPassword() +{ + // Вычисление MD5 хэша + password = HashTools::hashingMD5string(password); +} diff --git a/DataBaseLMS/user.h b/DataBaseLMS/user.h index 2c697e5..3fc4b68 100644 --- a/DataBaseLMS/user.h +++ b/DataBaseLMS/user.h @@ -25,6 +25,11 @@ public: QString getTypeUserDB(){return TypeUserDB;} + bool getNeedSetPassword(){return this->needSetPassword;} + void setNeedSetPassword(bool needSetPassword){this->needSetPassword = needSetPassword;} + + void hashingPassword(); + private: QString login; QString password; @@ -34,6 +39,7 @@ protected: QString TypeUserDB; bool isAdmin; + bool needSetPassword; }; #endif // USER_H diff --git a/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.cpp b/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.cpp index 6b3832b..680b819 100644 --- a/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.cpp +++ b/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.cpp @@ -11,6 +11,8 @@ DialogAuthorizationInstructor::DialogAuthorizationInstructor(QWidget *parent) : ui->editLogin->setProperty("mandatoryField", true); ui->editPassword->setProperty("mandatoryField", true); + ui->btnViewPassword->setObjectName("btnViewPassword"); + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password); ui->editLogin->setValidator(new QRegExpValidator(QRegExp("[A-Za-z\\d]+"), this)); @@ -30,3 +32,13 @@ void DialogAuthorizationInstructor::on_btnLogIn_clicked() { this->accept(); } + +void DialogAuthorizationInstructor::on_btnViewPassword_pressed() +{ + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Normal); +} + +void DialogAuthorizationInstructor::on_btnViewPassword_released() +{ + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password); +} diff --git a/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.h b/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.h index 276ea66..a746730 100644 --- a/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.h +++ b/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.h @@ -30,6 +30,10 @@ public: private slots: void on_btnLogIn_clicked(); + void on_btnViewPassword_pressed(); + + void on_btnViewPassword_released(); + private: Ui::DialogAuthorizationInstructor *ui; }; diff --git a/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.ui b/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.ui index 944bc86..6f9f43f 100644 --- a/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.ui +++ b/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.ui @@ -71,16 +71,31 @@ - - - - 10 - - - - - - + + + + + + 10 + + + + + + + + + + + ... + + + + :/resources/icons/eye.png:/resources/icons/eye.png + + + + diff --git a/InstructorsAndTrainees/instructors/dialogeditinstructor.cpp b/InstructorsAndTrainees/instructors/dialogeditinstructor.cpp index d1cd237..7019fb4 100644 --- a/InstructorsAndTrainees/instructors/dialogeditinstructor.cpp +++ b/InstructorsAndTrainees/instructors/dialogeditinstructor.cpp @@ -15,8 +15,17 @@ DialogEditInstructor::DialogEditInstructor(QWidget *parent) : ui->editLogin->setProperty("mandatoryField", true); ui->editPassword->setProperty("mandatoryField", true); + ui->btnViewPassword->setObjectName("btnViewPassword"); + ui->editLogin->setValidator(new QRegExpValidator(QRegExp("[A-Za-z\\d]+"), this)); + ui->editPassword->setEnabled(false); +//#ifndef PROJECT_TYPE_DEBUG + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password); +//#endif + + ui->btnViewPassword->setEnabled(false); + ui->btnOK->setEnabled(false); } @@ -42,6 +51,14 @@ void DialogEditInstructor::setInstructor(Instructor instructor) else ui->editName->setEnabled(true); + if(instructor.getNeedSetPassword()) + { + ui->editPassword->setEnabled(true); + ui->btnViewPassword->setEnabled(true); + } + //else + //ui->editPassword->setText("*****"); + ui->btnOK->setEnabled(false); } @@ -89,3 +106,13 @@ void DialogEditInstructor::on_btnOK_clicked() { this->accept(); } + +void DialogEditInstructor::on_btnViewPassword_pressed() +{ + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Normal); +} + +void DialogEditInstructor::on_btnViewPassword_released() +{ + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password); +} diff --git a/InstructorsAndTrainees/instructors/dialogeditinstructor.h b/InstructorsAndTrainees/instructors/dialogeditinstructor.h index 9cdadfc..84f3aef 100644 --- a/InstructorsAndTrainees/instructors/dialogeditinstructor.h +++ b/InstructorsAndTrainees/instructors/dialogeditinstructor.h @@ -29,6 +29,10 @@ private slots: void on_btnOK_clicked(); + void on_btnViewPassword_pressed(); + + void on_btnViewPassword_released(); + private: void verify(); diff --git a/InstructorsAndTrainees/instructors/dialogeditinstructor.ui b/InstructorsAndTrainees/instructors/dialogeditinstructor.ui index 4f7c22a..a5b9fdf 100644 --- a/InstructorsAndTrainees/instructors/dialogeditinstructor.ui +++ b/InstructorsAndTrainees/instructors/dialogeditinstructor.ui @@ -77,7 +77,28 @@ - + + + + + + + + ... + + + + :/resources/icons/eye.png:/resources/icons/eye.png + + + + 16 + 16 + + + + + diff --git a/InstructorsAndTrainees/instructors/editorinstructors.cpp b/InstructorsAndTrainees/instructors/editorinstructors.cpp index 77e8010..80292ab 100644 --- a/InstructorsAndTrainees/instructors/editorinstructors.cpp +++ b/InstructorsAndTrainees/instructors/editorinstructors.cpp @@ -47,59 +47,17 @@ void EditorInstructors::on_btnNewInstructor_clicked() Instructor instructor; Instructor instructor_edit; + instructor.setNeedSetPassword(true); + if(editInstructor(instructor, &instructor_edit)) { waitAnimationWidget->showWithPlay(); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_NEW_INSTRUCTOR, 0, &instructor_edit); } + lastCurrentID = 0; + return; -/* - if(int id_instructor = dbLMS->newInstructor()) - { - loadInstructorsFromDB(); - setCurrentInstructor(id_instructor); - - DialogEditInstructor dlg(this); - - Instructor instructor = dbLMS->getInstructor(id_instructor); - if(instructor.getID() == 0) - return; - - dlg.setInstructor(instructor); - - while (true) - { - switch( dlg.exec() ) - { - case QDialog::Accepted: - { - Instructor instructor_edit = dlg.getInstructor(); - - if(int id_edit = dbLMS->editInstructor(instructor_edit)) - {//Отредактировано - loadInstructorsFromDB(); - setCurrentInstructor(id_edit); - return; - } - else - { - dlg.setInstructor(instructor_edit); - continue; - } - } - case QDialog::Rejected: - dbLMS->delInstructor(id_instructor); - loadInstructorsFromDB(); - return; - default: - dbLMS->delInstructor(id_instructor); - loadInstructorsFromDB(); - return; - } - } - } - */ } void EditorInstructors::on_btnDeleteInstructor_clicked() @@ -353,6 +311,13 @@ bool EditorInstructors::editInstructor(Instructor instructor, Instructor* instru continue; } + if(instructor_edit->getNeedSetPassword()) + { + //Хэшируем пароль + instructor_edit->hashingPassword(); + instructor_edit->setNeedSetPassword(false); + } + return true; } case QDialog::Rejected: diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 3cdf063..05314c6 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -5,6 +5,7 @@ #include "dialogauthorizationinstructor.h" #include "dialogsettings.h" #include "specialmessagebox.h" +#include "hashtools.h" const QString InstructorsAndTraineesWidget::languageENG = "en_EN"; @@ -314,6 +315,9 @@ bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent QString login = dlg.getLogin(); QString password = dlg.getPassword(); + // Вычисление MD5 хэша + password = HashTools::hashingMD5string(password); + connectorToServer->authorizationInstructorLocal(login, password); return true; diff --git a/InstructorsAndTrainees/resources.qrc b/InstructorsAndTrainees/resources.qrc index 8adb83b..cbcec0f 100644 --- a/InstructorsAndTrainees/resources.qrc +++ b/InstructorsAndTrainees/resources.qrc @@ -53,5 +53,6 @@ resources/icons/warning.png resources/icons/info.png resources/icons/personalCard.png + resources/icons/eye.png diff --git a/InstructorsAndTrainees/resources/icons/eye.png b/InstructorsAndTrainees/resources/icons/eye.png new file mode 100644 index 0000000000000000000000000000000000000000..78d9960498600f4516d245ac214b3ea567e25440 GIT binary patch literal 34568 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%0AKnF@W*?dnn1vjjLTF_2Oc?bRpiWzLz@i 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"mandatoryField", true); ui->editPassword->setProperty("mandatoryField", true); + ui->btnViewPassword->setObjectName("btnViewPassword"); + ui->editLogin->setValidator(new QRegExpValidator(QRegExp("[A-Za-z\\d]+"), this)); + + ui->editPassword->setEnabled(false); +//#ifndef PROJECT_TYPE_DEBUG + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password); +//#endif + + ui->btnViewPassword->setEnabled(false); + + ui->btnOK->setEnabled(false); } DialogEditTrainee::~DialogEditTrainee() @@ -34,6 +45,14 @@ void DialogEditTrainee::setTrainee(Trainee trainee) ui->checkArchived->setChecked(trainee.getArchived()); ui->checkLoggedIn->setChecked(trainee.getLoggedIn()); + if(trainee.getNeedSetPassword()) + { + ui->editPassword->setEnabled(true); + ui->btnViewPassword->setEnabled(true); + } + //else + //ui->editPassword->setText("*****"); + ui->btnOK->setEnabled(false); } @@ -80,3 +99,13 @@ void DialogEditTrainee::on_btnOK_clicked() { this->accept(); } + +void DialogEditTrainee::on_btnViewPassword_pressed() +{ + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Normal); +} + +void DialogEditTrainee::on_btnViewPassword_released() +{ + ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password); +} diff --git a/InstructorsAndTrainees/trainees/dialogedittrainee.h b/InstructorsAndTrainees/trainees/dialogedittrainee.h index 3227b60..9a644fa 100644 --- a/InstructorsAndTrainees/trainees/dialogedittrainee.h +++ b/InstructorsAndTrainees/trainees/dialogedittrainee.h @@ -28,6 +28,10 @@ private slots: void on_btnOK_clicked(); + void on_btnViewPassword_pressed(); + + void on_btnViewPassword_released(); + private: void verify(); diff --git a/InstructorsAndTrainees/trainees/dialogedittrainee.ui b/InstructorsAndTrainees/trainees/dialogedittrainee.ui index 619d7ec..3d5c315 100644 --- a/InstructorsAndTrainees/trainees/dialogedittrainee.ui +++ b/InstructorsAndTrainees/trainees/dialogedittrainee.ui @@ -85,13 +85,28 @@ - - - - 10 - - - + + + + + + 10 + + + + + + + + ... + + + + :/resources/icons/eye.png:/resources/icons/eye.png + + + + diff --git a/InstructorsAndTrainees/trainees/editortrainees.cpp b/InstructorsAndTrainees/trainees/editortrainees.cpp index 0e643db..aa7ccc3 100644 --- a/InstructorsAndTrainees/trainees/editortrainees.cpp +++ b/InstructorsAndTrainees/trainees/editortrainees.cpp @@ -148,63 +148,14 @@ void EditorTrainees::on_btnNewTrainee_clicked() Trainee trainee; Trainee trainee_edit; + trainee.setNeedSetPassword(true); + if(editTrainee(trainee, &trainee_edit)) { waitAnimationWidget->showWithPlay(); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_NEW_TRAINEE, id_group, &trainee_edit); } return; - - /* - if(int id_trainee = dbLMS->newTrainee(id_group)) - { - loadTraineesFromDB(); - setCurrentGroup(id_group); - - DialogEditTrainee dlg(this); - - Trainee trainee = dbLMS->getTrainee(id_trainee); - if(trainee.getID() == 0) - return; - - dlg.setTrainee(trainee); - - while (true) - { - switch( dlg.exec() ) - { - case QDialog::Accepted: - { - Trainee trainee_edit = dlg.getTrainee(); - - if(int id_edit = dbLMS->editTrainee(trainee_edit)) - {//Отредактировано - loadTraineesFromDB(); - //setCurrentTrainee(id_edit); - setCurrentGroup(id_group); - return; - } - else - { - dlg.setTrainee(trainee_edit); - continue; - } - - break; - } - case QDialog::Rejected: - dbLMS->delTrainee(id_trainee); - loadTraineesFromDB(); - setCurrentGroup(id_group); - return; - default: - dbLMS->delTrainee(id_trainee); - loadTraineesFromDB(); - setCurrentGroup(id_group); - return; - } - } - }*/ } } } @@ -582,6 +533,13 @@ bool EditorTrainees::editTrainee(Trainee trainee, Trainee *trainee_edit) continue; } + if(trainee_edit->getNeedSetPassword()) + { + //Хэшируем пароль + trainee_edit->hashingPassword(); + trainee_edit->setNeedSetPassword(false); + } + return true; } case QDialog::Rejected: