Skip to content

Commit 3aef992

Browse files
committed
Rerun CardEventMonitorThread after verify PIN failed
WE2-1136 Signed-off-by: Raul Metsma <[email protected]>
1 parent 1cab9e2 commit 3aef992

File tree

8 files changed

+41
-46
lines changed

8 files changed

+41
-46
lines changed

src/controller/command-handlers/authenticate.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ class Authenticate : public CertificateReader
3535
QVariantMap onConfirm(WebEidUI* window,
3636
const EidCertificateAndPinInfo& certAndPinInfo) override;
3737

38-
signals:
39-
void verifyPinFailed(const electronic_id::VerifyPinFailed::Status status,
40-
const qint8 retriesLeft);
41-
4238
private:
4339
QString challengeNonce;
4440
};

src/controller/command-handlers/sign.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ class Sign : public CertificateReader
3737

3838
signals:
3939
void signingCertificateMismatch();
40-
void verifyPinFailed(const electronic_id::VerifyPinFailed::Status status,
41-
const qint8 retriesLeft);
4240

4341
private:
4442
void

src/controller/commandhandler.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class CommandHandler : public QObject
4545
void multipleCertificatesReady(const QUrl& origin,
4646
const std::vector<EidCertificateAndPinInfo>& certAndPinInfos);
4747
void singleCertificateReady(const QUrl& origin, const EidCertificateAndPinInfo& certAndPinInfo);
48+
void verifyPinFailed(electronic_id::VerifyPinFailed::Status status, qint8 retriesLeft);
4849

4950
protected:
5051
CommandHandler(const CommandWithArguments& cmd) : command(cmd) {}

src/controller/controller.cpp

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -160,25 +160,22 @@ void Controller::onCardsAvailable(
160160
}
161161
}
162162

163-
void Controller::runCommandHandler(const std::vector<ElectronicID::ptr>& availableEids)
164-
{
165-
try {
166-
auto* commandHandlerRunThread =
167-
new CommandHandlerRunThread(this, *commandHandler, availableEids);
168-
connectRetry(commandHandlerRunThread);
169-
170-
// When the command handler run thread retrieves certificates successfully, call
171-
// onCertificatesLoaded() that starts card event monitoring while user enters the PIN.
172-
connect(commandHandler.get(), &CommandHandler::singleCertificateReady, this,
173-
&Controller::onCertificatesLoaded);
174-
connect(commandHandler.get(), &CommandHandler::multipleCertificatesReady, this,
175-
&Controller::onCertificatesLoaded);
176-
177-
commandHandlerRunThread->start();
178-
179-
} catch (const std::exception& error) {
180-
onCriticalFailure(error.what());
181-
}
163+
void Controller::runCommandHandler(std::vector<ElectronicID::ptr> availableEids) noexcept
164+
try {
165+
auto* commandHandlerRunThread =
166+
new CommandHandlerRunThread(this, *commandHandler, std::move(availableEids));
167+
connectRetry(commandHandlerRunThread);
168+
169+
// When the command handler run thread retrieves certificates successfully, call
170+
// onCertificatesLoaded() that starts card event monitoring while user enters the PIN.
171+
connect(commandHandler.get(), &CommandHandler::singleCertificateReady, this,
172+
&Controller::onCertificatesLoaded);
173+
connect(commandHandler.get(), &CommandHandler::multipleCertificatesReady, this,
174+
&Controller::onCertificatesLoaded);
175+
176+
commandHandlerRunThread->start();
177+
} catch (const std::exception& error) {
178+
onCriticalFailure(error.what());
182179
}
183180

184181
void Controller::onCertificatesLoaded()
@@ -202,22 +199,22 @@ void Controller::disposeUI()
202199
}
203200
}
204201

205-
void Controller::onConfirmCommandHandler(const EidCertificateAndPinInfo& certAndPinInfo)
206-
{
202+
void Controller::onConfirmCommandHandler(const EidCertificateAndPinInfo& certAndPinInfo) noexcept
203+
try {
207204
emit stopCardEventMonitorThread();
208205

209-
try {
210-
auto* commandHandlerConfirmThread =
211-
new CommandHandlerConfirmThread(this, *commandHandler, window, certAndPinInfo);
212-
connect(commandHandlerConfirmThread, &CommandHandlerConfirmThread::completed, this,
213-
&Controller::onCommandHandlerConfirmCompleted);
214-
connectRetry(commandHandlerConfirmThread);
206+
auto* commandHandlerConfirmThread =
207+
new CommandHandlerConfirmThread(this, *commandHandler, window, certAndPinInfo);
208+
connect(commandHandlerConfirmThread, &CommandHandlerConfirmThread::completed, this,
209+
&Controller::onCommandHandlerConfirmCompleted);
210+
connectRetry(commandHandlerConfirmThread);
211+
connect(commandHandler.get(), &CommandHandler::verifyPinFailed, this,
212+
&Controller::onCertificatesLoaded);
215213

216-
commandHandlerConfirmThread->start();
214+
commandHandlerConfirmThread->start();
217215

218-
} catch (const std::exception& error) {
219-
onCriticalFailure(error.what());
220-
}
216+
} catch (const std::exception& error) {
217+
onCriticalFailure(error.what());
221218
}
222219

223220
void Controller::onCommandHandlerConfirmCompleted(const QVariantMap& res)
@@ -258,7 +255,7 @@ void Controller::onRetry()
258255
}
259256
}
260257

