Skip to content

Commit 2efbaeb

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

18 files changed

+238
-159
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: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ using namespace std::chrono;
5050

5151
MainWindow::MainWindow( QWidget *parent )
5252
: QWidget( parent )
53-
, ui( new Ui::MainWindow )
53+
, ui(std::make_unique<Ui::MainWindow>())
5454
{
5555
setAttribute(Qt::WA_DeleteOnClose, true);
5656
setAcceptDrops( true );
@@ -125,12 +125,7 @@ MainWindow::MainWindow( QWidget *parent )
125125
updateMyEid(qApp->signer()->smartcard()->data());
126126
}
127127

128-
MainWindow::~MainWindow()
129-
{
130-
digiDoc.reset();
131-
cryptoDoc.reset();
132-
delete ui;
133-
}
128+
MainWindow::~MainWindow() noexcept = default;
134129

135130
void MainWindow::adjustDrops()
136131
{
@@ -709,27 +704,34 @@ void MainWindow::updateMyEid(const QSmartCardData &data)
709704
return;
710705
bool pin1Blocked = data.retryCount(QSmartCardData::Pin1Type) == 0;
711706
bool pin2Blocked = data.retryCount(QSmartCardData::Pin2Type) == 0;
707+
bool pin1Locked = data.pinLocked(QSmartCardData::Pin1Type);
712708
bool pin2Locked = data.pinLocked(QSmartCardData::Pin2Type);
713709
ui->myEid->warningIcon(
714-
pin1Blocked ||
710+
pin1Blocked || pin1Locked ||
715711
pin2Blocked || pin2Locked ||
716712
data.retryCount(QSmartCardData::PukType) == 0);
717713
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); }});
714+
ui->cryptoContainerPage->cardChanged(data.authCert(), pin1Blocked || pin1Locked);
715+
716+
using enum WarningText::WarningType;
717+
if(pin1Locked)
718+
ui->warnings->showWarning({LockedCardWarning});
719+
else
720+
{
721+
if(pin1Blocked)
722+
ui->warnings->showWarning({UnblockPin1Warning, 0,
723+
[this]{ changePinClicked(QSmartCardData::Pin1Type, QSmartCard::UnblockWithPuk); }});
724+
725+
if(pin2Locked && pin2Blocked)
726+
ui->warnings->showWarning({ActivatePin2WithPUKWarning, 0,
727+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPuk); }});
728+
else if(pin2Blocked)
729+
ui->warnings->showWarning({UnblockPin2Warning, 0,
730+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::UnblockWithPuk); }});
731+
else if(pin2Locked)
732+
ui->warnings->showWarning({ActivatePin2Warning, 0,
733+
[this]{ changePinClicked(QSmartCardData::Pin2Type, QSmartCard::ActivateWithPin); }});
734+
}
733735

734736
const qint64 DAY = 24 * 60 * 60;
735737
qint64 expiresIn = 106 * DAY;
@@ -741,12 +743,12 @@ void MainWindow::updateMyEid(const QSmartCardData &data)
741743
if(expiresIn <= 0)
742744
{
743745
ui->myEid->invalidIcon(true);
744-
ui->warnings->showWarning({WarningType::CertExpiredError});
746+
ui->warnings->showWarning({CertExpiredError});
745747
}
746748
else if(expiresIn <= 105 * DAY)
747749
{
748750
ui->myEid->warningIcon(true);
749-
ui->warnings->showWarning({WarningType::CertExpiryWarning});
751+
ui->warnings->showWarning({CertExpiryWarning});
750752
}
751753
}
752754

client/MainWindow.h

Lines changed: 11 additions & 5 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);
41-
~MainWindow() final;
48+
~MainWindow() noexcept 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:
@@ -59,8 +66,7 @@ class MainWindow final : public QWidget
5966
void convertToCDoc();
6067
ria::qdigidoc4::ContainerState currentState();
6168
bool encrypt();
62-
void loadPicture();
63-
void navigateToPage( ria::qdigidoc4::Pages page, const QStringList &files = QStringList(), bool create = true );
69+
void navigateToPage(Pages page, const QStringList &files = QStringList(), bool create = true);
6470
void onCryptoAction(int action, const QString &id, const QString &phone);
6571
void onSignAction(int action, const QString &idCode, const QString &info2);
6672
void openContainer(bool signature);
@@ -78,5 +84,5 @@ class MainWindow final : public QWidget
7884

