Skip to content

Commit 73a3eed

Browse files
committed
Merge branch 'master' into libcdoc
# Conflicts: # .github/workflows/build.yml
2 parents 816c17d + 36da39c commit 73a3eed

15 files changed

Lines changed: 176 additions & 154 deletions

File tree

.github/workflows/build.yml

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,14 @@ jobs:
4242
key: vcpkg-macOS-${{ hashFiles('prepare_osx_build_environment.sh') }}
4343
- name: Build libraries
4444
run: |
45-
mkdir -p ${LIBS_PATH}/Qt-6.10.1-OpenSSL
45+
mkdir -p ${LIBS_PATH}/Qt-6.10.2-OpenSSL
4646
./prepare_osx_build_environment.sh -p ${LIBS_PATH}
4747
- name: Install Qt
4848
uses: jurplel/install-qt-action@v4
4949
with:
50-
version: 6.10.1
50+
version: 6.10.2
5151
arch: clang_64
52+
cache: true
5253
- name: Build
5354
run: |
5455
cmake "-GNinja" -B build -S . -DCMAKE_BUILD_TYPE=RelWithDebInfo \
@@ -140,10 +141,11 @@ jobs:
140141
path: build/qdigidoc4*.rpm
141142
windows:
142143
name: Build on Windows
143-
runs-on: windows-2025
144+
runs-on: ${{ matrix.platform == 'arm64' && 'windows-11-arm' || 'windows-2025' }}
144145
strategy:
145146
matrix:
146147
vcver: [143]
148+
platform: [x64, arm64]
147149
env:
148150
VER_SUFFIX: .VS${{ matrix.vcver }}
149151
steps:
@@ -153,7 +155,7 @@ jobs:
153155
with:
154156
workflow: build.yml
155157
branch: master
156-
name: msi_${{ matrix.vcver }}_x64
158+
name: msi_${{ matrix.vcver }}_${{ matrix.platform }}
157159
path: ./
158160
repo: open-eid/libdigidocpp
159161
- name: Install artifact
@@ -164,40 +166,35 @@ jobs:
164166
uses: actions/cache@v5
165167
with:
166168
path: ${{ github.workspace }}/vcpkg_cache
167-
key: vcpkg-${{ matrix.vcver }}-${{ hashFiles('vcpkg.json') }}
168-
- name: Prepare vcpkg
169-
uses: lukka/run-vcpkg@v11
170-
with:
171-
vcpkgJsonGlob: ./vcpkg.json
172-
runVcpkgInstall: true
173-
env:
174-
VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/vcpkg_cache,readwrite
175-
VCPKG_INSTALLED_DIR: ${{ github.workspace }}/build/vcpkg_installed
169+
key: vcpkg-${{ matrix.vcver }}-${{ matrix.platform }}-${{ hashFiles('vcpkg.json') }}
176170
- name: Install Qt
177171
uses: jurplel/install-qt-action@v4
178172
with:
179-
version: 6.10.1
180-
arch: win64_msvc2022_64
173+
version: 6.10.2
174+
arch: ${{ matrix.platform == 'arm64' && 'win64_msvc2022_arm64' || 'win64_msvc2022_64' }}
175+
cache: true
181176
- name: Setup dev env
182177
uses: ilammy/msvc-dev-cmd@v1
183178
with:
184-
arch: x64
179+
arch: ${{ matrix.platform }}
185180
- name: Install WiX
186181
run: |
187182
dotnet tool install -g wix --version 6.0.2
188183
wix extension -g add WixToolset.UI.wixext/6.0.2
189184
- name: Build
185+
env:
186+
VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/vcpkg_cache,readwrite
190187
run: |
191188
cmake "-GNinja" -B build -S . -DCMAKE_BUILD_TYPE=RelWithDebInfo `
192-
-DCMAKE_TOOLCHAIN_FILE=${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake `
189+
-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake `
193190
-DVCPKG_MANIFEST_DIR=${{ github.workspace }}/client/libcdoc
194191
cmake --build build --target msi
195192
cmake --build build --target msishellext
196193
cmake --build build --target appx
197194
- name: Archive artifacts
198195
uses: actions/upload-artifact@v6
199196
with:
200-
name: msi_${{ matrix.vcver }}_x64
197+
name: msi_${{ matrix.vcver }}_${{ matrix.platform }}
201198
path: |
202199
build/*.msi
203200
build/*.appx

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
3. Configure
6565

6666
cmake -B build -S . \
67-
-DCMAKE_PREFIX_PATH=~/cmake_builds/Qt-6.6.3-OpenSSL
67+
-DCMAKE_PREFIX_PATH=~/cmake_builds/Qt-6.10.2-OpenSSL
6868
-DOPENSSL_ROOT_DIR=~/cmake_build/OpenSSL \
6969
-DLDAP_ROOT=~/cmake_build/OpenLDAP \
7070
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
@@ -81,10 +81,11 @@
8181
### Windows
8282

8383
1. Install dependencies from
84-
* [Visual Studio Community 2019](https://www.visualstudio.com/downloads/)
84+
* [Visual Studio Community 2022](https://www.visualstudio.com/downloads/)
8585
* [http://www.cmake.org](http://www.cmake.org)
8686
* [http://qt-project.org](http://qt-project.org)
8787
* [libdigidocpp-*.msi](https://github.com/open-eid/libdigidocpp/releases)
88+
* [vcpkg](https://vcpkg.io/)
8889

8990
2. Fetch the source
9091

@@ -93,7 +94,10 @@
9394

9495
3. Configure
9596

96-
cmake -G"NMAKE Makefiles" -DCMAKE_PREFIX_PATH=C:\Qt\6.6.3\msvc2019_x64 -DLibDigiDocpp_ROOT="C:\Program Files (x86)\libdigidocpp" -B build -S .
97+
cmake -G"NMAKE Makefiles" -B build -S . `
98+
-DCMAKE_PREFIX_PATH=C:\Qt\6.10.2\msvc2022_x64 `
99+
-DLibDigiDocpp_ROOT="C:\Program Files (x86)\libdigidocpp" `
100+
-DVCPKG_MANIFEST_DIR=client/libcdoc
97101