261-
void Controller::connectRetry(const ControllerChildThread* childThread)
258+
void Controller::connectRetry(const ControllerChildThread* childThread) const
262259
{
263260
REQUIRE_NON_NULL(childThread)
264261
connect(childThread, &ControllerChildThread::failure, this, &Controller::onCriticalFailure);

src/controller/controller.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class Controller : public QObject
5252
void onCertificatesLoaded();
5353

5454
// Called either directly from onDialogOK().
55-
void onConfirmCommandHandler(const EidCertificateAndPinInfo& certAndPinInfo);
55+
void onConfirmCommandHandler(const EidCertificateAndPinInfo& certAndPinInfo) noexcept;
5656

5757
// Called from CommandHandlerConfirm thread.
5858
void onCommandHandlerConfirmCompleted(const QVariantMap& result);
@@ -69,8 +69,8 @@ class Controller : public QObject
6969

7070
private:
7171
void startCommandExecution();
72-
void runCommandHandler(const std::vector<electronic_id::ElectronicID::ptr>& availableEids);
73-
void connectRetry(const ControllerChildThread* childThread);
72+
void runCommandHandler(std::vector<electronic_id::ElectronicID::ptr> availableEids) noexcept;
73+
void connectRetry(const ControllerChildThread* childThread) const;
7474
void createWindow();
7575
void disposeUI();
7676
void exit();

src/controller/threads/commandhandlerrunthread.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ class CommandHandlerRunThread : public ControllerChildThread
3030

3131
public:
3232
CommandHandlerRunThread(QObject* parent, CommandHandler& handler,
33-
const std::vector<electronic_id::ElectronicID::ptr>& eids) :
34-
ControllerChildThread(handler.commandType(), parent), commandHandler(handler), eids(eids)
33+
std::vector<electronic_id::ElectronicID::ptr> eids) noexcept :
34+
ControllerChildThread(handler.commandType(), parent), commandHandler(handler),
35+
eids(std::move(eids))
3536
{
3637
// Connect retry signal to retry signal to pass it up from the command handler.
3738
connect(&commandHandler, &CommandHandler::retry, this, &ControllerChildThread::retry);

src/ui/webeiddialog.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ WebEidDialog::WebEidDialog(QWidget* parent) : WebEidUI(parent), ui(new Private)
171171
if (auto* button =
172172
qobject_cast<CertificateButton*>(ui->selectionGroup->checkedButton())) {
173173
ui->lockedWarning->setHidden(button->certificateInfo().cardActive);
174-
ui->okButton->setEnabled(currentCommand == CommandType::AUTHENTICATE || button->certificateInfo().cardActive);
174+
ui->okButton->setEnabled(currentCommand == CommandType::AUTHENTICATE
175+
|| button->certificateInfo().cardActive);
175176
}
176177
ui->okButton->setFocus();
177178
});
@@ -666,7 +667,8 @@ void WebEidDialog::setupPinPadProgressBarAndEmitWait(const EidCertificateAndPinI
666667
void WebEidDialog::setupPinInput(const EidCertificateAndPinInfo& certAndPinInfo)
667668
{
668669
ui->lockedWarning->setHidden(certAndPinInfo.cardActive);
669-
setupPinPrompt(certAndPinInfo.pinInfo, currentCommand == CommandType::AUTHENTICATE || certAndPinInfo.cardActive);
670+
setupPinPrompt(certAndPinInfo.pinInfo,
671+
currentCommand == CommandType::AUTHENTICATE || certAndPinInfo.cardActive);
670672
// The allowed character ranges are from the SafeNet eToken guide:
671673
// 1. English uppercase letters (ASCII 0x41...0x5A).
672674
// 2. English lowercase letters (ASCII 0x61...0x7A).

0 commit comments

Comments
 (0)