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