98102
4. Build
99103

client/Application.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ class Application::Private
295295
std::unique_ptr<MacMenuBar> bar;
296296
QSigner *signer {};
297297

298-
QTranslator appTranslator, commonTranslator, qtTranslator;
298+
QTranslator appTranslator, qtTranslator;
299299
QString lang;
300300
QTimer lastWindowTimer;
301301
volatile bool ready = false;
@@ -419,7 +419,6 @@ Application::Application( int &argc, char **argv )
419419
});
420420

421421
installTranslator( &d->appTranslator );
422-
installTranslator( &d->commonTranslator );
423422
installTranslator( &d->qtTranslator );
424423
loadTranslation(Settings::LANGUAGE);
425424

@@ -673,7 +672,6 @@ void Application::loadTranslation( const QString &lang )
673672
else QLocale::setDefault(QLocale(QLocale::Estonian, QLocale::Estonia));
674673

675674
void(d->appTranslator.load(QLatin1String(":/translations/%1.qm").arg(lang)));
676-
void(d->commonTranslator.load(QLatin1String(":/translations/common_%1.qm").arg(lang)));
677675
void(d->qtTranslator.load(QLatin1String(":/translations/qtbase_%1.qm").arg(lang)));
678676
if( d->closeAction ) d->closeAction->setText( tr("Close Window") );
679677
if( d->newClientAction ) d->newClientAction->setText( tr("New Window") );

client/CMakeLists.txt

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
get_target_property(qtCore_install_prefix Qt6::qmake IMPORTED_LOCATION)
2-
get_filename_component(qtCore_install_prefix ${qtCore_install_prefix} DIRECTORY)
31
get_filename_component(TSL_FILENAME ${TSL_URL} NAME_WLE)
42
set(TSL_LIST ${TSL_FILENAME} ${TSL_INCLUDE})
53
list(TRANSFORM TSL_LIST APPEND .xml)
@@ -9,14 +7,11 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TSL_FILENAME}.xml)
97
else()
108
set(TSL_DIR ${CMAKE_CURRENT_BINARY_DIR})
119
list(TRANSFORM TSL_LIST PREPEND ${TSL_DIR}/)
12-
add_executable(TSLDownload TSLDownload.cpp)
13-
target_link_libraries(TSLDownload Qt6::Network)
14-
set_target_properties(TSLDownload PROPERTIES AUTOMOC OFF)
10+
find_package(Python REQUIRED)
1511
add_custom_command(
1612
OUTPUT ${TSL_LIST}
17-
DEPENDS TSLDownload
18-
COMMAND $<TARGET_FILE:TSLDownload> ${CMAKE_CURRENT_BINARY_DIR} ${TSL_URL} ${TSL_INCLUDE}
19-
WORKING_DIRECTORY ${qtCore_install_prefix}
13+
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/download_tsl.py
14+
COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/download_tsl.py ${CMAKE_CURRENT_BINARY_DIR} ${TSL_URL} ${TSL_INCLUDE}
2015
)
2116
endif()
2217

