Commit eed55434 authored by Mathieu Valois's avatar Mathieu Valois
Browse files

Merge branch 'ui-improvments'

parents 733c4975 5e46a754
Loading
Loading
Loading
Loading
Loading
+44 −41
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@
            <x>20</x>
            <y>30</y>
            <width>260</width>
            <height>91</height>
            <height>103</height>
           </rect>
          </property>
          <layout class="QGridLayout" name="gridLayout_2">
@@ -108,16 +108,6 @@
             </property>
            </widget>
           </item>
           <item row="1" column="1">
            <widget class="QLineEdit" name="ThreadlineEdit"/>
           </item>
           <item row="1" column="0">
            <widget class="QCheckBox" name="threadsCheckBox">
             <property name="text">
              <string>Number of threads</string>
             </property>
            </widget>
           </item>
           <item row="2" column="0">
            <widget class="QCheckBox" name="regexCheckBox">
             <property name="text">
@@ -135,6 +125,23 @@
             </property>
            </widget>
           </item>
           <item row="1" column="1">
            <widget class="QSpinBox" name="threadNumberSpin">
             <property name="minimum">
              <number>1</number>
             </property>
            </widget>
           </item>
           <item row="1" column="0">
            <widget class="QLabel" name="label">
             <property name="layoutDirection">
              <enum>Qt::LeftToRight</enum>
             </property>
             <property name="text">
              <string>Number of threads</string>
             </property>
            </widget>
           </item>
          </layout>
         </widget>
        </widget>
@@ -182,45 +189,41 @@
             </property>
            </widget>
           </item>
           <item row="0" column="1">
            <widget class="QLineEdit" name="lengthLineEdit">
           <item row="0" column="0">
            <widget class="QLabel" name="lengthLabel">
             <property name="text">
              <string>8</string>
              <string>Min Length</string>
             </property>
            </widget>
           </item>
           <item row="1" column="1">
            <widget class="QLineEdit" name="specialLineEdit">
             <property name="text">
              <string>0</string>
           <item row="0" column="1">
            <widget class="QSpinBox" name="MinLenSpin">
             <property name="value">
              <number>8</number>
             </property>
            </widget>
           </item>
           <item row="1" column="1">
            <widget class="QSpinBox" name="MinOccSpecialSpin"/>
           </item>
           <item row="2" column="1">
            <widget class="QLineEdit" name="digitLineEdit">
             <property name="text">
              <string>1</string>
            <widget class="QSpinBox" name="MinOccDigitsSpin">
             <property name="value">
              <number>1</number>
             </property>
            </widget>
           </item>
           <item row="3" column="1">
            <widget class="QLineEdit" name="upperLineEdit">
             <property name="text">
              <string>1</string>
            <widget class="QSpinBox" name="MinOccUpperSpin">
             <property name="value">
              <number>1</number>
             </property>
            </widget>
           </item>
           <item row="4" column="1">
            <widget class="QLineEdit" name="lowerLineEdit">
             <property name="text">
              <string>1</string>
             </property>
            </widget>
           </item>
           <item row="0" column="0">
            <widget class="QLabel" name="lengthLabel">
             <property name="text">
              <string>Min Length</string>
            <widget class="QSpinBox" name="MinOccLowerSpin">
             <property name="value">
              <number>1</number>
             </property>
            </widget>
           </item>
@@ -239,7 +242,7 @@
            <x>20</x>
            <y>20</y>
            <width>301</width>
            <height>101</height>
            <height>107</height>
           </rect>
          </property>
          <layout class="QGridLayout" name="gridLayout_4">
@@ -257,9 +260,6 @@
             </property>
            </widget>
           </item>
           <item row="1" column="1">
            <widget class="QLineEdit" name="AdvancedlineEdit"/>
           </item>
           <item row="0" column="0">
            <widget class="QCheckBox" name="maxSimpleCheckBox">
             <property name="text">
@@ -268,10 +268,13 @@
            </widget>
           </item>
           <item row="0" column="1">
            <widget class="QLineEdit" name="SimplelineEdit"/>
            <widget class="QSpinBox" name="MaxSimpleMaxSpin"/>
           </item>
           <item row="1" column="1">
            <widget class="QSpinBox" name="MaxAdvMaskSpin"/>
           </item>
           <item row="2" column="1">
            <widget class="QLineEdit" name="topLineEdit"/>
            <widget class="QSpinBox" name="TopXAnswerSpin"/>
           </item>
          </layout>
         </widget>