7985
std::unique_ptr<CryptoDoc> cryptoDoc;
8086
std::unique_ptr<DigiDoc> digiDoc;
81-
Ui::MainWindow *ui;
87+
std::unique_ptr<Ui::MainWindow> ui;
8288
};

client/QSmartCard.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,10 @@ bool THALESCard::updateCounters(QSmartCardDataPrivate *d) const
480480
{
481481
d->retry[QSmartCardData::PinType(type)] = quint8(retry.data[0]);
482482
auto changed = info[0xDF2F];
483-
d->locked[QSmartCardData::PinType(type)] = changed && changed.data[0] == 0;
483+
d->locked[QSmartCardData::PinType(type)] = (changed && changed.data[0] == 0);
484+
// FIXME: remove from production
485+
if (type == QSmartCardData::Pin1Type && qEnvironmentVariableIsSet("PIN1_LOCKED"))
486+
d->locked[QSmartCardData::PinType(type)] = true;
484487
}
485488
else
486489
return false;

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/dialogs/MobileProgress.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@ bool MobileProgress::init(const QString &ssid, const QString &cell)
228228
if(!d->UUID.isEmpty() && QUuid(d->UUID).isNull())
229229
{
230230
WarningDialog::create(d->parentWidget())
231-
->withTitle(QCoreApplication::translate("DigiDoc", "Failed to sign container"))
232231
->withText(tr("Failed to send request. Check your %1 service access settings.").arg(tr("mobile-ID")))
232+
->withTitle(QCoreApplication::translate("DigiDoc", "Failed to sign container"))
233233
->open();
234234
return false;
235235
}

client/translations/en.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2922,6 +2922,14 @@ Additional licenses and components</translation>
29222922
<source>Please check your internet connection.</source>
29232923
<translation>Please check your internet connection.</translation>
29242924
</message>
2925+
<message>
2926+
<source>The ID-card must be activated in order to authenticate</source>
2927+
<translation>The ID-card must be activated in order to authenticate</translation>
2928+
</message>
2929+
<message>
2930+
<source>The ID-card must be activated in order to sign</source>
2931+
<translation>The ID-card must be activated in order to sign</translation>
2932+
</message>
29252933
<message>
29262934
<source>PIN%1 has been blocked because PIN%1 code has been entered incorrectly 3 times.</source>
29272935
<translation>PIN%1 has been blocked because PIN%1 code has been entered incorrectly 3 times.</translation>
@@ -3040,6 +3048,18 @@ Additional licenses and components</translation>
30403048
<source>https://www.id.ee/en/article/changing-id-card-pin-codes-and-puk-code/</source>
30413049
<translation>https://www.id.ee/en/article/changing-id-card-pin-codes-and-puk-code/</translation>
30423050
</message>
3051+
<message>
3052+
<source>Authentication and signing with the ID-card isn&apos;t possible yet. ID-card must be activated in the Police and Border Guard Board’s self-service portal in order to use it.</source>
3053+
<translation>Authentication and signing with the ID-card isn&apos;t possible yet. ID-card must be activated in the Police and Border Guard Board’s self-service portal in order to use it.</translation>
3054+
</message>
3055+
<message>
3056+
<source>Activate ID-card</source>
3057+
<translation>Activate ID-card</translation>
3058+
</message>
3059+
<message>
3060+
<source>https://www.politsei.ee/en/self-service-portal/</source>
3061+
<translation>https://www.politsei.ee/en/self-service-portal/</translation>
3062+
</message>
30433063
<message>
30443064
<source>This ASiC-S container contains XAdES signature. You are not allowed to add or remove signatures to this container.</source>
30453065
<translation>This ASiC-S container contains XAdES signature. You are not allowed to add or remove signatures to this container.</translation>

