PRCYCoin  2.0.0.7rc1
P2P Digital Currency
2faconfirmdialog.cpp
Go to the documentation of this file.
1 #include "2faconfirmdialog.h"
2 #include "ui_2faconfirmdialog.h"
3 #include "receiverequestdialog.h"
4 #include "qgoogleauth.h"
5 #include "init.h"
6 
7 #include <QDateTime>
8 
10  QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint),
11  ui(new Ui::TwoFAConfirmDialog)
12 {
13  ui->setupUi(this);
14 
15  ui->txtcode_7->setVisible(false);
16  ui->txtcode_8->setVisible(false);
17 
18  QIntValidator *intVal_1 = new QIntValidator(0, 9, ui->txtcode_1);
19  intVal_1->setLocale(QLocale::C);
20  ui->txtcode_1->setValidator(intVal_1);
21  ui->txtcode_1->setAlignment(Qt::AlignCenter);
22 
23  QIntValidator *intVal_2 = new QIntValidator(0, 9, ui->txtcode_2);
24  intVal_2->setLocale(QLocale::C);
25  ui->txtcode_2->setValidator(intVal_2);
26  ui->txtcode_2->setAlignment(Qt::AlignCenter);
27 
28  QIntValidator *intVal_3 = new QIntValidator(0, 9, ui->txtcode_3);
29  intVal_3->setLocale(QLocale::C);
30  ui->txtcode_3->setValidator(intVal_3);
31  ui->txtcode_3->setAlignment(Qt::AlignCenter);
32 
33  QIntValidator *intVal_4 = new QIntValidator(0, 9, ui->txtcode_4);
34  intVal_4->setLocale(QLocale::C);
35  ui->txtcode_4->setValidator(intVal_4);
36  ui->txtcode_4->setAlignment(Qt::AlignCenter);
37 
38  QIntValidator *intVal_5 = new QIntValidator(0, 9, ui->txtcode_5);
39  intVal_5->setLocale(QLocale::C);
40  ui->txtcode_5->setValidator(intVal_5);
41  ui->txtcode_5->setAlignment(Qt::AlignCenter);
42 
43  QIntValidator *intVal_6 = new QIntValidator(0, 9, ui->txtcode_6);
44  intVal_6->setLocale(QLocale::C);
45  ui->txtcode_6->setValidator(intVal_6);
46  ui->txtcode_6->setAlignment(Qt::AlignCenter);
47 
48  QSettings settings;
49  int digits = settings.value("2fadigits").toInt();
50  if (digits == 8) {
51  ui->label->setText("Please enter an eight digit 2FA code:");
52  ui->txtcode_7->setVisible(true);
53  ui->txtcode_8->setVisible(true);
54 
55  QIntValidator *intVal_7 = new QIntValidator(0, 9, ui->txtcode_7);
56  intVal_7->setLocale(QLocale::C);
57  ui->txtcode_7->setValidator(intVal_7);
58  ui->txtcode_7->setAlignment(Qt::AlignCenter);
59 
60  QIntValidator *intVal_8 = new QIntValidator(0, 9, ui->txtcode_8);
61  intVal_8->setLocale(QLocale::C);
62  ui->txtcode_8->setValidator(intVal_8);
63  ui->txtcode_8->setAlignment(Qt::AlignCenter);
64  }
65 
66 
67  connect(ui->btnOK, SIGNAL(clicked()), this, SLOT(on_acceptCode()));
68  connect(ui->btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
69  connect(ui->txtcode_1, &QLineEdit::textChanged, this, &TwoFAConfirmDialog::codeChanged);
70  connect(ui->txtcode_2, &QLineEdit::textChanged, this, &TwoFAConfirmDialog::codeChanged);
71  connect(ui->txtcode_3, &QLineEdit::textChanged, this, &TwoFAConfirmDialog::codeChanged);
72  connect(ui->txtcode_4, &QLineEdit::textChanged, this, &TwoFAConfirmDialog::codeChanged);
73  connect(ui->txtcode_5, &QLineEdit::textChanged, this, &TwoFAConfirmDialog::codeChanged);
74  connect(ui->txtcode_6, &QLineEdit::textChanged, this, &TwoFAConfirmDialog::codeChanged);
75  connect(ui->txtcode_7, &QLineEdit::textChanged, this, &TwoFAConfirmDialog::codeChanged);
76  connect(ui->txtcode_8, &QLineEdit::textChanged, this, &TwoFAConfirmDialog::codeChanged);
77 
78 }
79 
81 {
82  delete ui;
83 }
84 
86 {
87  QString code;
88  char code1, code2, code3, code4, code5, code6, code7, code8;
89  QString input;
90  char* chrlist;
91  QRegExp re("\\d*"); // a digit (\d), zero or more times (*)
92  input = ui->txtcode_1->text();
93  if (input.length() > 1)
94  return;
95  if (!re.exactMatch(input))
96  return;
97  chrlist = input.toUtf8().data();
98  code1 = chrlist[0];
99 
100  input = ui->txtcode_2->text();
101  if (input.length() > 1)
102  return;
103  if (!re.exactMatch(input))
104  return;
105  chrlist = input.toUtf8().data();
106  code2 = chrlist[0];
107 
108  input = ui->txtcode_3->text();
109  if (input.length() > 1)
110  return;
111  if (!re.exactMatch(input))
112  return;
113  chrlist = input.toUtf8().data();
114  code3 = chrlist[0];
115 
116  input = ui->txtcode_4->text();
117  if (input.length() > 1)
118  return;
119  if (!re.exactMatch(input))
120  return;
121  chrlist = input.toUtf8().data();
122  code4 = chrlist[0];
123 
124  input = ui->txtcode_5->text();
125  if (input.length() > 1)
126  return;
127  if (!re.exactMatch(input))
128  return;
129  chrlist = input.toUtf8().data();
130  code5 = chrlist[0];
131 
132  input = ui->txtcode_6->text();
133  if (input.length() > 1)
134  return;
135  if (!re.exactMatch(input))
136  return;
137  chrlist = input.toUtf8().data();
138  code6 = chrlist[0];
139 
140  input = ui->txtcode_7->text();
141  if (input.length() > 1)
142  return;
143  if (!re.exactMatch(input))
144  return;
145  chrlist = input.toUtf8().data();
146  code7 = chrlist[0];
147 
148  input = ui->txtcode_8->text();
149  if (input.length() > 1)
150  return;
151  if (!re.exactMatch(input))
152  return;
153  chrlist = input.toUtf8().data();
154  code8 = chrlist[0];
155 
156  QSettings settings;
157  int digits = settings.value("2fadigits").toInt();
158  if (digits == 8) {
159  code.sprintf("%c%c%c%c%c%c%c%c", code1, code2, code3, code4, code5, code6, code7, code8);
160  } else if (digits == 6) {
161  code.sprintf("%c%c%c%c%c%c", code1, code2, code3, code4, code5, code6);
162  }
163 
164  QString result = "";
165  QString secret = QString::fromStdString(pwalletMain->Read2FASecret());
166  result = QGoogleAuth::generatePin(secret.toUtf8());
167 
168  if (result != code) {
169  QMessageBox::critical(this, tr("Wrong 2FA Code"),
170  tr("Incorrect 2FA code entered.\nPlease try again."));
171  return;
172  }
173 
174  accept();
175 }
176 
177 void TwoFAConfirmDialog::codeChanged(const QString & txt) {
178  this->focusNextChild();
179 }
TwoFAConfirmDialog
Definition: 2faconfirmdialog.h:11
TwoFAConfirmDialog::~TwoFAConfirmDialog
~TwoFAConfirmDialog()
Definition: 2faconfirmdialog.cpp:80
init.h
TwoFAConfirmDialog::ui
Ui::TwoFAConfirmDialog * ui
Definition: 2faconfirmdialog.h:24
2faconfirmdialog.h
Ui
Definition: 2faconfirmdialog.h:7
CWallet::Read2FASecret
std::string Read2FASecret()
Definition: wallet.cpp:388
TwoFAConfirmDialog::TwoFAConfirmDialog
TwoFAConfirmDialog(QWidget *parent=0)
Definition: 2faconfirmdialog.cpp:9
TwoFAConfirmDialog::codeChanged
void codeChanged(const QString &txt)
Definition: 2faconfirmdialog.cpp:177
TwoFAConfirmDialog::settings
QSettings settings
Definition: 2faconfirmdialog.h:25
pwalletMain
CWallet * pwalletMain
Definition: wallet.cpp:49
receiverequestdialog.h
QGoogleAuth::generatePin
static QString generatePin(const QByteArray key)
Definition: qgoogleauth.cpp:86
TwoFAConfirmDialog::on_acceptCode
void on_acceptCode()
Definition: 2faconfirmdialog.cpp:85
qgoogleauth.h