@@ -376,7 +379,7 @@
     <x>0</x>
     <y>0</y>
     <width>1350</width>
     <height>22</height>
     <height>20</height>
    </rect>
   </property>
  </widget>
+6 −8
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ class MainWindow : public QMainWindow
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void setFilename(const std::string& filename);



@@ -45,12 +46,12 @@ public slots:

private:
    Ui::MainWindow *ui;
    Statsgen * stats;
    Statsgen stats;
    QMessageBox waitBox;
    QVBoxLayout * layoutCharset;
    QVBoxLayout * layoutLength;
    int firstTime=1;
    void initGraphicalStats(QBarSeries * barLength, QPieSeries * pieCharset, double & percentageTotal, double & percentageSecurity, double & total, double & filter);
    void initGraphicalStats(QBarSeries * barLength, QPieSeries * pieCharset, double & percentageTotal, double & percentageSecurity);
};


@@ -60,18 +61,15 @@ class WorkerThread : public QThread
    Q_OBJECT
    void run() {

        _s->generate_stats();
        _s.generate_stats();
        emit resultReady();
    }
public:
    WorkerThread(Statsgen *s)
    {
        _s=s;
    }
    WorkerThread(Statsgen &s):_s(s){}
signals:
    void resultReady();
private:
    Statsgen *_s;
    Statsgen &_s;
};

