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 0000000..78d9960 Binary files /dev/null and b/InstructorsAndTrainees/resources/icons/eye.png differ diff --git a/InstructorsAndTrainees/trainees/dialogedittrainee.cpp b/InstructorsAndTrainees/trainees/dialogedittrainee.cpp index 7c3f4ab..e408bc6 100644 --- a/InstructorsAndTrainees/trainees/dialogedittrainee.cpp +++ b/InstructorsAndTrainees/trainees/dialogedittrainee.cpp @@ -15,7 +15,18 @@ DialogEditTrainee::DialogEditTrainee(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); } 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: