Skip to content

Commit 2a0fe56

Browse files
committed
Show locked card warning
IB-8631 Signed-off-by: Raul Metsma <raul@metsma.ee>
1 parent c680e2c commit 2a0fe56

File tree

13 files changed

+169
-147
lines changed

13 files changed

+169
-147
lines changed

client/Application.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -944,10 +944,9 @@ void Application::showClient(QStringList files, bool crypto, bool sign, bool new
944944
if(files.isEmpty())
945945
return;
946946
QMetaObject::invokeMethod(w, [&] {
947-
using enum ria::qdigidoc4::Pages;
948947
if(sign)
949948
sign = files.size() != 1 || !CONTAINER_EXT.contains(QFileInfo(files.value(0)).suffix(), Qt::CaseInsensitive);
950-
w->selectPage(crypto && !sign ? CryptoIntro : SignIntro);
949+
w->selectPage(crypto && !sign ? MainWindow::CryptoIntro : MainWindow::SignIntro);
951950
w->openFiles(std::move(files), false, sign);
952951
});
953952
}

client/MainWindow.cpp

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -709,27 +709,34 @@ void MainWindow::updateMyEid(const QSmartCardData &data)
709709
return;
710710
bool pin1Blocked = data.retryCount(QSmartCardData::Pin1Type) == 0;
711711
bool pin2Blocked = data.retryCount(QSmartCardData::Pin2Type) == 0;
712+
bool pin1Locked = data.pinLocked(QSmartCardData::Pin1Type);
712713
bool pin2Locked = data.pinLocked(QSmartCardData::Pin2Type);
713714
ui->myEid->warningIcon(
714-
pin1Blocked ||
715+
pin1Blocked || pin1Locked ||
715716
pin2Blocked || pin2Locked ||
716717
data.retryCount(QSmartCardData::PukType) == 0);
717718
ui->signContainerPage->cardChanged(data.signCert(), pin2Blocked || pin2Locked);
718-
ui->cryptoContainerPage->cardChanged(data.authCert(), pin1Blocked);
719-
720-
if(pin1Blocked)
721-
ui->warnings->showWarning({WarningType::UnblockPin1Warning, 0,
722-
[this]{ changePinClicked(QSmartCardData::Pin1Type, QSmartCard::UnblockWithPuk); }});
723-
724-
if(pin2Locked && pin2Blocked)
725-
ui->warnings->showWarning({WarningType::ActivatePin2WithPUKWarning, 0,
726-
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPuk); }});
727-
else if(pin2Blocked)
728-
ui->warnings->showWarning({WarningType::UnblockPin2Warning, 0,
729-
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::UnblockWithPuk); }});
730-
else if(pin2Locked)
731-
ui->warnings->showWarning({WarningType::ActivatePin2Warning, 0,
732-
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPin); }});
719+
ui->cryptoContainerPage->cardChanged(data.authCert(), pin1Blocked || pin1Locked);
720+
721+
using enum WarningText::WarningType;
722+
if(pin1Locked)
723+
ui->warnings->showWarning({LockedCardWarning});
724+
else
725+
{
726+
if(pin1Blocked)
727+
ui->warnings->showWarning({UnblockPin1Warning, 0,
728+
[this]{ changePinClicked(QSmartCardData::Pin1Type, QSmartCard::UnblockWithPuk); }});
729+
730+
if(pin2Locked && pin2Blocked)
731+
ui->warnings->showWarning({ActivatePin2WithPUKWarning, 0,
732+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPuk); }});
733+
else if(pin2Blocked)
734+
ui->warnings->showWarning({UnblockPin2Warning, 0,
735+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::UnblockWithPuk); }});
736+
else if(pin2Locked)
737+
ui->warnings->showWarning({ActivatePin2Warning, 0,
738+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPin); }});
739+
}
733740

734741
const qint64 DAY = 24 * 60 * 60;
735742
qint64 expiresIn = 106 * DAY;
@@ -741,12 +748,12 @@ void MainWindow::updateMyEid(const QSmartCardData &data)
741748
if(expiresIn <= 0)
742749
{
743750
ui->myEid->invalidIcon(true);
744-
ui->warnings->showWarning({WarningType::CertExpiredError});
751+
ui->warnings->showWarning({CertExpiredError});
745752
}
746753
else if(expiresIn <= 105 * DAY)
747754
{
748755
ui->myEid->warningIcon(true);
749-
ui->warnings->showWarning({WarningType::CertExpiryWarning});
756+
ui->warnings->showWarning({CertExpiryWarning});
750757
}
751758
}
752759

client/MainWindow.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,18 @@ class MainWindow final : public QWidget
3737
Q_OBJECT
3838

3939
public:
40+
enum Pages : unsigned char {
41+
SignIntro,
42+
SignDetails,
43+
CryptoIntro,
44+
CryptoDetails,
45+
MyEid
46+
};
4047
explicit MainWindow(QWidget *parent = nullptr);
4148
~MainWindow() final;
4249

4350
void openFiles(QStringList files, bool addFile = false, bool forceCreate = false);
44-
void selectPage(ria::qdigidoc4::Pages page);
51+
void selectPage(Pages page);
4552
void showSettings(int page);
4653

4754
protected:
@@ -60,7 +67,7 @@ class MainWindow final : public QWidget
6067
ria::qdigidoc4::ContainerState currentState();
6168
bool encrypt();
6269
void loadPicture();
63-
void navigateToPage( ria::qdigidoc4::Pages page, const QStringList &files = QStringList(), bool create = true );
70+
void navigateToPage(Pages page, const QStringList &files = QStringList(), bool create = true);
6471
void onCryptoAction(int action, const QString &id, const QString &phone);
6572
void onSignAction(int action, const QString &idCode, const QString &info2);
6673
void openContainer(bool signature);

client/common_enums.h

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -53,34 +53,4 @@ enum Actions : unsigned char {
5353
ClearCryptoWarning,
5454
};
5555

56-
enum Pages : unsigned char {
57-
SignIntro,
58-
SignDetails,
59-
CryptoIntro,
60-
CryptoDetails,
61-
MyEid
62-
};
63-
64-
enum WarningType : unsigned char {
65-
NoWarning = 0,
66-
67-
CertExpiredError,
68-
CertExpiryWarning,
69-
UnblockPin1Warning,
70-
UnblockPin2Warning,
71-
ActivatePin2Warning,
72-
ActivatePin1WithPUKWarning,
73-
ActivatePin2WithPUKWarning,
74-
75-
InvalidSignatureError,
76-
InvalidTimestampError,
77-
UnknownSignatureWarning,
78-
UnknownTimestampWarning,
79-
UnsupportedAsicSWarning,
80-
UnsupportedAsicCadesWarning,
81-
UnsupportedDDocWarning,
82-
UnsupportedCDocWarning,
83-
EmptyFileWarning,
84-
};
85-
8656
}

client/widgets/ContainerPage.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,13 +328,14 @@ void ContainerPage::transition(CryptoDoc *container, const QSslCertificate &cert
328328
ui->rightPane->addWidget(new AddressItem(std::move(key), AddressItem::Icon, ui->rightPane));
329329
}
330330
if(hasUnsupported)
331-
emit warning({UnsupportedCDocWarning});
331+
emit warning({WarningText::UnsupportedCDocWarning});
332332
ui->leftPane->setModel(container->documentModel());
333333
updatePanes(container->state());
334334
}
335335