#endif // MAINWINDOW_H
+1 −0
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ struct thread_data {
 */
class Statsgen {
public:
	Statsgen(){}
	Statsgen(const std::string& name);

	/**
+4 −1
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@ int main(int argc, char *argv[])
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    // set file if given on cmd line
    if(argc >= 2){
    	w.setFilename(argv[1]);
    }
    return a.exec();
}
+58 −63
Original line number Diff line number Diff line
@@ -32,6 +32,10 @@ MainWindow::MainWindow(QWidget *parent) :
    connect(ui->classicButton,SIGNAL(clicked()),this,SLOT(disableWithCount()));
}

void MainWindow::setFilename(const string& filename){
    ui->fileLine->setText(QString::fromStdString(filename));
}


MainWindow::~MainWindow()
{
@@ -50,48 +54,44 @@ void MainWindow::findFile() {


void MainWindow::startGame() {
    stats = new Statsgen((ui->fileLine->text()).toUtf8().constData());
    stats = Statsgen((ui->fileLine->text()).toUtf8().constData());

    if(ui->withcountButton->isChecked())
    {
        stats->setWithcount(true);
        stats.setWithcount(true);
    }

    if(ui->threadsCheckBox->isChecked())
    {
    try
    {
            stats->setNbThread(stoi(ui->ThreadlineEdit->text().toStdString()));
        stats.setNbThread(stoi(ui->threadNumberSpin->text().toStdString()));
    }
    catch(invalid_argument)
    {
            stats->setNbThread(1);
        stats.setNbThread(1);
    }
    catch(out_of_range)
    {
            stats->setNbThread(1);
        }

        stats.setNbThread(1);
    }

    if(ui->regexCheckBox->isChecked())
    {
        stats->setRegex(ui->RegexlineEdit->text().toStdString());
        stats.setRegex(ui->RegexlineEdit->text().toStdString());
    }

    if(ui->maxSimpleCheckBox->isChecked())
    {
        try
        {
            stats->setLimitSimplemask(stoi(ui->SimplelineEdit->text().toStdString()));
            stats.setLimitSimplemask(stoi(ui->MaxSimpleMaxSpin->text().toStdString()));
        }
        catch(invalid_argument)
        {
            stats->setLimitSimplemask(100);
            stats.setLimitSimplemask(100);
        }
        catch(out_of_range)
        {
            stats->setLimitSimplemask(100);
            stats.setLimitSimplemask(100);
        }

    }
@@ -100,15 +100,15 @@ void MainWindow::startGame() {
    {
        try
        {
            stats->setLimitAdvancedmask(stoi(ui->AdvancedlineEdit->text().toStdString()));
            stats.setLimitAdvancedmask(stoi(ui->MaxAdvMaskSpin->text().toStdString()));
        }
        catch(invalid_argument)
        {
            stats->setLimitAdvancedmask(100);
            stats.setLimitAdvancedmask(100);
        }
        catch(out_of_range)
        {
            stats->setLimitAdvancedmask(100);
            stats.setLimitAdvancedmask(100);
        }

    }
@@ -117,59 +117,55 @@ void MainWindow::startGame() {
    {
        try
        {
            stats->setTop(stoi(ui->topLineEdit->text().toStdString()));
            stats.setTop(stoi(ui->TopXAnswerSpin->text().toStdString()));
        }
        catch(invalid_argument)
        {
            stats->setTop(10);
            stats.setTop(10);
        }
        catch(out_of_range)
        {
            stats->setTop(10);
            stats.setTop(10);
        }

    }

    try
    {
        int length=stoi(ui->lengthLineEdit->text().toStdString());
        int special=stoi(ui->specialLineEdit->text().toStdString());
        int digit=stoi(ui->digitLineEdit->text().toStdString());
        int upper=stoi(ui->upperLineEdit->text().toStdString());
        int lower=stoi(ui->lowerLineEdit->text().toStdString());
        int length=stoi(ui->MinLenSpin->text().toStdString());
        int special=stoi(ui->MinOccSpecialSpin->text().toStdString());
        int digit=stoi(ui->MinOccDigitsSpin->text().toStdString());
        int upper=stoi(ui->MinOccUpperSpin->text().toStdString());
        int lower=stoi(ui->MinOccLowerSpin->text().toStdString());

        stats->setSecurityRules(length,special,digit,upper,lower);
        stats.setSecurityRules(length,special,digit,upper,lower);
    }
    catch(invalid_argument)
    {
        stats->setSecurityRules(8,0,1,1,1);
        stats.setSecurityRules(8,0,1,1,1);
    }
    catch(out_of_range)
    {
        stats->setSecurityRules(8,0,1,1,1);
        stats.setSecurityRules(8,0,1,1,1);
    }

    ui->ThreadlineEdit->setDisabled(true);
    ui->topLineEdit->setDisabled(true);
    ui->SimplelineEdit->setDisabled(true);
    ui->AdvancedlineEdit->setDisabled(true);
    ui->threadNumberSpin->setDisabled(true);
    ui->TopXAnswerSpin->setDisabled(true);
    ui->MaxSimpleMaxSpin->setDisabled(true);
    ui->MaxAdvMaskSpin->setDisabled(true);
    ui->RegexlineEdit->setDisabled(true);
    ui->lengthLineEdit->setDisabled(true);
    ui->lowerLineEdit->setDisabled(true);
    ui->upperLineEdit->setDisabled(true);
    ui->specialLineEdit->setDisabled(true);
    ui->digitLineEdit->setDisabled(true);
    ui->MinLenSpin->setDisabled(true);
    ui->MinOccLowerSpin->setDisabled(true);
    ui->MinOccUpperSpin->setDisabled(true);
    ui->MinOccSpecialSpin->setDisabled(true);
    ui->MinOccDigitsSpin->setDisabled(true);
    ui->startButton->setDisabled(true);
    ui->threadsCheckBox->setDisabled(true);
    ui->topCheckBox->setDisabled(true);
    ui->regexCheckBox->setDisabled(true);
    ui->maxAdvancedCheckBox->setDisabled(true);
    ui->maxSimpleCheckBox->setDisabled(true);


    // delete layoutCharset;
    delete layoutLength;

    WorkerThread *workerThread = new WorkerThread(stats);
    connect(workerThread, SIGNAL(resultReady()), this, SLOT(handleResults()));
    connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater()));
@@ -190,14 +186,14 @@ void MainWindow::disableWithCount()
    ui->withcountButton->setChecked(false);
}

void MainWindow::initGraphicalStats(QBarSeries * barLength, QPieSeries * pieCharset, double & percentageTotal, double & percentageSecurity, double & total, double & filter) {
    total = stats->getTotalCounter();
    filter = stats->getTotalFilter();
void MainWindow::initGraphicalStats(QBarSeries * barLength, QPieSeries * pieCharset, double & percentageTotal, double & percentageSecurity) {
    double total = stats.getTotalCounter();
    double filter = stats.getTotalFilter();
    percentageTotal = (double) 100 * (filter / total);
    percentageSecurity = (double) 100 * (stats->getNbSecurePasswords() / total);
    percentageSecurity = (double) 100 * (stats.getNbSecurePasswords() / total);

    /* LENGTH HISTOGRAM */
    multimap<uint64_t, int> reverseL = flip_map<int>(stats->getStatsLength());
    multimap<uint64_t, int> reverseL = flip_map<int>(stats.getStatsLength());
    double percentageL;
    uint64_t nbHideL = 0;

@@ -221,7 +217,7 @@ void MainWindow::initGraphicalStats(QBarSeries * barLength, QPieSeries * pieChar


    /* CHARSET PIECHART */
    multimap<uint64_t, string> reverseC = flip_map<string>(stats->getStatsCharsets());
    multimap<uint64_t, string> reverseC = flip_map<string>(stats.getStatsCharsets());
    int top = 0;
    uint64_t nbHideC = 0;

@@ -244,18 +240,17 @@ void MainWindow::handleResults()
    waitBox.close();
    ui->charsetWidget->setHidden(false);
    ui->lengthWidget->show();
    ui->ThreadlineEdit->setDisabled(false);
    ui->topLineEdit->setDisabled(false);
    ui->SimplelineEdit->setDisabled(false);
    ui->AdvancedlineEdit->setDisabled(false);
    ui->threadNumberSpin->setDisabled(false);
    ui->TopXAnswerSpin->setDisabled(false);
    ui->MaxSimpleMaxSpin->setDisabled(false);
    ui->MaxAdvMaskSpin->setDisabled(false);
    ui->RegexlineEdit->setDisabled(false);
    ui->lengthLineEdit->setDisabled(false);
    ui->lowerLineEdit->setDisabled(false);
    ui->upperLineEdit->setDisabled(false);
    ui->specialLineEdit->setDisabled(false);
    ui->digitLineEdit->setDisabled(false);
    ui->MinLenSpin->setDisabled(false);
    ui->MinOccLowerSpin->setDisabled(false);
    ui->MinOccUpperSpin->setDisabled(false);
    ui->MinOccSpecialSpin->setDisabled(false);
    ui->MinOccDigitsSpin->setDisabled(false);
    ui->startButton->setDisabled(false);
    ui->threadsCheckBox->setDisabled(false);
    ui->topCheckBox->setDisabled(false);
    ui->regexCheckBox->setDisabled(false);
    ui->maxAdvancedCheckBox->setDisabled(false);
@@ -264,9 +259,9 @@ void MainWindow::handleResults()

    QBarSeries * barLength = new QBarSeries();
    QPieSeries * pieCharset = new QPieSeries();
    double percentageTotal, percentageSecurity, total_counter, total_filter;
    double percentageTotal, percentageSecurity;

    initGraphicalStats(barLength, pieCharset, percentageTotal, percentageSecurity, total_counter, total_filter);
    initGraphicalStats(barLength, pieCharset, percentageTotal, percentageSecurity);



@@ -308,16 +303,16 @@ void MainWindow::handleResults()
    /* LABELS */

    ui->AnalyzedLabel->setText("Number of analyzed passwords: "
                               + QString::number(total_filter)
                               + QString::number(stats.getTotalFilter(), 'g', 2)
                               + " on a total of "
                               + QString::number(total_counter)
                               + " passwords (" + QString::number(percentageTotal, 'f', 2) + "%)");
                               + QString::number(stats.getTotalFilter(), 'g', 2)
                               + " passwords (" + QString::number(percentageTotal, 'g', 1) + "%)");


    ui->securityLabel->setText("--> " + QString::number(percentageSecurity, 'f', 2)
    ui->securityLabel->setText("--> " + QString::number(percentageSecurity, 'g', 2)
                               + "% of the passwords respects the security rules");

    stats->print_stats();
    stats.print_stats();

    ui->resultLabel->setText("For more detailed statistics, check the file \"result.txt\"");
}
 No newline at end of file