Skip to content

Commit 8c22e7b

Browse files
committed
Fix PUK message with Omnikey PinPad
IB-8774 Signed-off-by: Raul Metsma <[email protected]>
1 parent d086099 commit 8c22e7b

File tree

9 files changed

+247
-322
lines changed

9 files changed

+247
-322
lines changed

client/MainWindow.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ class MainWindow final : public QWidget
8383
template <typename F>
8484
void sign(F &&sign);
8585
bool validateFiles(const QString &container, const QStringList &files);
86-
void showPinBlockedWarning(const QSmartCardData &data);
8786
void updateSelector();
8887
void updateSelectorData(TokenData data);
8988
void updateMyEID(const TokenData &t);

client/MainWindow_MyEID.cpp

Lines changed: 32 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -34,89 +34,8 @@ using namespace ria::qdigidoc4;
3434

3535
void MainWindow::changePinClicked(QSmartCardData::PinType type, QSmartCard::PinAction action)
3636
{
37-
QSmartCardData::PinType src = type;
38-
QSmartCard::ErrorType err;
39-
if(action == QSmartCard::ChangeWithPin || action == QSmartCard::ActivateWithPin)
40-
err = qApp->signer()->smartcard()->pinChange(type, action, this);
41-
else
42-
{
43-
src = QSmartCardData::PukType;
44-
err = qApp->signer()->smartcard()->pinUnblock(type, action, this);
45-
}
46-
QSmartCardData data = qApp->signer()->smartcard()->data();
47-
ui->accordion->updateInfo(data);
48-
switch(err)
49-
{
50-
using enum QSmartCard::ErrorType;
51-
case NoError:
52-
switch(action)
53-
{
54-
using enum QSmartCard::PinAction;
55-
case ActivateWithPin:
56-
case ActivateWithPuk:
57-
showPinBlockedWarning(data);
58-
Q_FALLTHROUGH();
59-
case ChangeWithPin:
60-
case ChangeWithPuk:
61-
return FadeInNotification::success(ui->topBar, tr("%1 changed!").arg(QSmartCardData::typeString(type)));
62-
case UnblockWithPuk:
63-
showPinBlockedWarning(data);
64-
return FadeInNotification::success(ui->topBar, tr("%1 has been changed and the certificate has been unblocked!")
65-
.arg(QSmartCardData::typeString(type)));
66-
}
67-
case BlockedError:
68-
showPinBlockedWarning(data);
69-
return FadeInNotification::warning(ui->topBar, tr("%1 blocked").arg(QSmartCardData::typeString(src)));
70-
case ValidateError:
71-
return FadeInNotification::warning(ui->topBar, tr("Wrong %1 code. You can try %n more time(s).", nullptr,
72-
data.retryCount(src)).arg(QSmartCardData::typeString(src)));
73-
case CancelError: break;
74-
case TimeoutError:
75-
return FadeInNotification::warning(ui->topBar, tr("%1 timeout").arg(QSmartCardData::typeString(type)));
76-
case DifferentError:
77-
return FadeInNotification::warning(ui->topBar, tr("New %1 codes doesn't match").arg(QSmartCardData::typeString(type)));
78-
case LenghtError:
79-
return FadeInNotification::warning(ui->topBar, tr("%1 length has to be between %2 and 12")
80-
.arg(QSmartCardData::typeString(type)).arg(QSmartCardData::minPinLen(type)));
81-
case OldNewPinSameError:
82-
return FadeInNotification::warning(ui->topBar, tr("Old and new %1 has to be different!").arg(QSmartCardData::typeString(type)));
83-
default:
84-
return FadeInNotification::warning(ui->topBar, tr("Changing %1 failed").arg(QSmartCardData::typeString(type)));
85-
}
86-
}
87-
88-
void MainWindow::showPinBlockedWarning(const QSmartCardData &data)
89-
{
90-
if(data.isNull())
91-
return;
92-
bool pin1Blocked = data.retryCount(QSmartCardData::Pin1Type) == 0;
93-
bool pin2Blocked = data.retryCount(QSmartCardData::Pin2Type) == 0;
94-
bool pin2Locked = data.pinLocked(QSmartCardData::Pin2Type);
95-
ui->myEid->warningIcon(
96-
pin1Blocked ||
97-
pin2Blocked || pin2Locked ||
98-
data.retryCount(QSmartCardData::PukType) == 0);
99-
ui->signContainerPage->cardChanged(data.signCert(), pin2Blocked || pin2Locked);
100-
ui->cryptoContainerPage->cardChanged(data.authCert(), pin1Blocked);
101-
102-
ui->warnings->closeWarning(WarningType::UnblockPin1Warning);
103-
ui->warnings->closeWarning(WarningType::ActivatePin1WithPUKWarning);
104-
if(pin1Blocked)
105-
ui->warnings->showWarning({WarningType::UnblockPin1Warning, 0,
106-
[this]{ changePinClicked(QSmartCardData::Pin1Type, QSmartCard::UnblockWithPuk); }});
107-
108-
ui->warnings->closeWarning(WarningType::UnblockPin2Warning);
109-
ui->warnings->closeWarning(WarningType::ActivatePin2WithPUKWarning);
110-
ui->warnings->closeWarning(WarningType::ActivatePin2Warning);
111-
if(pin2Locked && pin2Blocked)
112-
ui->warnings->showWarning({WarningType::ActivatePin2WithPUKWarning, 0,
113-
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPuk); }});
114-
else if(pin2Blocked)
115-
ui->warnings->showWarning({WarningType::UnblockPin2Warning, 0,
116-
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::UnblockWithPuk); }});
117-
else if(pin2Locked)
118-
ui->warnings->showWarning({WarningType::ActivatePin2Warning, 0,
119-
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPin); }});
37+
if(qApp->signer()->smartcard()->pinChange(type, action, ui->topBar))
38+
updateMyEid(qApp->signer()->smartcard()->data());
12039
}
12140

12241
void MainWindow::updateMyEID(const TokenData &t)
@@ -153,18 +72,42 @@ void MainWindow::updateMyEID(const TokenData &t)
15372
}
15473
}
15574

156-
void MainWindow::updateMyEid(const QSmartCardData &t)
75+
void MainWindow::updateMyEid(const QSmartCardData &data)
15776
{
158-
ui->warnings->clearMyEIDWarnings();
159-
ui->infoStack->update(t);
160-
ui->accordion->updateInfo(t);
77+
ui->infoStack->update(data);
78+
ui->accordion->updateInfo(data);
16179
ui->myEid->warningIcon(false);
16280
ui->myEid->invalidIcon(false);
163-
if(t.isNull())
81+
ui->warnings->clearMyEIDWarnings();
82+
if(data.isNull())
16483
return;
84+
bool pin1Blocked = data.retryCount(QSmartCardData::Pin1Type) == 0;
85+
bool pin2Blocked = data.retryCount(QSmartCardData::Pin2Type) == 0;
86+
bool pin2Locked = data.pinLocked(QSmartCardData::Pin2Type);
87+
ui->myEid->warningIcon(
88+
pin1Blocked ||
89+
pin2Blocked || pin2Locked ||
90+
data.retryCount(QSmartCardData::PukType) == 0);
91+
ui->signContainerPage->cardChanged(data.signCert(), pin2Blocked || pin2Locked);
92+
ui->cryptoContainerPage->cardChanged(data.authCert(), pin1Blocked);
93+
94+
if(pin1Blocked)
95+
ui->warnings->showWarning({WarningType::UnblockPin1Warning, 0,
96+
[this]{ changePinClicked(QSmartCardData::Pin1Type, QSmartCard::UnblockWithPuk); }});
97+
98+
if(pin2Locked && pin2Blocked)
99+
ui->warnings->showWarning({WarningType::ActivatePin2WithPUKWarning, 0,
100+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPuk); }});
101+
else if(pin2Blocked)
102+
ui->warnings->showWarning({WarningType::UnblockPin2Warning, 0,
103+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::UnblockWithPuk); }});
104+
else if(pin2Locked)
105+
ui->warnings->showWarning({WarningType::ActivatePin2Warning, 0,
106+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPin); }});
107+
165108
const qint64 DAY = 24 * 60 * 60;
166109
qint64 expiresIn = 106 * DAY;
167-
for(const QSslCertificate &cert: {t.authCert(), t.signCert()})
110+
for(const QSslCertificate &cert: {data.authCert(), data.signCert()})
168111
{
169112
if(!cert.isNull())
170113
expiresIn = std::min<qint64>(expiresIn, QDateTime::currentDateTime().secsTo(cert.expiryDate().toLocalTime()));
@@ -179,5 +122,4 @@ void MainWindow::updateMyEid(const QSmartCardData &t)
179122
ui->myEid->warningIcon(true);
180123
ui->warnings->showWarning({WarningType::CertExpiryWarning});
181124
}
182-
showPinBlockedWarning(t);
183125
}

client/QPCSC.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class QPCSCReader final: public QObject
5656
public:
5757
struct Result {
5858
QByteArray data;
59-
quint16 SW;
59+
quint16 SW = 0;
6060
quint32 err = 0;
6161
constexpr operator bool() const { return SW == 0x9000; }
6262
};

0 commit comments

Comments
 (0)