336336
void ContainerPage::transition(DigiDoc* container)
337337
{
338+
using enum WarningText::WarningType;
338339
disconnect(ui->leftPane, &ItemList::removed, container, nullptr);
339340
connect(ui->leftPane, &ItemList::removed, container, [this, container](int index) {
340341
deleteConfirm(container, index);
@@ -386,7 +387,7 @@ void ContainerPage::transition(DigiDoc* container)
386387
});
387388

388389
clear(ClearSignatureWarning);
389-
std::map<ria::qdigidoc4::WarningType, int> errors;
390+
std::map<WarningText::WarningType, int> errors;
390391
setHeader(container->fileName());
391392
ui->leftPane->init(fileName, QT_TRANSLATE_NOOP("ItemList", "Container files"));
392393

client/widgets/SignatureItem.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct SignatureItem::Private: public Ui::SignatureItem
3434
{
3535
DigiDocSignature signature;
3636

37-
ria::qdigidoc4::WarningType error = ria::qdigidoc4::NoWarning;
37+
WarningText::WarningType error = WarningText::NoWarning;
3838
QString serial;
3939
QString roleText;
4040
};
@@ -77,8 +77,9 @@ void SignatureItem::init()
7777
{
7878
const SslCertificate cert = ui->signature.cert();
7979

80+
using enum WarningText::WarningType;
8081
ui->serial.clear();
81-
ui->error = ria::qdigidoc4::NoWarning;
82+
ui->error = NoWarning;
8283
QString nameText;
8384
if(!cert.isNull())
8485
{
@@ -120,12 +121,12 @@ void SignatureItem::init()
120121
case DigiDocSignature::Invalid:
121122
ui->status->setLabel(QStringLiteral("error"));
122123
ui->status->setText(isSignature ? tr("Signature is not valid") : tr("Timestamp is not valid"));
123-
ui->error = isSignature ? ria::qdigidoc4::InvalidSignatureError : ria::qdigidoc4::InvalidTimestampError;
124+
ui->error = isSignature ? InvalidSignatureError : InvalidTimestampError;
124125
break;
125126
case DigiDocSignature::Unknown:
126127
ui->status->setLabel(QStringLiteral("error"));
127128
ui->status->setText(isSignature ? tr("Signature is unknown") : tr("Timestamp is unknown"));
128-
ui->error = isSignature ? ria::qdigidoc4::UnknownSignatureWarning : ria::qdigidoc4::UnknownTimestampWarning;
129+
ui->error = isSignature ? UnknownSignatureWarning : UnknownTimestampWarning;
129130
break;
130131
}
131132

@@ -183,7 +184,7 @@ bool SignatureItem::eventFilter(QObject *o, QEvent *e)
183184
return Item::eventFilter(o, e);
184185
}
185186

186-
ria::qdigidoc4::WarningType SignatureItem::getError() const
187+
WarningText::WarningType SignatureItem::getError() const
187188
{
188189
return ui->error;
189190
}

client/widgets/SignatureItem.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
#include "widgets/Item.h"
2323

24+
#include "widgets/WarningItem.h"
25+
2426
class DigiDocSignature;
2527

2628
class SignatureItem final : public Item
@@ -31,7 +33,7 @@ class SignatureItem final : public Item
3133
explicit SignatureItem(DigiDocSignature s, QWidget *parent = nullptr);
3234
~SignatureItem() final;
3335

34-
ria::qdigidoc4::WarningType getError() const;
36+
WarningText::WarningType getError() const;
3537
void initTabOrder(QWidget *item) final;
3638
bool isSelfSigned(const QString& cardCode) const;
3739
QWidget* lastTabWidget() final;

client/widgets/VerifyCert.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ VerifyCert::VerifyCert(QWidget *parent)
4848
CertificateDetails::showCertificate(c, this,
4949
pinType == QSmartCardData::Pin1Type ? QStringLiteral("-auth") : QStringLiteral("-sign"));
5050
});
51-
connect(ui->checkCert, &QToolButton::clicked, this, [this]{
51+
connect(ui->checkCert, &QToolButton::clicked, this, [this] {
5252
auto *dlg = WarningDialog::create(this);
5353
QString readMore = tr("Read more <a href=\"https://www.id.ee/en/article/validity-of-id-card-certificates/\">here</a>.");
5454
switch(c.validateOnline())
@@ -118,17 +118,18 @@ void VerifyCert::update(QSmartCardData::PinType type, const QSmartCardData &data
118118
update();
119119
}
120120

121-
void VerifyCert::update(QSmartCardData::PinType type, const SslCertificate &cert)
121+
void VerifyCert::update(QSmartCardData::PinType type, SslCertificate cert)
122122
{
123123
pinType = type;
124-
c = cert;
124+
c = std::move(cert);
125125
update();
126126
}
127127

128128
void VerifyCert::update()
129129
{
130130
if(cardData.isNull() && c.isNull())
131131
return clear();
132+
bool isLockedCard = !cardData.isNull() && cardData.pinLocked(QSmartCardData::Pin1Type);
132133
bool isLockedPin = !cardData.isNull() && pinType == QSmartCardData::Pin2Type && cardData.pinLocked(pinType);
133134
bool isBlockedPin = !cardData.isNull() && cardData.retryCount(pinType) == 0;
134135
bool isBlockedPuk = !cardData.isNull() && cardData.retryCount(QSmartCardData::PukType) == 0;
@@ -183,6 +184,9 @@ void VerifyCert::update()
183184
{
184185
ui->validUntil->setText(tr("Certificate has expired!"));
185186
ui->validUntil->setLabel(QStringLiteral("error"));
187+
icon = QStringLiteral(":/images/icon_alert_large_error.svg");
188+
ui->info->setLabel(QStringLiteral("error"));
189+
ui->info->setText(tr("PIN%1 can not be used because the certificate has expired.").arg(pinType));
186190
}
187191
else if(qint64 leftDays = std::max<qint64>(0, QDateTime::currentDateTime().daysTo(c.expiryDate().toLocalTime())); leftDays <= 105 && !c.isNull())
188192
{
@@ -194,18 +198,20 @@ void VerifyCert::update()
194198

195199
ui->changePIN->setText(tr("Change PIN%1").arg(pinType));
196200
ui->forgotPinLink->setText(tr("Change with PUK code"));
197-
ui->changePIN->setHidden((isBlockedPin && isBlockedPuk) || isTempelType);
201+
ui->changePIN->setHidden(isLockedCard || (isBlockedPin && isBlockedPuk) || isTempelType);
198202

199203
if(isTempelType)
200204
{
201205
ui->info->setLabel({});
202206
ui->info->setText(tr("PIN can be changed only using eToken utility"));
203207
}
204-
else if(isInvalidCert)
208+
else if(isLockedCard)
205209
{
206-
icon = QStringLiteral(":/images/icon_alert_large_error.svg");
207-
ui->info->setLabel(QStringLiteral("error"));
208-
ui->info->setText(tr("PIN%1 can not be used because the certificate has expired.").arg(pinType));
210+
icon = QStringLiteral(":/images/icon_alert_large_warning.svg");
211+
ui->info->setLabel(QStringLiteral("warning"));
212+
ui->info->setText(pinType == QSmartCardData::Pin1Type ?
213+
tr("The ID-card must be activated in order to authenticate") :
214+
tr("The ID-card must be activated in order to sign"));
209215
}
210216
else if(isBlockedPin)
211217
{
@@ -234,9 +240,9 @@ void VerifyCert::update()
234240
if(!icon.isEmpty())
235241
ui->nameIcon->load(icon);
236242

237-
ui->links->setHidden(pinType == QSmartCardData::PukType && (isBlockedPuk || !isPUKReplacable)); // Keep visible in PUK to align fields equaly
243+
ui->links->setHidden(pinType == QSmartCardData::PukType && ui->changePIN->isHidden());
238244
ui->details->setHidden(pinType == QSmartCardData::PukType);
239-
ui->forgotPinLink->setHidden(pinType == QSmartCardData::PukType || isBlockedPin || isBlockedPuk || isTempelType);
245+
ui->forgotPinLink->setHidden(pinType == QSmartCardData::PukType || isLockedCard || isBlockedPin || isBlockedPuk || isTempelType);
240246
ui->checkCert->setHidden(pinType == QSmartCardData::PukType || isInvalidCert);
241247
}
242248

client/widgets/VerifyCert.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class VerifyCert final : public StyledWidget
3636

3737
void clear();
3838
void update(QSmartCardData::PinType type, const QSmartCardData &data);
39-
void update(QSmartCardData::PinType type, const SslCertificate &cert);
39+
void update(QSmartCardData::PinType type, SslCertificate cert);
4040

4141
signals:
4242
void changePinClicked(QSmartCard::PinAction);

0 commit comments

Comments
 (0)