@@ -91,9 +86,6 @@ qt_add_translations(${PROJECT_NAME} TS_FILES
9186
translations/en.ts
9287
translations/et.ts
9388
translations/ru.ts
94-
../common/translations/common_en.ts
95-
../common/translations/common_et.ts
96-
../common/translations/common_ru.ts
9789
../common/translations/qtbase_et.ts
9890
../common/translations/qtbase_ru.ts
9991
RESOURCE_PREFIX /translations
@@ -222,10 +214,11 @@ elseif(WIN32)
222214
${CMAKE_SOURCE_DIR}/common/WelcomeDlg.wxs
223215
${CMAKE_SOURCE_DIR}/common/WixUI_Minimal.wxs
224216
)
217+
get_filename_component(QT_BASE_DIR "${Qt6_DIR}/../../.." ABSOLUTE)
225218
add_custom_target(msi DEPENDS ${PROJECT_NAME}
226219
COMMAND ${WIX_CMD} -o "${MSI_FILE}.msi"
227220
#Build MSI with QT
228-
COMMAND ${WIX_CMD} -d qt_path=${qtCore_install_prefix} -o "${MSI_FILE}.qt.msi"
221+
COMMAND ${WIX_CMD} -d qt_path=${QT_BASE_DIR}/bin -o "${MSI_FILE}.qt.msi"
229222
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
230223
)
231224
if(SIGNCERT)
@@ -242,11 +235,16 @@ elseif(WIN32)
242235
endif()
243236
set(PLATFORM $ENV{PLATFORM})
244237
configure_file(${CMAKE_SOURCE_DIR}/AppxManifest.xml.cmake ${CMAKE_BINARY_DIR}/AppxManifest.xml)
245-
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
246-
set(OPENSSL_SUFFIX "-x64")
247-
else()
238+
if(PLATFORM STREQUAL "x86")
248239
set(OPENSSL_SUFFIX "")
240+
else()
241+
set(OPENSSL_SUFFIX "-${PLATFORM}")
249242
endif()
243+
set(QT_PATHS ${QT_BASE_DIR}/bin/qtpaths.exe)
244+
if(EXISTS ${QT_BASE_DIR}/bin/host-qtpaths.bat)
245+
set(QT_PATHS ${QT_BASE_DIR}/bin/host-qtpaths.bat)
246+
endif()
247+
250248
add_custom_target(appx DEPENDS ${PROJECT_NAME}
251249
COMMAND ${CMAKE_COMMAND} -E remove ${MSI_FILE}.appx
252250
COMMAND ${CMAKE_COMMAND} -E remove_directory appx
@@ -264,7 +262,7 @@ elseif(WIN32)
264262
COMMAND ${CMAKE_COMMAND} -E copy ${LIBS_PATH}/digidocpp.conf appx
265263
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Assets appx/Assets
266264
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBS_PATH}/schema appx/schema
267-
COMMAND Qt::windeployqt --no-translations --no-compiler-runtime --no-patchqt --force-openssl
265+
COMMAND Qt::windeployqt --no-translations --no-compiler-runtime --no-patchqt --force-openssl --qtpaths ${QT_PATHS}
268266
--skip-plugin-types generic,networkinformation,iconengines --exclude-plugins qjpeg,qico,qgif,qcertonlybackend,qschannelbackend appx
269267
COMMAND ${CMAKE_COMMAND} -E copy ${LIBS_PATH}/digidoc-tool.exe appx
270268
COMMAND makeappx.exe pack -d appx -p ${MSI_FILE}.appx

client/TSLDownload.cpp

Lines changed: 0 additions & 79 deletions
This file was deleted.