client/translations/et.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2838,6 +2838,14 @@ Täiendavad litsentsid ja komponendid</translation>
28382838
<source>Change with PUK code</source>
28392839
<translation>Muuda PUK-koodiga</translation>
28402840
</message>
2841+
<message>
2842+
<source>The ID-card must be activated in order to authenticate</source>
2843+
<translation>Autentimiseks tuleb ID-kaart aktiveerida</translation>
2844+
</message>
2845+
<message>
2846+
<source>The ID-card must be activated in order to sign</source>
2847+
<translation>Allkirjastamiseks tuleb ID-kaart aktiveerida</translation>
2848+
</message>
28412849
<message>
28422850
<source>PIN%1 code must be changed in order to authenticate</source>
28432851
<translation>Autentimiseks tuleb PIN%1-koodi muuta</translation>
@@ -3040,6 +3048,18 @@ Täiendavad litsentsid ja komponendid</translation>
30403048
<source>https://www.id.ee/en/article/changing-id-card-pin-codes-and-puk-code/</source>
30413049
<translation>https://www.id.ee/artikkel/id-kaardi-pin-ja-puk-koodide-muutmine/</translation>
30423050
</message>
3051+
<message>
3052+
<source>Authentication and signing with the ID-card isn&apos;t possible yet. ID-card must be activated in the Police and Border Guard Board’s self-service portal in order to use it.</source>
3053+
<translation>ID-kaardiga isikutuvastamine ja allkirjastamine ei ole veel võimalik. ID-kaardi kasutamiseks tuleb see aktiveerida Politsei- ja Piirivalveameti iseteeninduses.</translation>
3054+
</message>
3055+
<message>
3056+
<source>Activate ID-card</source>
3057+
<translation>Aktiveeri ID-kaart</translation>
3058+
</message>
3059+
<message>
3060+
<source>https://www.politsei.ee/en/self-service-portal/</source>
3061+
<translation>https://www.politsei.ee/et/iseteenindus/</translation>
3062+
</message>
30433063
<message>
30443064
<source>This ASiC-S container contains XAdES signature. You are not allowed to add or remove signatures to this container.</source>
30453065
<translation>Tegemist on XAdES allkirja sisaldava ASiC-S ümbrikuga. Sellele ümbrikule ei saa allkirja lisada ega eemaldada.</translation>

client/translations/ru.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2923,6 +2923,14 @@ Additional licenses and components</source>
29232923
<source>Please check your internet connection.</source>
29242924
<translation>Пожалуйста проверьте подключение к интернету.</translation>
29252925
</message>
2926+
<message>
2927+
<source>The ID-card must be activated in order to authenticate</source>
2928+
<translation>Для аутентификации ID карту необходимо активировать</translation>
2929+
</message>
2930+
<message>
2931+
<source>The ID-card must be activated in order to sign</source>
2932+
<translation>Для подписания документов ID карту необходимо активировать</translation>
2933+
</message>
29262934
<message>
29272935
<source>PIN%1 has been blocked because PIN%1 code has been entered incorrectly 3 times.</source>
29282936
<translation>PIN%1 заблокирован, потому что PIN%1-код был введен неверно 3 раза.</translation>
@@ -3045,6 +3053,18 @@ Additional licenses and components</source>
30453053
<source>https://www.id.ee/en/article/changing-id-card-pin-codes-and-puk-code/</source>
30463054
<translation>https://www.id.ee/ru/artikkel/poryadok-izmeneniya-pin-kodov-i-puk-koda-id-karty/</translation>
30473055
</message>
3056+
<message>
3057+
<source>Authentication and signing with the ID-card isn&apos;t possible yet. ID-card must be activated in the Police and Border Guard Board’s self-service portal in order to use it.</source>
3058+
<translation>Идентификация и подписание документов с помощью ID карты пока невозможны. Для использования удостоверения личности его необходимо активировать в системе самообслуживания Управления полиции и пограничной охраны.</translation>
3059+
</message>
3060+
<message>
3061+
<source>Activate ID-card</source>
3062+
<translation>Активировать ID карту</translation>
3063+
</message>
3064+
<message>
3065+
<source>https://www.politsei.ee/en/self-service-portal/</source>
3066+
<translation>https://www.politsei.ee/ru/samoobsluzhivanie/</translation>
3067+
</message>
30483068
<message>
30493069
<source>This ASiC-S container contains XAdES signature. You are not allowed to add or remove signatures to this container.</source>
30503070
<translation>Речь идет о конверте ASiC-S, содержащемся в подписи XAdES. К данному контейнеру нельзя добавить или удалить из него подпись.</translation>

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

0 commit comments

Comments
 (0)