Skip to content

Commit 9c5f9ff

Browse files
authored
Show warning when card requires activation (#373)
WE2-1114, WE2-1119 Signed-off-by: Raul Metsma <[email protected]>
1 parent 7defef0 commit 9c5f9ff

File tree

21 files changed

+199
-57
lines changed

21 files changed

+199
-57
lines changed

.github/workflows/cmake-linux-fedora.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
container: fedora:${{ matrix.container }}
1515
strategy:
1616
matrix:
17-
container: [41, 42]
17+
container: [41, 42, 43]
1818

1919
steps:
2020
- name: Install Deps

.github/workflows/cmake-linux-ubuntu.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
container: ubuntu:${{matrix.container}}
1818
strategy:
1919
matrix:
20-
container: ['22.04', '24.04', '25.04']
20+
container: ['22.04', '24.04', '25.04', '25.10']
2121
arch: ['amd64', 'arm64']
2222

2323
steps:

.github/workflows/cmake-macos.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818

1919
steps:
2020
- name: Checkout code
21-
uses: actions/checkout@v4
21+
uses: actions/checkout@v5
2222
with:
2323
submodules: recursive
2424

@@ -64,7 +64,7 @@ jobs:
6464
- name: Install Qt
6565
uses: jurplel/install-qt-action@v4
6666
with:
67-
version: 6.9.1
67+
version: 6.9.3
6868
arch: clang_64
6969

7070
- name: Configure

.github/workflows/cmake-windows.yml

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,42 @@ env:
66
BUILD_TYPE: RelWithDebInfo
77
BUILD_NUMBER: ${{github.run_number}}
88
CMAKE_BUILD_PARALLEL_LEVEL: 4
9+
VCPKG_INSTALLED_DIR: ${{ github.workspace }}/build/vcpkg_installed
10+
# Use libelectronic-id vcpkg manifest for dependencies
11+
VCPKG_MANIFEST_DIR: ./lib/libelectronic-id/.github
912

1013
jobs:
1114
build:
12-
runs-on: windows-2022
15+
runs-on: windows-2025
1316
strategy:
1417
matrix:
1518
arch: [x64, arm64]
1619

1720
steps:
1821
- name: Checkout code
19-
uses: actions/checkout@v4
22+
uses: actions/checkout@v5
2023
with:
2124
submodules: recursive
2225

26+
- name: Cache vcpkg
27+
uses: actions/cache@v4
28+
with:
29+
path: ${{ github.workspace }}/vcpkg_cache
30+
key: vcpkg-${{ matrix.arch }}-${{ hashFiles(format('{0}/vcpkg.json', env.VCPKG_MANIFEST_DIR)) }}
31+
2332
- name: Prepare vcpkg and libraries
24-
uses: lukka/run-vcpkg@v7
33+
uses: lukka/run-vcpkg@v11
2534
with:
26-
vcpkgArguments: gtest openssl
27-
vcpkgTriplet: ${{matrix.arch}}-windows
28-
vcpkgGitCommitId: 031ad89ce6c575df35a8e58707ad2c898446c63e
35+
vcpkgJsonGlob: ${{ env.VCPKG_MANIFEST_DIR }}/vcpkg.json
36+
runVcpkgInstall: true
37+
env:
38+
VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/vcpkg_cache,readwrite
39+
VCPKG_DEFAULT_TRIPLET: ${{ matrix.arch }}-windows
2940

3041
- name: Install Qt
3142
uses: jurplel/install-qt-action@v4
3243
with:
33-
version: 6.9.1
44+
version: 6.9.3
3445
arch: ${{ matrix.arch == 'arm64' && 'win64_msvc2022_arm64_cross_compiled' || 'win64_msvc2022_64' }}
3546

3647
- name: Setup MS Visual C++ dev env
@@ -40,16 +51,17 @@ jobs:
4051

4152
- name: Install WiX
4253
run: |
43-
dotnet tool install --global wix --version 6.0.1
44-
wix extension -g add WixToolset.UI.wixext/6.0.1
45-
wix extension -g add WixToolset.Util.wixext/6.0.1
46-
wix extension -g add WixToolset.BootstrapperApplications.wixext/6.0.1
54+
dotnet tool install --global wix --version 6.0.2
55+
wix extension -g add WixToolset.UI.wixext/6.0.2
56+
wix extension -g add WixToolset.Util.wixext/6.0.2
57+
wix extension -g add WixToolset.BootstrapperApplications.wixext/6.0.2
4758
4859
- name: Configure
4960
run: |
5061
cmake "-GNinja" -S . -B build `
5162
"-DCMAKE_TOOLCHAIN_FILE=${env:RUNVCPKG_VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" `
52-
"-DCMAKE_BUILD_TYPE=${env:BUILD_TYPE}"
63+
"-DCMAKE_BUILD_TYPE=${env:BUILD_TYPE}" `
64+
"-DVCPKG_MANIFEST_DIR=${{ env.VCPKG_MANIFEST_DIR }}"
5365
5466
- name: Build
5567
run: |

src/controller/certandpininfo.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ struct PinInfo
4040
using PinMinMaxLength = std::pair<uint8_t, uint8_t>;
4141
using PinRetriesCount = std::pair<int8_t, int8_t>;
4242

43-
PinMinMaxLength pinMinMaxLength = {0, 0};
44-
PinRetriesCount pinRetriesCount = {0, -1};
43+
PinMinMaxLength pinMinMaxLength {0, 0};
44+
PinRetriesCount pinRetriesCount {0, -1};
4545
bool readerHasPinPad = false;
46-
bool pinIsBlocked = false;
46+
constexpr bool pinIsBlocked() const { return pinRetriesCount.first == 0; }
4747

4848
static constexpr int PIN_PAD_PIN_ENTRY_TIMEOUT = pcsc_cpp::PIN_PAD_PIN_ENTRY_TIMEOUT;
4949
};
@@ -55,6 +55,7 @@ struct EidCertificateAndPinInfo
5555
QSslCertificate certificate {};
5656
CertificateInfo certInfo;
5757
PinInfo pinInfo;
58+
bool cardActive = true;
5859
};
5960

6061
Q_DECLARE_METATYPE(EidCertificateAndPinInfo)

src/controller/command-handlers/certificatereader.cpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ EidCertificateAndPinInfo getCertificateWithStatusAndInfo(const ElectronicID::ptr
5050
auto serialNumber = certificate.subjectInfo(QSslCertificate::SerialNumber).join(' ');
5151

5252
// http://www.etsi.org/deliver/etsi_en/319400_319499/31941201/01.01.01_60/en_31941201v010101p.pdf
53-
if (serialNumber.size() > 6 && serialNumber.startsWith(QStringLiteral("PNO"))
53+
if (serialNumber.size() > 6 && serialNumber.startsWith(QLatin1String("PNO"))
5454
&& serialNumber[5] == '-')
5555
serialNumber.remove(0, 6);
5656

@@ -61,16 +61,29 @@ EidCertificateAndPinInfo getCertificateWithStatusAndInfo(const ElectronicID::ptr
6161
CertificateInfo certInfo {
6262
certificateType, certificate.expiryDate() < QDateTime::currentDateTimeUtc(),
6363
certificate.effectiveDate() > QDateTime::currentDateTimeUtc(), std::move(subject)};
64-
PinInfo pinInfo {certificateType.isAuthentication() ? eid->authPinMinMaxLength()
65-
: eid->signingPinMinMaxLength(),
66-
certificateType.isAuthentication() ? eid->authPinRetriesLeft()
67-
: eid->signingPinRetriesLeft(),
68-
eid->smartcard().readerHasPinPad()};
69-
if (pinInfo.pinRetriesCount.first == 0) {
70-
pinInfo.pinIsBlocked = true;
64+
auto info = certificateType.isAuthentication() ? eid->authPinInfo() : eid->signingPinInfo();
65+
PinInfo pinInfo {.pinMinMaxLength = certificateType.isAuthentication()
66+
? eid->authPinMinMaxLength()
67+
: eid->signingPinMinMaxLength(),
68+
.pinRetriesCount {
69+
info.retryCount,
70+
info.maxRetry,
71+
},
72+
.readerHasPinPad = eid->smartcard().readerHasPinPad()};
73+
bool cardActivated = info.pinActive;
74+
if (certificateType == CertificateType::AUTHENTICATION && eid->type() == ElectronicID::EstEID
75+
&& eid->name() == "EstEIDThales") {
76+
cardActivated = eid->signingPinInfo().pinActive;
7177
}
7278

73-
return {eid, std::move(certificateDer), certificate, std::move(certInfo), std::move(pinInfo)};
79+
return {
80+
.eid = eid,
81+
.certificateBytesInDer = std::move(certificateDer),
82+
.certificate = certificate,
83+
.certInfo = std::move(certInfo),
84+
.pinInfo = std::move(pinInfo),
85+
.cardActive = cardActivated,
86+
};
7487
}
7588

7689
} // namespace

src/ui/certificatewidget.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,9 @@ void CertificateWidgetInfo::setCertificateInfo(const EidCertificateAndPinInfo& c
112112
info->setText(CertificateWidget::tr("<b>%1</b><br />Issuer: %2<br />Valid: %3 to %4%5")
113113
.arg(subject, issuer, effectiveDate, expiryDate, warning));
114114
info->parentWidget()->setDisabled(certInfo.notEffective || certInfo.isExpired
115-
|| cardCertPinInfo.pinInfo.pinIsBlocked);
116-
if (warning.isEmpty() && cardCertPinInfo.pinInfo.pinIsBlocked) {
117-
warnIcon->show();
118-
warn->show();
119-
}
115+
|| cardCertPinInfo.pinInfo.pinIsBlocked());
116+
warnIcon->setVisible(warning.isEmpty() && cardCertPinInfo.pinInfo.pinIsBlocked());
117+
warn->setVisible(warning.isEmpty() && cardCertPinInfo.pinInfo.pinIsBlocked());
120118
}
121119

122120
void CertificateWidgetInfo::languageChange()

src/ui/dialog.ui

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,28 @@ height: 24px;
211211
<property name="bottomMargin">
212212
<number>20</number>
213213
</property>
214+
<item>
215+
<widget class="QLabel" name="lockedWarning">
216+
<property name="styleSheet">
217+
<string notr="true">background-color: #FAE7C9;
218+
color: #003168;
219+
font-family: Roboto, Helvetica;
220+
font-size: 14px;
221+
padding: 10px;
222+
border: none;
223+
border-radius: 4px;</string>
224+
</property>
225+
<property name="text">
226+
<string>Signing with an ID-card isn't possible yet. PIN2 code must be changed in DigiDoc4 application in order to sign. &lt;a href=&quot;https://www.id.ee/en/article/changing-id-card-pin-codes-and-puk-code/&quot;&gt;Additional information&lt;/a&gt;</string>
227+
</property>
228+
<property name="wordWrap">
229+
<bool>true</bool>
230+
</property>
231+
<property name="openExternalLinks">
232+
<bool>true</bool>
233+
</property>
234+
</widget>
235+
</item>
214236
<item>
215237
<widget class="QStackedWidget" name="pageStack">
216238
<property name="currentIndex">

src/ui/translations/cs.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,10 @@
157157
<source>Operation failed</source>
158158
<translation>Operace se nezdařila</translation>
159159
</message>
160+
<message>
161+
<source>PIN entry disabled</source>
162+
<translation type="unfinished"></translation>
163+
</message>
160164
<message>
161165
<source>Card driver error. Please try again.</source>
162166
<translation>Chyba ovladače karty. Zkuste to prosím znovu.</translation>
@@ -193,6 +197,10 @@
193197
<source>Try again</source>
194198
<translation>Zkuste to znovu</translation>
195199
</message>
200+
<message>
201+
<source>Signing with an ID-card isn&apos;t possible yet. PIN2 code must be changed in DigiDoc4 application in order to sign. &lt;a href=&quot;https://www.id.ee/en/article/changing-id-card-pin-codes-and-puk-code/&quot;&gt;Additional information&lt;/a&gt;</source>
202+
<translation type="unfinished"></translation>
203+
</message>
196204
<message>
197205
<source>Cancel</source>
198206
<translation>Zrušit</translation>

0 commit comments

Comments
 (0)