client/dialogs/MobileProgress.cpp

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ background-color: #007aff;
125125
return returnError(tr("Failed to connect with service server. Please check your network settings or try again later."));
126126
case QNetworkReply::HostNotFoundError:
127127
case QNetworkReply::AuthenticationRequiredError:
128+
case QNetworkReply::InternalServerError:
128129
return returnError(tr("Failed to send request. Check your %1 service access settings.").arg(tr("mobile-ID")));
129130
default:
130131
{
@@ -154,19 +155,19 @@ background-color: #007aff;
154155
if(result.isEmpty())
155156
return returnError(tr("Failed to parse JSON content"));
156157

157-
if(result.contains(QStringLiteral("error")))
158+
if(result.contains(QLatin1String("error")))
158159
{
159-
QString error =result[QStringLiteral("error")].toString();
160-
if(error == QStringLiteral("phoneNumber must contain of + and numbers(8-30)"))
160+
QString error = result[QLatin1String("error")].toString();
161+
if(error == QLatin1String("phoneNumber must contain of + and numbers(8-30)"))
161162
returnError(tr("Please include correct country code."));
162163
else
163164
returnError(tr(error.toUtf8().constData()));
164165
return;
165166
}
166-
if(result.contains(QStringLiteral("cert")))
167+
if(result.contains(QLatin1String("cert")))
167168
{
168169
try {
169-
QByteArray b64 = QByteArray::fromBase64(result.value(QStringLiteral("cert")).toString().toUtf8());
170+
QByteArray b64 = QByteArray::fromBase64(result.value(QLatin1String("cert")).toString().toUtf8());
170171
d->cert = X509Cert((const unsigned char*)b64.constData(), size_t(b64.size()), X509Cert::Der);
171172
d->hide();
172173
d->l.exit(QDialog::Accepted);
@@ -175,32 +176,32 @@ background-color: #007aff;
175176
}
176177
return;
177178
}
178-
if(result.contains(QStringLiteral("sessionID")))
179-
d->sessionID = result.value(QStringLiteral("sessionID")).toString();
180-
else if(result.value(QStringLiteral("state")).toString() != QStringLiteral("RUNNING"))
179+
if(result.contains(QLatin1String("sessionID")))
180+
d->sessionID = result.value(QLatin1String("sessionID")).toString();
181+
else if(result.value(QLatin1String("state")).toString() != QLatin1String("RUNNING"))
181182
{
182-
QString endResult = result.value(QStringLiteral("result")).toString();
183-
if(endResult == QStringLiteral("OK"))
183+
QString endResult = result.value(QLatin1String("result")).toString();
184+
if(endResult == QLatin1String("OK"))
184185
{
185186
QByteArray b64 = QByteArray::fromBase64(
186-
result.value(QStringLiteral("signature")).toObject().value(QStringLiteral("value")).toString().toUtf8());
187+
result.value(QLatin1String("signature")).toObject().value(QLatin1String("value")).toString().toUtf8());
187188
d->signature.assign(b64.cbegin(), b64.cend());
188189
d->hide();
189190
d->l.exit(QDialog::Accepted);
190191
}
191-
else if(endResult == QStringLiteral("NOT_MID_CLIENT") || endResult == QStringLiteral("NOT_FOUND") || endResult == QStringLiteral("NOT_ACTIVE"))
192+
else if(endResult == QLatin1String("NOT_MID_CLIENT") || endResult == QLatin1String("NOT_FOUND") || endResult == QLatin1String("NOT_ACTIVE"))
192193
returnError(tr("User is not a mobile-ID client"));
193-
else if(endResult == QStringLiteral("USER_CANCELLED"))
194+
else if(endResult == QLatin1String("USER_CANCELLED"))
194195
returnError(tr("User denied or cancelled"));
195-
else if(endResult == QStringLiteral("TIMEOUT"))
196+
else if(endResult == QLatin1String("TIMEOUT"))
196197
returnError(tr("Your mobile-ID transaction has expired. Please try again."));
197-
else if(endResult == QStringLiteral("PHONE_ABSENT"))
198+
else if(endResult == QLatin1String("PHONE_ABSENT"))
198199
returnError(tr("Phone is not in coverage area"));
199-
else if(endResult == QStringLiteral("DELIVERY_ERROR"))
200+
else if(endResult == QLatin1String("DELIVERY_ERROR"))
200201
returnError(tr("Request sending error"));
201-
else if(endResult == QStringLiteral("SIM_ERROR"))
202+
else if(endResult == QLatin1String("SIM_ERROR"))
202203
returnError(tr("SIM error"));
203-
else if(endResult == QStringLiteral("SIGNATURE_HASH_MISMATCH"))
204+
else if(endResult == QLatin1String("SIGNATURE_HASH_MISMATCH"))
204205
returnError(tr("Your mobile-ID transaction has failed. Please contact your mobile network operator."));
205206
else
206207
returnError(tr("Service result:") + endResult);
@@ -227,8 +228,8 @@ bool MobileProgress::init(const QString &ssid, const QString &cell)
227228
if(!d->UUID.isEmpty() && QUuid(d->UUID).isNull())
228229
{
229230
WarningDialog::create(d->parentWidget())
230-
->withText(tr("Failed to send request. Check your %1 service access settings.").arg(tr("mobile-ID")))
231231
->withTitle(QCoreApplication::translate("DigiDoc", "Failed to sign container"))
232+
->withText(tr("Failed to send request. Check your %1 service access settings.").arg(tr("mobile-ID")))
232233
->open();
233234
return false;
234235
}

0 commit comments

Comments
 (0)