diff --git a/CMakeLists.txt b/CMakeLists.txt
index 68fc45e89..1e173e130 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,7 +40,7 @@ IF(APPLE AND NOT IOS)
SET(CMAKE_OSX_DEPLOYMENT_TARGET 10.12 CACHE STRING "Required macOS version")
ENDIF()
-PROJECT(AusweisApp2 VERSION 1.20.1 LANGUAGES ${LANGUAGES})
+PROJECT(AusweisApp2 VERSION 1.20.2 LANGUAGES ${LANGUAGES})
# Set TWEAK if not defined in PROJECT_VERSION above to
# have a valid tweak version without propagating it
diff --git a/cmake/Install.cmake b/cmake/Install.cmake
index 4e029e3c5..0ea595301 100644
--- a/cmake/Install.cmake
+++ b/cmake/Install.cmake
@@ -122,7 +122,7 @@ ELSEIF(APPLE AND NOT IOS)
FILE(GLOB_RECURSE DYLIB "${_dir}/${entry}/*.dylib")
FOREACH(_lib ${DYLIB})
FILE(RELATIVE_PATH _lib_dest "${_dir}" "${_lib}")
- IF(NOT _lib_dest MATCHES "XmlListModel|Particles.2|LocalStorage") # blacklist not needed stuff
+ IF(NOT _lib_dest MATCHES "XmlListModel|Particles.2|LocalStorage") # not needed stuff
GET_FILENAME_COMPONENT(_lib_dest_dir ${_lib_dest} DIRECTORY)
INSTALL(FILES ${_lib} DESTINATION ${MACOS_BUNDLE_RESOURCES_DIR}/qml/${_lib_dest_dir} COMPONENT Runtime)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Resources/qml/${_lib_dest}")
diff --git a/cmake/Libraries.cmake b/cmake/Libraries.cmake
index 1137825b9..ea6cf2516 100644
--- a/cmake/Libraries.cmake
+++ b/cmake/Libraries.cmake
@@ -75,10 +75,10 @@ ENDIF()
IF(MINGW)
SET(PCSC_LIBRARIES -lwinscard)
- SET(WIN_DEFAULT_LIBS "-lAdvapi32" "-lKernel32" "-lOle32" "-lSetupapi" "-lVersion" "-lws2_32")
+ SET(WIN_DEFAULT_LIBS "-ladvapi32" "-lkernel32" "-lole32" "-lsetupapi" "-lversion")
ELSEIF(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
SET(PCSC_LIBRARIES winscard.lib)
- SET(WIN_DEFAULT_LIBS setupapi.lib version.lib Ws2_32.lib)
+ SET(WIN_DEFAULT_LIBS setupapi.lib version.lib)
ELSEIF(ANDROID)
ELSEIF(IOS)
diff --git a/cmake/Packaging.cmake b/cmake/Packaging.cmake
index 105fba391..49f0b5892 100644
--- a/cmake/Packaging.cmake
+++ b/cmake/Packaging.cmake
@@ -81,7 +81,7 @@ ENDIF()
SET(CPACK_SOURCE_GENERATOR TGZ)
SET(CPACK_SOURCE_PACKAGE_FILE_NAME ${FILENAME} CACHE INTERNAL "tarball basename")
-SET(CPACK_SOURCE_IGNORE_FILES "\\\\.hgignore" "\\\\.hgtags" "/\\\\.hg/")
+SET(CPACK_SOURCE_IGNORE_FILES "\\\\.hgignore" "\\\\.hgtags" "/\\\\.hg/" "\\\\.hgchurn")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "\\\\.gitignore" "/\\\\.git/")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "vendor.txt")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_BINARY_DIR}")
@@ -232,6 +232,9 @@ ELSEIF(ANDROID)
IF(INTEGRATED_SDK)
SET(ANDROID_FILE_EXT aar)
FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "android.defaultConfig.consumerProguardFiles 'consumer-rules.pro'\n")
+ IF(DEFINED dvcs_revision)
+ SET(POM_SNAPSHOT "-SNAPSHOT")
+ ENDIF()
CONFIGURE_FILE(${PACKAGING_DIR}/android/pom.xml.in ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.pom @ONLY)
CONFIGURE_FILE("${PACKAGING_DIR}/android/lint.aar.xml" "${CMAKE_INSTALL_PREFIX}/lint.xml" COPYONLY)
CONFIGURE_FILE("${PACKAGING_DIR}/android/consumer-rules.pro" "${CMAKE_INSTALL_PREFIX}/consumer-rules.pro" COPYONLY)
diff --git a/cmake/android.toolchain.cmake b/cmake/android.toolchain.cmake
index 361315cfd..156d49f2b 100644
--- a/cmake/android.toolchain.cmake
+++ b/cmake/android.toolchain.cmake
@@ -1,22 +1,34 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.7.1)
-FUNCTION(READ_REVISION _var _regex _file)
- IF(EXISTS "${_file}")
- FILE(READ "${_file}" content)
- STRING(REGEX MATCH "${_regex}" _unused "${content}")
- SET(${_var} ${CMAKE_MATCH_1} PARENT_SCOPE)
- ENDIF()
+FUNCTION(READ_REVISION _var _regex _files)
+ FOREACH(file ${_files})
+ IF(EXISTS "${file}")
+ FILE(READ "${file}" content)
+ STRING(REGEX MATCH "${_regex}" _unused "${content}")
+ SET(${_var} ${CMAKE_MATCH_1} PARENT_SCOPE)
+ RETURN()
+ ENDIF()
+ ENDFOREACH()
ENDFUNCTION()
IF(NOT CMAKE_ANDROID_NDK)
- SET(CMAKE_ANDROID_NDK $ENV{ANDROID_NDK})
+ SET(_ndk_dest $ENV{ANDROID_NDK_ROOT} $ENV{ANDROID_NDK_HOME} $ENV{ANDROID_NDK})
+ FOREACH(_ndk ${_ndk_dest})
+ IF(EXISTS "${_ndk}")
+ SET(CMAKE_ANDROID_NDK ${_ndk})
+ ENDIF()
+ ENDFOREACH()
+
+ IF(NOT CMAKE_ANDROID_NDK)
+ MESSAGE(FATAL_ERROR "Cannot find ANDROID_NDK_ROOT")
+ ENDIF()
ENDIF()
-SET(ANDROID_SDK $ENV{ANDROID_HOME})
+SET(ANDROID_SDK $ENV{ANDROID_SDK_ROOT})
SET(ANDROID_BUILD_TOOLS_REVISION $ENV{ANDROID_BUILD_TOOLS_REVISION})
IF(NOT EXISTS "${ANDROID_SDK}")
- MESSAGE(FATAL_ERROR "Environment variable ANDROID_HOME is undefined")
+ MESSAGE(FATAL_ERROR "Environment variable ANDROID_SDK_ROOT is undefined")
ENDIF()
IF(NOT ANDROID_BUILD_TOOLS_REVISION)
@@ -37,9 +49,9 @@ IF(NOT ANDROID_BUILD_TOOLS_REVISION)
ENDIF()
READ_REVISION(ANDROID_NDK_REVISION ".*Revision = ([0-9|\\.]+)" "${CMAKE_ANDROID_NDK}/source.properties")
-READ_REVISION(ANDROID_SDK_REVISION ".*Revision=([0-9|\\.]+)" "${ANDROID_SDK}/tools/source.properties")
+READ_REVISION(ANDROID_SDK_REVISION ".*Revision=([0-9|\\.]+)" "${ANDROID_SDK}/tools/source.properties;${ANDROID_SDK}/cmdline-tools/latest/source.properties")
-IF(NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION AND ANDROID_NDK_REVISION VERSION_GREATER_EQUAL "11")
+IF(NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION AND (ANDROID_NDK_REVISION VERSION_GREATER_EQUAL "11" OR NOT ANDROID_NDK_REVISION))
SET(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang)
ENDIF()
diff --git a/cmake/cmd.cmake b/cmake/cmd.cmake
index 365cb4dbc..1b07506a0 100644
--- a/cmake/cmd.cmake
+++ b/cmake/cmd.cmake
@@ -62,6 +62,36 @@ FUNCTION(IMPORT_PATCH)
ENDFUNCTION()
+FUNCTION(DEPLOY_NEXUS)
+ IF(NOT DEFINED ENV{NEXUS_USERNAME} OR NOT DEFINED ENV{NEXUS_PSW})
+ MESSAGE(FATAL_ERROR "Please provide environment variable NEXUS_USERNAME and NEXUS_PSW")
+ ENDIF()
+
+ FIND_PROGRAM(MVN_BIN mvn)
+ IF(NOT MVN_BIN)
+ MESSAGE(FATAL_ERROR "Cannot find mvn")
+ ENDIF()
+
+ SET(SETTINGS_XML "
+ nexus
+ \${env.NEXUS_USERNAME}
+ \${env.NEXUS_PSW}
+ ")
+ FILE(WRITE settings.xml "${SETTINGS_XML}")
+
+ FILE(GLOB FILE_AAR RELATIVE ${CMAKE_BINARY_DIR} *.aar)
+ FILE(GLOB FILE_POM RELATIVE ${CMAKE_BINARY_DIR} *.pom)
+ FILE(GLOB FILE_JAR RELATIVE ${CMAKE_BINARY_DIR} *-sources.jar)
+
+ FILE(STRINGS "${FILE_POM}" is_snapshot REGEX ".+-SNAPSHOT")
+ IF(is_snapshot)
+ SET(NEXUS_URL https://repo.govkg.de/repository/ausweisapp-snapshots)
+ ELSE()
+ SET(NEXUS_URL https://repo.govkg.de/repository/ausweisapp-releases)
+ ENDIF()
+
+ EXECUTE_PROCESS(COMMAND ${MVN_BIN} deploy:deploy-file -Dfile=${FILE_AAR} -DpomFile=${FILE_POM} -Dsources=${FILE_JAR} -DrepositoryId=nexus -Durl=${NEXUS_URL} --settings settings.xml)
+ENDFUNCTION()
@@ -75,6 +105,8 @@ ELSEIF(CMD STREQUAL "CHECK_WIX_WARNING")
CHECK_WIX_WARNING()
ELSEIF(CMD STREQUAL "IMPORT_PATCH")
IMPORT_PATCH()
+ELSEIF(CMD STREQUAL "DEPLOY_NEXUS")
+ DEPLOY_NEXUS()
ELSE()
MESSAGE(FATAL_ERROR "Unknown CMD: ${CMD}")
ENDIF()
diff --git a/docs/releasenotes/1.0.1.rst b/docs/releasenotes/1.0.1.rst
index 93d73987c..5791db681 100644
--- a/docs/releasenotes/1.0.1.rst
+++ b/docs/releasenotes/1.0.1.rst
@@ -7,4 +7,4 @@ AusweisApp2 1.0.1
Anwender
""""""""
- - Korrekturen bei der Verwendung von Basislesern.
+- Korrekturen bei der Verwendung von Basislesern.
diff --git a/docs/releasenotes/1.0.2.rst b/docs/releasenotes/1.0.2.rst
index 26ad067de..5dbc540b8 100644
--- a/docs/releasenotes/1.0.2.rst
+++ b/docs/releasenotes/1.0.2.rst
@@ -7,4 +7,4 @@ AusweisApp2 1.0.2
Anwender
""""""""
- - Update der Anbieterliste.
+- Update der Anbieterliste.
diff --git a/docs/releasenotes/1.10.0.rst b/docs/releasenotes/1.10.0.rst
index 2a7f5e6a8..b0be6b1e9 100644
--- a/docs/releasenotes/1.10.0.rst
+++ b/docs/releasenotes/1.10.0.rst
@@ -7,33 +7,33 @@ AusweisApp2 1.10.0
Anwender
""""""""
- - Unterstützung von Dualstack (IPv4 / IPv6).
+- Unterstützung von Dualstack (IPv4 / IPv6).
- - Das Problem, dass die AusweisApp2 nicht wie gewünscht in den Vordergrund
- kommt, wurde behoben.
+- Das Problem, dass die AusweisApp2 nicht wie gewünscht in den Vordergrund
+ kommt, wurde behoben.
- - Die kontextsensitive Hilfe wurde vollständig überarbeitet.
+- Die kontextsensitive Hilfe wurde vollständig überarbeitet.
- - Fehler der Diagnosefunktion unter Windows 8, Windows 8.1 und Windows 10
- wurden behoben.
+- Fehler der Diagnosefunktion unter Windows 8, Windows 8.1 und Windows 10
+ wurden behoben.
- - Im Log-Dialog werden nun auch alte Logs angezeigt. Diese Logs
- entstehen nur wenn die AusweisApp2 nicht korrekt beendet werden konnte.
+- Im Log-Dialog werden nun auch alte Logs angezeigt. Diese Logs
+ entstehen nur wenn die AusweisApp2 nicht korrekt beendet werden konnte.
- - Bei der Erzeugung des PDFs in der Selbstauskunft wird nun das Datum bzw. die
- Uhrzeit der Authentisierung gespeichert und nicht die der Erzeugung.
+- Bei der Erzeugung des PDFs in der Selbstauskunft wird nun das Datum bzw. die
+ Uhrzeit der Authentisierung gespeichert und nicht die der Erzeugung.
- - Es wurden einige Probleme mit der Proxy-Authentisierung behoben.
+- Es wurden einige Probleme mit der Proxy-Authentisierung behoben.
Entwickler
""""""""""
- - Aktualisierung von OpenSSL auf die Version 1.0.2j.
+- Aktualisierung von OpenSSL auf die Version 1.0.2j.
- - Aktualisierung von Qt auf die Version 5.7.0.
+- Aktualisierung von Qt auf die Version 5.7.0.
- - Die TLS Parameter sind nun in der config.json konfigurierbar.
+- Die TLS Parameter sind nun in der config.json konfigurierbar.
- - Bei der Verwendung von TLS 1.2 sind nur noch Signaturalgorithmen
- mit SHA224, SHA256, SHA384 und SHA512 erlaubt.
+- Bei der Verwendung von TLS 1.2 sind nur noch Signaturalgorithmen
+ mit SHA224, SHA256, SHA384 und SHA512 erlaubt.
diff --git a/docs/releasenotes/1.10.1.rst b/docs/releasenotes/1.10.1.rst
index 2b71a64b7..b23da79d6 100644
--- a/docs/releasenotes/1.10.1.rst
+++ b/docs/releasenotes/1.10.1.rst
@@ -7,5 +7,5 @@ AusweisApp2 1.10.1
Anwender
""""""""
- - Unter Windows wurde u.U. fälschlicherweise das
- Beta-Symbol angezeigt.
+- Unter Windows wurde u.U. fälschlicherweise das
+ Beta-Symbol angezeigt.
diff --git a/docs/releasenotes/1.10.2.rst b/docs/releasenotes/1.10.2.rst
index e969bcc29..578bca4cc 100644
--- a/docs/releasenotes/1.10.2.rst
+++ b/docs/releasenotes/1.10.2.rst
@@ -7,19 +7,19 @@ AusweisApp2 1.10.2
Anmerkung
"""""""""
- - Version wurde auf Grund der EUPL v1.2 ausgesetzt.
+- Version wurde auf Grund der EUPL v1.2 ausgesetzt.
Anwender
""""""""
- - Veröffentlichung der AusweisApp2 unter geänderten
- Nutzungsbedingungen (EUPL v1.1).
+- Veröffentlichung der AusweisApp2 unter geänderten
+ Nutzungsbedingungen (EUPL v1.1).
Entwickler
""""""""""
- - Umsetzung des Entwicklermodus gemäß TR-03124.
+- Umsetzung des Entwicklermodus gemäß TR-03124.
- - Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.
+- Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.
diff --git a/docs/releasenotes/1.10.3.rst b/docs/releasenotes/1.10.3.rst
index c0abb4aa9..d7a6c8c09 100644
--- a/docs/releasenotes/1.10.3.rst
+++ b/docs/releasenotes/1.10.3.rst
@@ -7,13 +7,13 @@ AusweisApp2 1.10.3
Anwender
""""""""
- - Veröffentlichung der AusweisApp2 unter geänderten
- Nutzungsbedingungen (EUPL v1.2).
+- Veröffentlichung der AusweisApp2 unter geänderten
+ Nutzungsbedingungen (EUPL v1.2).
Entwickler
""""""""""
- - Umsetzung des Entwicklermodus gemäß TR-03124.
+- Umsetzung des Entwicklermodus gemäß TR-03124.
- - Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.
+- Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.
diff --git a/docs/releasenotes/1.10.4.rst b/docs/releasenotes/1.10.4.rst
index 93d671c2e..aaf6e2c1a 100644
--- a/docs/releasenotes/1.10.4.rst
+++ b/docs/releasenotes/1.10.4.rst
@@ -7,13 +7,13 @@ AusweisApp2 1.10.4
Anwender
""""""""
- - Anzeige des Verwendungszwecks korrigiert.
+- Anzeige des Verwendungszwecks korrigiert.
- - Links zu den Treibern von Kartenlesegeräten
- wurden aktualisiert.
+- Links zu den Treibern von Kartenlesegeräten
+ wurden aktualisiert.
Entwickler
""""""""""
- - Der XML-ConnectionHandleType ist nun korrigiert und
- schemakonform.
+- Der XML-ConnectionHandleType ist nun korrigiert und
+ schemakonform.
diff --git a/docs/releasenotes/1.12.0.rst b/docs/releasenotes/1.12.0.rst
index c9d1a878a..2f3a854e0 100644
--- a/docs/releasenotes/1.12.0.rst
+++ b/docs/releasenotes/1.12.0.rst
@@ -7,16 +7,16 @@ AusweisApp2 1.12.0
Anwender
""""""""
- - Veröffentlichung betrifft nur die Plattform "Android".
+- Veröffentlichung betrifft nur die Plattform "Android".
- - Unterstützung von Android 4.3 und höher.
+- Unterstützung von Android 4.3 und höher.
- - Zertifiziert vom Bundesamt für Sicherheit in der Informationstechnik (BSI).
+- Zertifiziert vom Bundesamt für Sicherheit in der Informationstechnik (BSI).
Entwickler
""""""""""
- - Aktualisierung von OpenSSL auf die Version 1.0.2k.
+- Aktualisierung von OpenSSL auf die Version 1.0.2k.
- - Aktualisierung von Qt auf die Version 5.8.0.
+- Aktualisierung von Qt auf die Version 5.8.0.
diff --git a/docs/releasenotes/1.12.1.rst b/docs/releasenotes/1.12.1.rst
index 03ac72008..6c0e2da12 100644
--- a/docs/releasenotes/1.12.1.rst
+++ b/docs/releasenotes/1.12.1.rst
@@ -7,17 +7,17 @@ AusweisApp2 1.12.1
Anmerkung
"""""""""
- - Version wurde auf Grund der EUPL v1.2 ausgesetzt.
+- Version wurde auf Grund der EUPL v1.2 ausgesetzt.
Anwender
""""""""
- - Veröffentlichung der AusweisApp2 unter geänderten
- Nutzungsbedingungen (EUPL v1.1).
+- Veröffentlichung der AusweisApp2 unter geänderten
+ Nutzungsbedingungen (EUPL v1.1).
Entwickler
""""""""""
- - Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.
+- Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.
diff --git a/docs/releasenotes/1.12.2.rst b/docs/releasenotes/1.12.2.rst
index 8f6366a91..619b476a4 100644
--- a/docs/releasenotes/1.12.2.rst
+++ b/docs/releasenotes/1.12.2.rst
@@ -6,10 +6,10 @@ AusweisApp2 1.12.2
Anwender
""""""""
- - Veröffentlichung der AusweisApp2 unter geänderten
- Nutzungsbedingungen (EUPL v1.2).
+- Veröffentlichung der AusweisApp2 unter geänderten
+ Nutzungsbedingungen (EUPL v1.2).
Entwickler
""""""""""
- - Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.
+- Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.
diff --git a/docs/releasenotes/1.12.3.rst b/docs/releasenotes/1.12.3.rst
index a47f4515d..252128106 100644
--- a/docs/releasenotes/1.12.3.rst
+++ b/docs/releasenotes/1.12.3.rst
@@ -6,17 +6,17 @@ AusweisApp2 1.12.3
Anwender
""""""""
- - Anzeige des Verwendungszwecks korrigiert.
+- Anzeige des Verwendungszwecks korrigiert.
- - Anbieterliste beinhaltet nur noch die Anbieter
- der aktuellen Plattform.
+- Anbieterliste beinhaltet nur noch die Anbieter
+ der aktuellen Plattform.
- - Unterstützung von arm64-v8a.
+- Unterstützung von arm64-v8a.
Entwickler
""""""""""
- - Finale API des eingebetteten SDKs.
+- Finale API des eingebetteten SDKs.
- - Anpassung der verschiedenen README-Dateien um
- die AusweisApp2 selbst zu bauen.
+- Anpassung der verschiedenen README-Dateien um
+ die AusweisApp2 selbst zu bauen.
diff --git a/docs/releasenotes/1.12.4.rst b/docs/releasenotes/1.12.4.rst
index b1d7f3d53..4c36231d9 100644
--- a/docs/releasenotes/1.12.4.rst
+++ b/docs/releasenotes/1.12.4.rst
@@ -6,10 +6,10 @@ AusweisApp2 1.12.4
Anwender
""""""""
- - Einige Abstürze unter arm64-v8a behoben.
+- Einige Abstürze unter arm64-v8a behoben.
Entwickler
""""""""""
- - Der XML-ConnectionHandleType ist nun korrigiert und
- schemakonform.
+- Der XML-ConnectionHandleType ist nun korrigiert und
+ schemakonform.
diff --git a/docs/releasenotes/1.14.0.rst b/docs/releasenotes/1.14.0.rst
index 738baab08..dafd7000e 100644
--- a/docs/releasenotes/1.14.0.rst
+++ b/docs/releasenotes/1.14.0.rst
@@ -7,38 +7,38 @@ AusweisApp2 1.14.0
Anwender
""""""""
- - Eine neue Funktion ermöglicht die Verwendung eines
- geeigneten Smartphones als Kartenlesegerät über WLAN.
+- Eine neue Funktion ermöglicht die Verwendung eines
+ geeigneten Smartphones als Kartenlesegerät über WLAN.
- - Umstellmöglichkeit der Sprache zur Laufzeit ermöglicht.
+- Umstellmöglichkeit der Sprache zur Laufzeit ermöglicht.
- - Fortschrittsanzeige unter Windows im Taskbar-Button.
+- Fortschrittsanzeige unter Windows im Taskbar-Button.
- - Verbesserungen bei der Erstellung von PDFs.
+- Verbesserungen bei der Erstellung von PDFs.
- - Speicherung der Protokolldateien verbessert.
+- Speicherung der Protokolldateien verbessert.
- - Einstellungsbereich für das Verwalten von
- Kartenlesegeräten hinzugefügt.
+- Einstellungsbereich für das Verwalten von
+ Kartenlesegeräten hinzugefügt.
- - Grafiken der Kartenlesegeräte erneuert und erweitert.
+- Grafiken der Kartenlesegeräte erneuert und erweitert.
- - Unter macOS wird die Bandbreite im WLAN nicht mehr
- beeinträchtigt.
+- Unter macOS wird die Bandbreite im WLAN nicht mehr
+ beeinträchtigt.
- - Beim Ausweisen ohne aktivierte Online-Ausweisfunktion wurde
- fälschlicherweise nach der PUK gefragt.
+- Beim Ausweisen ohne aktivierte Online-Ausweisfunktion wurde
+ fälschlicherweise nach der PUK gefragt.
- - Unter Windows 10 kommt es nicht mehr zu einem Absturz
- bei Proxies mit Passwort-Authentisierung.
+- Unter Windows 10 kommt es nicht mehr zu einem Absturz
+ bei Proxies mit Passwort-Authentisierung.
- - Unterstützung von OS X 10.9 wurde eingestellt.
+- Unterstützung von OS X 10.9 wurde eingestellt.
Entwickler
""""""""""
- - Aktualisierung von OpenSSL auf die Version 1.0.2n.
+- Aktualisierung von OpenSSL auf die Version 1.0.2n.
- - Aktualisierung von Qt auf die Version 5.9.3.
+- Aktualisierung von Qt auf die Version 5.9.3.
- - Unterstützung von OpenSSL 1.1.0.
+- Unterstützung von OpenSSL 1.1.0.
diff --git a/docs/releasenotes/1.14.1.rst b/docs/releasenotes/1.14.1.rst
index b82e66a2d..4b352de38 100644
--- a/docs/releasenotes/1.14.1.rst
+++ b/docs/releasenotes/1.14.1.rst
@@ -7,62 +7,62 @@ AusweisApp2 1.14.1
Anwender
""""""""
- - Die Nutzung der PIN-Verwaltung ist nun auch mit der Funktion
- "Smartphone als Kartenleser" möglich.
+- Die Nutzung der PIN-Verwaltung ist nun auch mit der Funktion
+ "Smartphone als Kartenleser" möglich.
- - Die mobile Startseite wurde überarbeitet.
+- Die mobile Startseite wurde überarbeitet.
- - Beim Koppeln von zwei Geräten für die Funktion "Smartphone als Kartenleser"
- wird nun eine einheitliche PIN-Tastatur verwendet.
+- Beim Koppeln von zwei Geräten für die Funktion "Smartphone als Kartenleser"
+ wird nun eine einheitliche PIN-Tastatur verwendet.
- - Während einer Authentisierung wird nun eine Fortschrittsanzeige
- zusammen mit dem Namen des aktuellen Authentisierungsschrittes angezeigt.
+- Während einer Authentisierung wird nun eine Fortschrittsanzeige
+ zusammen mit dem Namen des aktuellen Authentisierungsschrittes angezeigt.
- - Während der Verwendung der Funktion "Smartphone als Kartenleser" wird auf
- beiden Geräten jeweils der Name des verbundenen Gerätes angezeigt.
+- Während der Verwendung der Funktion "Smartphone als Kartenleser" wird auf
+ beiden Geräten jeweils der Name des verbundenen Gerätes angezeigt.
- - Die Anzeige der unterstützten Kartenlesegeräte wurde optimiert.
+- Die Anzeige der unterstützten Kartenlesegeräte wurde optimiert.
- - Das Koppeln für die Funktion "Smartphone als Kartenleser" ist jetzt während
- eines Authentisierungsvorgangs möglich und führt nicht mehr zum Abbruch des
- Vorgangs.
+- Das Koppeln für die Funktion "Smartphone als Kartenleser" ist jetzt während
+ eines Authentisierungsvorgangs möglich und führt nicht mehr zum Abbruch des
+ Vorgangs.
- - Bei der Android-Version der AusweisApp2 ist es jetzt möglich, den Verlauf
- zu deaktivieren und Einträge zu löschen.
+- Bei der Android-Version der AusweisApp2 ist es jetzt möglich, den Verlauf
+ zu deaktivieren und Einträge zu löschen.
- - Die AusweisApp2 kommt nun auch beim erneuten Starten aus dem Launchpad oder
- per Doppelklick in den Vordergrund. Voraussetzung ist, dass sie bereits
- vorher gestartet wurde.
+- Die AusweisApp2 kommt nun auch beim erneuten Starten aus dem Launchpad oder
+ per Doppelklick in den Vordergrund. Voraussetzung ist, dass sie bereits
+ vorher gestartet wurde.
- - Bei einem Update bleibt der Autostart-Eintrag erhalten.
+- Bei einem Update bleibt der Autostart-Eintrag erhalten.
- - Bei der Android-Version wird die letzte Auswahl einer
- Authentisierungsmethode (NFC, Bluetooth oder WLAN) nun als bevorzugte
- Methode gespeichert.
+- Bei der Android-Version wird die letzte Auswahl einer
+ Authentisierungsmethode (NFC, Bluetooth oder WLAN) nun als bevorzugte
+ Methode gespeichert.
- - Bei der Android-Version wurden die Fehlermeldungen / Hinweise bei
- Fehleingaben optimiert.
+- Bei der Android-Version wurden die Fehlermeldungen / Hinweise bei
+ Fehleingaben optimiert.
- - Der Begriff "Handbuch" wurde gegen "Online-Hilfe" ausgetauscht und an
- geeigneten Stellen wurden Verlinkungen eingefügt.
+- Der Begriff "Handbuch" wurde gegen "Online-Hilfe" ausgetauscht und an
+ geeigneten Stellen wurden Verlinkungen eingefügt.
- - Optimierung der Anzeige der Diensteanbieter im Anbieterverzeichnis
- (macOS und Windows).
+- Optimierung der Anzeige der Diensteanbieter im Anbieterverzeichnis
+ (macOS und Windows).
- - Die Funktion "Smartphone als Kartenleser" unterstützt nun auch einen
- mobilen Hotspot des selben Gerätes.
+- Die Funktion "Smartphone als Kartenleser" unterstützt nun auch einen
+ mobilen Hotspot des selben Gerätes.
- - Die Unterstützung von Bildschirmlesern wurde verbessert.
+- Die Unterstützung von Bildschirmlesern wurde verbessert.
Entwickler
""""""""""
- - Beim Aufruf von "eID-Client?status" wird nun auch
- der Header "Access-Control-Allow-Origin" gesetzt.
+- Beim Aufruf von "eID-Client?status" wird nun auch
+ der Header "Access-Control-Allow-Origin" gesetzt.
- - Im Protokoll wird nun auch das TLS-Zertifikat angezeigt,
- welches einen Fehler verursacht.
+- Im Protokoll wird nun auch das TLS-Zertifikat angezeigt,
+ welches einen Fehler verursacht.
- - Es wird nun TLS-Session-Resumption beim Attached-eID erzwungen.
+- Es wird nun TLS-Session-Resumption beim Attached-eID erzwungen.
- - Fehlercode bei fehlgeschlagenen Transmits korrigiert.
+- Fehlercode bei fehlgeschlagenen Transmits korrigiert.
diff --git a/docs/releasenotes/1.14.2.rst b/docs/releasenotes/1.14.2.rst
index d51717d3b..298f6dc87 100644
--- a/docs/releasenotes/1.14.2.rst
+++ b/docs/releasenotes/1.14.2.rst
@@ -7,15 +7,15 @@ AusweisApp2 1.14.2
Anwender
""""""""
- - Optimierungen in der Benutzerfreundlichkeit.
+- Optimierungen in der Benutzerfreundlichkeit.
- - Ein leerer Zweck im Berechtigungszertifikat wird nun
- korrekt dargestellt.
+- Ein leerer Zweck im Berechtigungszertifikat wird nun
+ korrekt dargestellt.
Entwickler
""""""""""
- - Unterstützung von Vor-Ort-Auslesen von Ausweisdaten unter
- Anwesenden (gem. §18a PAuswG).
+- Unterstützung von Vor-Ort-Auslesen von Ausweisdaten unter
+ Anwesenden (gem. §18a PAuswG).
- - Aktualisierung von OpenSSL auf die Version 1.0.2o.
+- Aktualisierung von OpenSSL auf die Version 1.0.2o.
diff --git a/docs/releasenotes/1.14.3.rst b/docs/releasenotes/1.14.3.rst
index 60913939a..8fe4d5ca7 100644
--- a/docs/releasenotes/1.14.3.rst
+++ b/docs/releasenotes/1.14.3.rst
@@ -7,11 +7,11 @@ AusweisApp2 1.14.3
Anwender
""""""""
- - Hinweis zur Datenschutzerklärung hinzugefügt.
+- Hinweis zur Datenschutzerklärung hinzugefügt.
Entwickler
""""""""""
- - Das Vor-Ort-Auslesen von Ausweisdaten unter Anwesenden (gem. §18a PAuswG)
- funktioniert jetzt, wenn ein Smartphone als Kartenlesegerät genutzt wird
- und der Tastaturmodus "PIN-Eingabe auf diesem Gerät" aktiviert ist.
+- Das Vor-Ort-Auslesen von Ausweisdaten unter Anwesenden (gem. §18a PAuswG)
+ funktioniert jetzt, wenn ein Smartphone als Kartenlesegerät genutzt wird
+ und der Tastaturmodus "PIN-Eingabe auf diesem Gerät" aktiviert ist.
diff --git a/docs/releasenotes/1.16.0.rst b/docs/releasenotes/1.16.0.rst
index 7c0b7aafe..19d39adba 100644
--- a/docs/releasenotes/1.16.0.rst
+++ b/docs/releasenotes/1.16.0.rst
@@ -7,64 +7,64 @@ AusweisApp2 1.16.0
Anwender
""""""""
- - Kleinere Fehlerbehebungen.
+- Kleinere Fehlerbehebungen.
- - Hinzufügen eines Tutorials um Hilfestellung bei der
- Verwendung unter Android zu geben.
+- Hinzufügen eines Tutorials um Hilfestellung bei der
+ Verwendung unter Android zu geben.
- - Unterstützung von Android 4.3 und 4.4 wurde eingestellt.
+- Unterstützung von Android 4.3 und 4.4 wurde eingestellt.
- - Unterstützung von OS X 10.10 wurde eingestellt.
+- Unterstützung von OS X 10.10 wurde eingestellt.
- - Unterstützung von macOS 10.14.
+- Unterstützung von macOS 10.14.
- - Es ist nun möglich nach einer erfolgreichen Authentisierung
- Daten eines verwendeten Android Smartphones anonym zu
- übermitteln.
+- Es ist nun möglich nach einer erfolgreichen Authentisierung
+ Daten eines verwendeten Android Smartphones anonym zu
+ übermitteln.
- - Erweiterung der Diagnosefunktion.
+- Erweiterung der Diagnosefunktion.
- - Bewertungsnachfrage unter Android hinzugefügt.
+- Bewertungsnachfrage unter Android hinzugefügt.
- - Möglichkeit zur Log-Anzeige unter Android hinzugefügt.
+- Möglichkeit zur Log-Anzeige unter Android hinzugefügt.
- - Unter Android wird nun eindeutiger zwischen 5 und 6-stelliger
- PIN unterschieden.
+- Unter Android wird nun eindeutiger zwischen 5 und 6-stelliger
+ PIN unterschieden.
- - Das Entfernen des Ausweisdokumentes während der Eingabe von
- PIN/CAN/PUK löst nicht mehr den Abbruch der Authentisierung
- oder der PIN-Änderung aus.
+- Das Entfernen des Ausweisdokumentes während der Eingabe von
+ PIN/CAN/PUK löst nicht mehr den Abbruch der Authentisierung
+ oder der PIN-Änderung aus.
Entwickler
""""""""""
- - Unterstützung von firmenweiten Installationen des MSI-Paketes
- (separate Dokumentation).
+- Unterstützung von firmenweiten Installationen des MSI-Paketes
+ (separate Dokumentation).
- - Unterstützung eines SDKs mittels WebSockets unter Windows und
- macOS (separate Dokumentation).
+- Unterstützung eines SDKs mittels WebSockets unter Windows und
+ macOS (separate Dokumentation).
- - Konkurrierende Zugriffe von verschiedenen Anwendungen auf
- Kartenlesegeräte, die über PC/SC angeschlossen sind, sind
- nun möglich.
+- Konkurrierende Zugriffe von verschiedenen Anwendungen auf
+ Kartenlesegeräte, die über PC/SC angeschlossen sind, sind
+ nun möglich.
- - Aktualisierung von OpenSSL auf die Version 1.1.1.
+- Aktualisierung von OpenSSL auf die Version 1.1.1.
- - Aktualisierung von Qt auf die Version 5.11.2.
+- Aktualisierung von Qt auf die Version 5.11.2.
- - Unterstützung von TLS v1.1 wurde eingestellt.
+- Unterstützung von TLS v1.1 wurde eingestellt.
- - Unterstützung folgender TLS-Cipher wurde eingestellt:
+- Unterstützung folgender TLS-Cipher wurde eingestellt:
- - DHE-DSS-AES256-GCM-SHA384
- - DHE-DSS-AES256-SHA256
- - DHE-DSS-AES128-GCM-SHA256
- - DHE-DSS-AES128-SHA256
- - DHE-DSS-AES256-SHA
- - DHE-DSS-AES128-SHA
- - ECDHE-ECDSA-AES256-SHA
- - ECDHE-RSA-AES256-SHA
- - DHE-RSA-AES256-SHA
- - ECDHE-ECDSA-AES128-SHA
- - ECDHE-RSA-AES128-SHA
- - DHE-RSA-AES128-SHA
+ - DHE-DSS-AES256-GCM-SHA384
+ - DHE-DSS-AES256-SHA256
+ - DHE-DSS-AES128-GCM-SHA256
+ - DHE-DSS-AES128-SHA256
+ - DHE-DSS-AES256-SHA
+ - DHE-DSS-AES128-SHA
+ - ECDHE-ECDSA-AES256-SHA
+ - ECDHE-RSA-AES256-SHA
+ - DHE-RSA-AES256-SHA
+ - ECDHE-ECDSA-AES128-SHA
+ - ECDHE-RSA-AES128-SHA
+ - DHE-RSA-AES128-SHA
diff --git a/docs/releasenotes/1.16.1.rst b/docs/releasenotes/1.16.1.rst
index c8a9531c5..f9904c1fe 100644
--- a/docs/releasenotes/1.16.1.rst
+++ b/docs/releasenotes/1.16.1.rst
@@ -7,8 +7,8 @@ AusweisApp2 1.16.1
Anwender
""""""""
- - Deaktivieren der automatischen Bereinigung von alten Log-Dateien, da
- diese in 1.16.0 zu einem Programmabsturz führen kann.
+- Deaktivieren der automatischen Bereinigung von alten Log-Dateien, da
+ diese in 1.16.0 zu einem Programmabsturz führen kann.
Entwickler
diff --git a/docs/releasenotes/1.16.2.rst b/docs/releasenotes/1.16.2.rst
index c7c2fc799..926846210 100644
--- a/docs/releasenotes/1.16.2.rst
+++ b/docs/releasenotes/1.16.2.rst
@@ -7,44 +7,44 @@ AusweisApp2 1.16.2
Anwender
""""""""
- - Der Abbruch-Dialog beim Wechsel in den PIN-Änderungsmodus aus einem
- laufenden Ausweisvorgang heraus wird nicht länger angezeigt.
+- Der Abbruch-Dialog beim Wechsel in den PIN-Änderungsmodus aus einem
+ laufenden Ausweisvorgang heraus wird nicht länger angezeigt.
- - Alte Log-Dateien werden unter Android automatisch bereinigt.
+- Alte Log-Dateien werden unter Android automatisch bereinigt.
- - Gekoppelte Smartphones als Kartenleser (SaK) werden jetzt korrekt als
- verfügbar angezeigt, wenn die Verbindung automatisch durch die AA2
- hergestellt wurde.
+- Gekoppelte Smartphones als Kartenleser (SaK) werden jetzt korrekt als
+ verfügbar angezeigt, wenn die Verbindung automatisch durch die AA2
+ hergestellt wurde.
- - Erklärungstexte der mobilen App wurden verbessert.
+- Erklärungstexte der mobilen App wurden verbessert.
- - In der mobilen App erfolgt kein Browser-Redirect mehr, wenn die
- Transport-PIN innerhalb eines Ausweisvorgangs in eine 6-stellige PIN
- überführt wird.
+- In der mobilen App erfolgt kein Browser-Redirect mehr, wenn die
+ Transport-PIN innerhalb eines Ausweisvorgangs in eine 6-stellige PIN
+ überführt wird.
- - Der Fehlerdialog wurde um die Möglichkeit erweitert, eine Email an den
- Support der AusweisApp2 zu senden, mit der Bitte die Protokolldatei
- anzuhängen. Die Email enthält automatisch ermittelte Daten zum
- verwendeten System sowie die letzten, kritischen Fehlermeldungen.
+- Der Fehlerdialog wurde um die Möglichkeit erweitert, eine Email an den
+ Support der AusweisApp2 zu senden, mit der Bitte die Protokolldatei
+ anzuhängen. Die Email enthält automatisch ermittelte Daten zum
+ verwendeten System sowie die letzten, kritischen Fehlermeldungen.
- - Hinterlegte Daten zu Kartenlesern und Diensteanbietern wurden aktualisiert.
+- Hinterlegte Daten zu Kartenlesern und Diensteanbietern wurden aktualisiert.
- - Die Versionsnummer der AusweisApp2 ist nicht mehr Teil des
- Installationspfads, um Probleme mit Antiviren-Software zu vermeiden.
+- Die Versionsnummer der AusweisApp2 ist nicht mehr Teil des
+ Installationspfads, um Probleme mit Antiviren-Software zu vermeiden.
- - Ein Absturz beim Start einer Authentisierung, wenn die AusweisApp2
- im Hintergrund läuft, ist behoben.
+- Ein Absturz beim Start einer Authentisierung, wenn die AusweisApp2
+ im Hintergrund läuft, ist behoben.
- - Die Erkennung von Smartphones als Kartenleser wurde verbessert.
+- Die Erkennung von Smartphones als Kartenleser wurde verbessert.
- - Die Erkennung der Kartenleser in der Diagnose wurde korrigiert.
+- Die Erkennung der Kartenleser in der Diagnose wurde korrigiert.
- - Sonstige kleinere Fehler korrigiert.
+- Sonstige kleinere Fehler korrigiert.
Entwickler
""""""""""
- - Der Standard-Logger der jeweiligen Plattform kann mittels
- Parameter "--no-loghandler" deaktiviert werden.
+- Der Standard-Logger der jeweiligen Plattform kann mittels
+ Parameter "--no-loghandler" deaktiviert werden.
- - Anleitung "Installation in Firmennetzwerken" wurde erweitert.
+- Anleitung "Installation in Firmennetzwerken" wurde erweitert.
diff --git a/docs/releasenotes/1.18.0.rst b/docs/releasenotes/1.18.0.rst
index 19db2ddf8..61673da9f 100644
--- a/docs/releasenotes/1.18.0.rst
+++ b/docs/releasenotes/1.18.0.rst
@@ -7,15 +7,15 @@ AusweisApp2 1.18.0
Anwender
""""""""
- - Aktivierung der NFC-Funktion für iOS 13.
+- Aktivierung der NFC-Funktion für iOS 13.
- - Kleinere Fehlerbehebungen.
+- Kleinere Fehlerbehebungen.
Entwickler
""""""""""
- - Aktualisierung von OpenSSL auf die Version 1.1.1c.
+- Aktualisierung von OpenSSL auf die Version 1.1.1c.
- - Aktualisierung von Qt auf die Version 5.12.4.
+- Aktualisierung von Qt auf die Version 5.12.4.
- - Ein Compiler mit C++17-Support ist erforderlich.
+- Ein Compiler mit C++17-Support ist erforderlich.
diff --git a/docs/releasenotes/1.18.1.rst b/docs/releasenotes/1.18.1.rst
index 7ec7660e8..aa071f185 100644
--- a/docs/releasenotes/1.18.1.rst
+++ b/docs/releasenotes/1.18.1.rst
@@ -7,4 +7,4 @@ AusweisApp2 1.18.1
Entwickler
""""""""""
- - Anpassungen an der Info.plist.
+- Anpassungen an der Info.plist.
diff --git a/docs/releasenotes/1.18.2.rst b/docs/releasenotes/1.18.2.rst
index 2f6b2af80..c2cb3c4da 100644
--- a/docs/releasenotes/1.18.2.rst
+++ b/docs/releasenotes/1.18.2.rst
@@ -7,9 +7,9 @@ AusweisApp2 1.18.2
Anwender
""""""""
- - Kleinere Fehlerbehebungen.
+- Kleinere Fehlerbehebungen.
Entwickler
""""""""""
- - Anpassungen an der Info.plist.
+- Anpassungen an der Info.plist.
diff --git a/docs/releasenotes/1.2.0.rst b/docs/releasenotes/1.2.0.rst
index 70939c4c1..ed4f084cc 100644
--- a/docs/releasenotes/1.2.0.rst
+++ b/docs/releasenotes/1.2.0.rst
@@ -7,20 +7,20 @@ AusweisApp2 1.2.0
Anwender
""""""""
- - Die Bildschirmtastatur wurde überarbeitet.
+- Die Bildschirmtastatur wurde überarbeitet.
- - Die Proxy-Einstellungen wurden überarbeitet.
+- Die Proxy-Einstellungen wurden überarbeitet.
- - Der verwendete Proxy wird nun immer aus den System-Einstellungen übernommen.
+ - Der verwendete Proxy wird nun immer aus den System-Einstellungen übernommen.
- - Die manuelle Konfigurationsoption wurde aus den Einstellungen entfernt.
+ - Die manuelle Konfigurationsoption wurde aus den Einstellungen entfernt.
- - Es fand eine Überarbeitung in Hinblick auf Barrierefreiheit statt.
+- Es fand eine Überarbeitung in Hinblick auf Barrierefreiheit statt.
- - Kleinere optische Verbesserungen vorgenommen.
+- Kleinere optische Verbesserungen vorgenommen.
- - Es wird nun ein Einrichtungsassistenten angeboten, der den Benutzer bei der
- Deinstallation der AusweisApp (1) unterstützt und Verweise auf die
- Herstellerseiten der Kartenleser zum Treiberdownload enthält.
+- Es wird nun ein Einrichtungsassistenten angeboten, der den Benutzer bei der
+ Deinstallation der AusweisApp (1) unterstützt und Verweise auf die
+ Herstellerseiten der Kartenleser zum Treiberdownload enthält.
- - Die Anbieterliste wird nun automatisch aktualisiert.
+- Die Anbieterliste wird nun automatisch aktualisiert.
diff --git a/docs/releasenotes/1.2.1.rst b/docs/releasenotes/1.2.1.rst
index 8febebcdc..9b562cd50 100644
--- a/docs/releasenotes/1.2.1.rst
+++ b/docs/releasenotes/1.2.1.rst
@@ -7,23 +7,23 @@ AusweisApp2 1.2.1
Anwender
""""""""
- - Die URL und das Zertifikat für den Updateserver wurde angepasst.
+- Die URL und das Zertifikat für den Updateserver wurde angepasst.
- - Ein Fehler beim Autostart der AusweisApp2 ist nun behoben.
+- Ein Fehler beim Autostart der AusweisApp2 ist nun behoben.
- - Die PIN-Eingabe bei Verwendung von Basislesern erlaubt nun nur
- noch Ziffern.
+- Die PIN-Eingabe bei Verwendung von Basislesern erlaubt nun nur
+ noch Ziffern.
- - Ein Fehler bei der Bildschirmtastatur, der keine führende Ziffer 0 erlaubte,
- wurde korrigiert.
+- Ein Fehler bei der Bildschirmtastatur, der keine führende Ziffer 0 erlaubte,
+ wurde korrigiert.
- - Die Anordnung der Ziffern bei der Bildschirmtastatur ist unter Windows nun
- auch zufällig.
+- Die Anordnung der Ziffern bei der Bildschirmtastatur ist unter Windows nun
+ auch zufällig.
- - Im Hilfemenü verweist der Eintrag "Fragen" nun auf die neue FAQ-Seite.
+- Im Hilfemenü verweist der Eintrag "Fragen" nun auf die neue FAQ-Seite.
Entwickler
""""""""""
- - Die Vertrauensbasis für die PreVerification (CVCA) der AusweisApp2 wurde aktualisiert.
+- Die Vertrauensbasis für die PreVerification (CVCA) der AusweisApp2 wurde aktualisiert.
diff --git a/docs/releasenotes/1.2.2.rst b/docs/releasenotes/1.2.2.rst
index 436f920fe..6eb50dde8 100644
--- a/docs/releasenotes/1.2.2.rst
+++ b/docs/releasenotes/1.2.2.rst
@@ -7,4 +7,4 @@ AusweisApp2 1.2.2
Anwender
""""""""
- - Umgehung für den von Microsoft ab Windows 8 eingeführten PC/SC Card Reset (5 Sekunden Timeout).
+- Umgehung für den von Microsoft ab Windows 8 eingeführten PC/SC Card Reset (5 Sekunden Timeout).
diff --git a/docs/releasenotes/1.20.0.rst b/docs/releasenotes/1.20.0.rst
index 21a1e9b61..c965630d8 100644
--- a/docs/releasenotes/1.20.0.rst
+++ b/docs/releasenotes/1.20.0.rst
@@ -7,33 +7,33 @@ AusweisApp2 1.20.0
Anwender
""""""""
- - Einführung der neuen grafischen Oberfläche für
- Windows und macOS.
+- Einführung der neuen grafischen Oberfläche für
+ Windows und macOS.
- - Das DMG für macOS ist nun notarisiert.
+- Das DMG für macOS ist nun notarisiert.
- - Unterstützung von Bildschirmlesern unter Android
- und iOS.
+- Unterstützung von Bildschirmlesern unter Android
+ und iOS.
- - Anpassungen der Farbkontraste zur besseren Lesbarkeit.
+- Anpassungen der Farbkontraste zur besseren Lesbarkeit.
- - Optimierung des Menüs und Einführung eines
- Einstellungsbereichs unter iOS und Android.
+- Optimierung des Menüs und Einführung eines
+ Einstellungsbereichs unter iOS und Android.
- - Optimierung der "Smartphone als Kartenleser"-Kopplung.
+- Optimierung der "Smartphone als Kartenleser"-Kopplung.
- - Unterstützung von OS X 10.11 wurde eingestellt.
+- Unterstützung von OS X 10.11 wurde eingestellt.
- - Unterstützung von macOS 10.15.
+- Unterstützung von macOS 10.15.
- - Unterstützung von der x86-Architektur unter Android
- wurde eingestellt.
+- Unterstützung von der x86-Architektur unter Android
+ wurde eingestellt.
- - Kleinere Fehlerbehebungen.
+- Kleinere Fehlerbehebungen.
Entwickler
""""""""""
- - Aktualisierung von OpenSSL auf die Version 1.1.1d.
+- Aktualisierung von OpenSSL auf die Version 1.1.1d.
- - Aktualisierung von Qt auf die Version 5.12.5.
+- Aktualisierung von Qt auf die Version 5.12.5.
diff --git a/docs/releasenotes/1.20.1.rst b/docs/releasenotes/1.20.1.rst
index 9eee5a762..7994ee7a4 100644
--- a/docs/releasenotes/1.20.1.rst
+++ b/docs/releasenotes/1.20.1.rst
@@ -7,29 +7,33 @@ AusweisApp2 1.20.1
Anwender
""""""""
- - Die Nutzung von passwortgeschützten Proxys ist nun
- auch in der neuen grafischen Oberfläche möglich.
+- Die Nutzung von passwortgeschützten Proxys ist nun
+ auch in der neuen grafischen Oberfläche möglich.
- - Auf mobilen Geräten wurde eine Option ergänzt,
- um zwischen Hoch- und Querformat zu wechseln.
+- Auf mobilen Geräten wurde eine Option ergänzt,
+ um zwischen Hoch- und Querformat zu wechseln.
- - Auf Android wurde das Abbrechen einer Authentisierung
- beschleunigt und ein dabei auftretender Absturz beseitigt.
+- Auf Android wurde das Abbrechen einer Authentisierung
+ beschleunigt und ein dabei auftretender Absturz beseitigt.
- - Unter Windows wird bei einer Authentisierung nun auch mit
- der neuen grafischen Oberfläche ein Fortschritt in der
- Taskleiste angezeigt.
+- Unter Windows wird bei einer Authentisierung nun auch mit
+ der neuen grafischen Oberfläche ein Fortschritt in der
+ Taskleiste angezeigt.
- - Kleinere Fehlerbehebungen.
+- Kleinere Fehlerbehebungen.
Entwickler
""""""""""
- - Erweiterung der firmenweiten Installationen des MSI-Paketes
- um die Möglichkeit das Vor-Ort-Auslesen zu aktivieren und
- eine Proxy-Konfiguration zu hinterlegen.
-
- - In der mobilen Version führt ein zehnmaliges Anklicken der Lupe
- auf der Startseite dazu, dass weitere Optionen in den Einstellungen
- sichtbar werden. Dort kann der Testmodus für die Selbstauskunft
- oder das Vor-Ort-Auslesen aktiviert werden.
+- Erweiterung der firmenweiten Installationen des MSI-Paketes
+ um die Möglichkeit das Vor-Ort-Auslesen zu aktivieren und
+ eine Proxy-Konfiguration zu hinterlegen.
+
+- In der mobilen Version führt ein zehnmaliges Anklicken der Lupe
+ auf der Startseite dazu, dass der Testmodus für die Selbstauskunft
+ aktiviert bzw. deaktiviert wird.
+
+- In der mobilen Version führt ein zehnmaliges Anklicken der
+ Versionsnummer in den Versionsinformationen dazu, dass die erweiterten
+ Einstellungen freigeschaltet werden, die es ermöglichen das
+ Vor-Ort-Auslesen zu aktivieren.
diff --git a/docs/releasenotes/1.20.2.rst b/docs/releasenotes/1.20.2.rst
new file mode 100644
index 000000000..3c3f74e0c
--- /dev/null
+++ b/docs/releasenotes/1.20.2.rst
@@ -0,0 +1,53 @@
+AusweisApp2 1.20.2
+^^^^^^^^^^^^^^^^^^
+
+**Releasedatum:** 31. August 2020
+
+
+
+Anwender
+""""""""
+- Es ist nun möglich die PIN/CAN/PUK mit den gewohnten
+ "Copy+Paste"-Methoden des verwendeten Betriebssystems
+ einzufügen (Unterstützung von Passwort-Safes).
+
+- Bei einigen Geräten wurde unter Android 9 und älter
+ nicht in die korrekten WiFi-Einstellungen gesprungen.
+
+- Einige Fehlertexte wurden verbessert.
+
+- Ein Hinweistext (Tooltip) wurde zu den Firewall-Einstellungen
+ im Windows-Installer hinzugefügt.
+
+- Performance der Suche im Anbieterverlauf wurde verbessert.
+
+- Unter Android wurde in der Technologieauswahl fälschlicherweise
+ kurz eine rote Fehlermeldung angezeigt, wenn der Ausweis vor
+ Beginn einer Authentisierung oder PIN-Änderung aufgelegt wurde.
+
+- Die Schriftart bei OnePlus Geräten wurde optimiert.
+
+- Unter macOS wird nun, wenn möglich, die integrierte Grafikkarte
+ verwendet.
+
+- Kleinere Fehlerbehebungen.
+
+
+Entwickler
+""""""""""
+- Unterstützung von Android NDK 21.3 und SDK cmdline-tools 2.1.
+
+- Inkompatibilität mit Qt 5.10 korrigiert.
+
+- Bei Verwendung des Smartphones als Kartenlesegerät wurde im
+ Komfort-Modus ein falscher Text bei der CAN-Allowed-Funktion
+ angezeigt.
+
+- Der Feedback-Dialog wurde unter Android nach der Verwendung des
+ externen SDKs fälschlicherweise angezeigt.
+
+- Die Dokumentation für das integrierte SDK unter Android wurde um
+ Logging und App Bundle erweitert.
+
+- Unterstützung von inklusiver Terminologie.
+ "Blacklist" und "Suppressions" entfernt und umbenannt.
diff --git a/docs/releasenotes/1.6.0.rst b/docs/releasenotes/1.6.0.rst
index 2db547748..916fdfd4d 100644
--- a/docs/releasenotes/1.6.0.rst
+++ b/docs/releasenotes/1.6.0.rst
@@ -7,15 +7,15 @@ AusweisApp2 1.6.0
Anwender
""""""""
- - Optimierungen im Bereich der Barrierefreiheit und Usability vorgenommen.
+- Optimierungen im Bereich der Barrierefreiheit und Usability vorgenommen.
- - Fehlerkorrekturen und Verbesserungen bei den angezeigten Meldungen, dem Fehlerhandling,
- den Eingabe- und Suchfeldern und im Bereich der angezeigten Texte.
+- Fehlerkorrekturen und Verbesserungen bei den angezeigten Meldungen, dem Fehlerhandling,
+ den Eingabe- und Suchfeldern und im Bereich der angezeigten Texte.
- - Der Einrichtungsassistent wurde überarbeitet und erweitert.
+- Der Einrichtungsassistent wurde überarbeitet und erweitert.
Entwickler
""""""""""
- - Aktualisierung der Drittanbieterbibliotheken.
+- Aktualisierung der Drittanbieterbibliotheken.
diff --git a/docs/releasenotes/1.6.1.rst b/docs/releasenotes/1.6.1.rst
index 8baf977d7..08168bd27 100644
--- a/docs/releasenotes/1.6.1.rst
+++ b/docs/releasenotes/1.6.1.rst
@@ -7,8 +7,8 @@ AusweisApp2 1.6.1
Anwender
""""""""
- - Offizielle Unterstützung von Windows 10 und OS X 10.11.
+- Offizielle Unterstützung von Windows 10 und OS X 10.11.
- - Das DMG für OS X ist nun in deutscher und englischer Sprache verfügbar.
+- Das DMG für OS X ist nun in deutscher und englischer Sprache verfügbar.
- - Kleinere Fehlerkorrekturen.
+- Kleinere Fehlerkorrekturen.
diff --git a/docs/releasenotes/1.6.2.rst b/docs/releasenotes/1.6.2.rst
index d59f02c4b..6407685c3 100644
--- a/docs/releasenotes/1.6.2.rst
+++ b/docs/releasenotes/1.6.2.rst
@@ -7,4 +7,4 @@ AusweisApp2 1.6.2
Anwender
""""""""
- - Verbindungsprobleme mit einzelnen Diensten wurden behoben
+- Verbindungsprobleme mit einzelnen Diensten wurden behoben
diff --git a/docs/releasenotes/1.6.3.rst b/docs/releasenotes/1.6.3.rst
index 5df592647..5fbb7bbf0 100644
--- a/docs/releasenotes/1.6.3.rst
+++ b/docs/releasenotes/1.6.3.rst
@@ -7,4 +7,4 @@ AusweisApp2 1.6.3
Anwender
""""""""
- - Fehlermeldung bei der Installation auf Windows behoben.
+- Fehlermeldung bei der Installation auf Windows behoben.
diff --git a/docs/releasenotes/1.8.0.rst b/docs/releasenotes/1.8.0.rst
index c2d4f5787..1d5691631 100644
--- a/docs/releasenotes/1.8.0.rst
+++ b/docs/releasenotes/1.8.0.rst
@@ -7,50 +7,50 @@ AusweisApp2 1.8.0
Anwender
""""""""
- - Updateprüfung wird erst durchgeführt, wenn der Benutzer das
- Fenster öffnet und nicht beim Anwendungsstart. Behebt
- Fehlermeldung beim Autostart, wenn keine Internetverbindung
- besteht.
+- Updateprüfung wird erst durchgeführt, wenn der Benutzer das
+ Fenster öffnet und nicht beim Anwendungsstart. Behebt
+ Fehlermeldung beim Autostart, wenn keine Internetverbindung
+ besteht.
- - Absturz bei VoiceOver unter OS X und PIN-Eingabe behoben.
+- Absturz bei VoiceOver unter OS X und PIN-Eingabe behoben.
- - Verbesserung der Anbieterliste: Behebt einen Aktualisierungsfehler
- in der Darstellung, wenn eine neue Anbieterliste vorhanden ist.
+- Verbesserung der Anbieterliste: Behebt einen Aktualisierungsfehler
+ in der Darstellung, wenn eine neue Anbieterliste vorhanden ist.
- - Überlagerung von zwei Darstellungen beim Wechsel von den Einstellungen
- zu der Verlaufsansicht wurde behoben.
+- Überlagerung von zwei Darstellungen beim Wechsel von den Einstellungen
+ zu der Verlaufsansicht wurde behoben.
- - Die Bildschirmtastatur wird geschlossen, wenn die Karte vom Lesegerät
- entfernt wird.
+- Die Bildschirmtastatur wird geschlossen, wenn die Karte vom Lesegerät
+ entfernt wird.
- - Hinweis auf die notwendige Freischaltung der Karte beim ersten
- Ausweisen. Dies betrifft nur neue Installationen.
+- Hinweis auf die notwendige Freischaltung der Karte beim ersten
+ Ausweisen. Dies betrifft nur neue Installationen.
- - Fehlerbehebung für die automatische Proxy-Erkennung unter Windows.
+- Fehlerbehebung für die automatische Proxy-Erkennung unter Windows.
- - Deinstallationsoption für die AusweisApp1 aus dem Einrichtungsassistenten
- entfernt.
+- Deinstallationsoption für die AusweisApp1 aus dem Einrichtungsassistenten
+ entfernt.
- - Menüleiste unter OS X wird nun bei jedem Start angezeigt.
+- Menüleiste unter OS X wird nun bei jedem Start angezeigt.
- - Fehlermeldungen verbessert.
+- Fehlermeldungen verbessert.
- - Überarbeitung der Darstellung der Release Notes.
+- Überarbeitung der Darstellung der Release Notes.
Entwickler
""""""""""
- - Aktualisierung von OpenSSL auf die Version 1.0.2h.
+- Aktualisierung von OpenSSL auf die Version 1.0.2h.
- - Einführung einer Update-URL für den Betakanal.
+- Einführung einer Update-URL für den Betakanal.
- - Verbesserung bei der Entschlüsselung der Response APDUs
- im Secure Messaging.
+- Verbesserung bei der Entschlüsselung der Response APDUs
+ im Secure Messaging.
- - Einführung von Signatur und Zeitstempel auf .dll und .exe
- unter Windows.
+- Einführung von Signatur und Zeitstempel auf .dll und .exe
+ unter Windows.
- - Link-CVCA DECVCAeID00103_DECVCAeID00104 im TrustStore abgelegt.
+- Link-CVCA DECVCAeID00103_DECVCAeID00104 im TrustStore abgelegt.
- - SHA256 and SHA384 ist nun für die Verbindung mittels RSA-PSK erlaubt.
+- SHA256 and SHA384 ist nun für die Verbindung mittels RSA-PSK erlaubt.
diff --git a/docs/releasenotes/announce.rst b/docs/releasenotes/announce.rst
index 0af0121c7..6c484e821 100644
--- a/docs/releasenotes/announce.rst
+++ b/docs/releasenotes/announce.rst
@@ -1,16 +1,22 @@
Abkündigungen
=============
+Mit der Version 1.24.0 der AusweisApp2 wird die Unterstützung
+folgender Systeme eingestellt.
+
+ - Windows 7
+
+
Mit der Version 1.22.0 der AusweisApp2 wird die Unterstützung
folgender Systeme und Funktionen eingestellt.
- - macOS Sierra 10.12
- - Vorherige grafische Oberfläche
- - Bluetooth (Reiner SCT cyberJack Wave)
+- macOS Sierra 10.12
+- Vorherige grafische Oberfläche
+- Bluetooth (Reiner SCT cyberJack Wave)
Mit der Version 1.20.0 der AusweisApp2 wurde die Unterstützung
folgender Systeme eingestellt.
- - OS X 10.11
- - x86-Architektur unter Android
+- OS X 10.11
+- x86-Architektur unter Android
diff --git a/docs/releasenotes/appcast.rst b/docs/releasenotes/appcast.rst
index 4f2342a96..ce9a7496d 100644
--- a/docs/releasenotes/appcast.rst
+++ b/docs/releasenotes/appcast.rst
@@ -4,6 +4,7 @@ Release Notes
.. toctree::
:maxdepth: 1
+ 1.20.2
1.20.1
announce
issues
diff --git a/docs/releasenotes/issues.rst b/docs/releasenotes/issues.rst
index f6db50bac..b1af6ad57 100644
--- a/docs/releasenotes/issues.rst
+++ b/docs/releasenotes/issues.rst
@@ -1,12 +1,12 @@
Bekannte Fehler
===============
- - Bei der Nutzung eines Smartphones als Kartenleser mit aktiviertem
- Tastaturmodus kann bei einer Authentisierung nicht in die PIN-Änderung
- gewechselt werden, wenn nur eine fünfstellige PIN vorhanden ist.
+- Bei der Nutzung eines Smartphones als Kartenleser mit aktiviertem
+ Tastaturmodus kann bei einer Authentisierung nicht in die PIN-Änderung
+ gewechselt werden, wenn nur eine fünfstellige PIN vorhanden ist.
- - Wird der Screenreader aktiviert, während die AusweisApp2 bereits läuft,
- kann es zu Fehlverhalten kommen.
+- Wird der Screenreader aktiviert, während die AusweisApp2 bereits läuft,
+ kann es zu Fehlverhalten kommen.
Windows / macOS
@@ -25,57 +25,59 @@ Windows / macOS
als Version 1.20.0 auf eine aktuelle Version der AusweisApp2 dazu kommen,
dass die Einstellung der Firewall verloren geht und dadurch ein "Smartphone
als Kartenleser" nicht mehr erkannt wird. Bitte gehen Sie in die
- Systemsteuerung Ihres Endgeräts und deinstallieren Sie die AusweisApp2
+ Systemsteuerung Ihres Endgeräts und deinstallieren Sie die AusweisApp2,
um danach eine Neuinstallation durchzuführen.
- - Auf Windows 10 Plattformen mit aktivierter Benutzerkontensteuerung kann
- es bei Benutzern mit eingeschränkten Berechtigungen zu Problemen mit der
- Online-Ausweisfunktion kommen.
+- Auf Windows 10 Plattformen mit aktivierter Benutzerkontensteuerung kann
+ es bei Benutzern mit eingeschränkten Berechtigungen zu Problemen mit der
+ Online-Ausweisfunktion kommen.
- - Derzeit kommt es noch zu leichten Schwierigkeiten bei der Bedienbarkeit
- mit der Tastatur.
+- Derzeit kommt es noch zu leichten Schwierigkeiten bei der Bedienbarkeit
+ mit der Tastatur.
- - Bei Verwendung des Screenreaders JAWS unter Windows, kann es zu
- leichten Irritationen bei der angegebenen Bedienung kommen.
+- Bei Verwendung des Screenreaders JAWS unter Windows, kann es zu
+ leichten Irritationen bei der angegebenen Bedienung kommen.
- - Wenn die AusweisApp2 heruntergefahren wird, während eine Authentisierung
- oder eine PIN-Änderung mit Komfort-Kartenleser durchgeführt wird, kann es
- unter Windows und macOS zu einem Absturz kommen.
+- Wenn die AusweisApp2 heruntergefahren wird, während eine Authentisierung
+ oder eine PIN-Änderung mit Komfort-Kartenleser durchgeführt wird, kann es
+ unter Windows und macOS zu einem Absturz kommen.
- - Unter macOS wird der Hinweis bei falscher PIN-Bestätigung während der
- PIN-Änderung nur sehr kurz angezeigt.
+- Unter macOS wird der Hinweis bei falscher PIN-Bestätigung während der
+ PIN-Änderung nur sehr kurz angezeigt.
- - Unter Windows wird bei der neuen grafischen Oberfläche der
- "Datei speichern unter"-Dialog nicht automatisch bei Beginn einer
- Authentisierung geschlossen.
+- Unter Windows wird bei der neuen grafischen Oberfläche der
+ "Datei speichern unter"-Dialog nicht automatisch bei Beginn einer
+ Authentisierung geschlossen.
- - Unter macOS können per Tastatur mit den Standardsystemeinstellungen nur
- Textfelder angesprungen werden. Mit Änderung der Tastaturnavigationsoption
- unter "Systemeinstellungen/Tastatur/Kurzbefehle" auf "Alle Steuerungen" kann
- das Verhalten von macOS geändert werden, sodass auch alle anderen
- Komponenten in der App fokussiert werden können.
+- Unter macOS können per Tastatur mit den Standardsystemeinstellungen nur
+ Textfelder angesprungen werden. Mit Änderung der Tastaturnavigationsoption
+ unter "Systemeinstellungen/Tastatur/Kurzbefehle" auf "Alle Steuerungen" kann
+ das Verhalten von macOS geändert werden, sodass auch alle anderen
+ Komponenten in der App fokussiert werden können.
- - Bei einigen Links werden die Steuerzeichen vom Bildschirmleser vorgelesen.
+- Bei einigen Links werden die Steuerzeichen vom Bildschirmleser vorgelesen.
Android / iOS
-------------
- - Mit der NFC-Schnittstelle des iPhone 7 (Plus) unter iOS 13.0 und 13.1 werden
- viele Ausweise nicht erkannt (hauptsächlich NFC-A) und es kommt zu
- Abbrüchen der Authentisierung. Aktualisieren Sie auf iOS 13.2 oder höher.
+- Mit der NFC-Schnittstelle des iPhone 7 (Plus) unter iOS 13.0 und 13.1 werden
+ viele Ausweise nicht erkannt (hauptsächlich NFC-A) und es kommt zu
+ Abbrüchen der Authentisierung. Aktualisieren Sie auf iOS 13.2 oder höher.
- - Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
- auf Android und iOS.
+- Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
+ auf Android und iOS.
- - Längere Texte können unter Android u.U. bei kleinen Bildschirmgrößen
- abgeschnitten sein.
+- Längere Texte können unter Android u.U. bei kleinen Bildschirmgrößen
+ abgeschnitten sein.
+
+- Unter iOS kann derzeit das Hoch- bzw. Querformat nicht geändert werden.
Alte grafische Oberfläche
-------------------------
- - Bei Erhöhung der Schriftgröße über 175% kommt es zur Nutzungseinschränkung.
+- Bei Erhöhung der Schriftgröße über 175% kommt es zur Nutzungseinschränkung.
- - Bei aktivierter Kontrasteinstellung ist unter Windows u. U.
- die Darstellung der Farben nicht optimal.
+- Bei aktivierter Kontrasteinstellung ist unter Windows u. U.
+ die Darstellung der Farben nicht optimal.
diff --git a/docs/releasenotes/support.rst b/docs/releasenotes/support.rst
index a47f0a32a..e991b0656 100644
--- a/docs/releasenotes/support.rst
+++ b/docs/releasenotes/support.rst
@@ -8,23 +8,23 @@ der AusweisApp2 unterstützt.
Betriebssysteme
"""""""""""""""
- - macOS 10.12
+- macOS 10.12
- - macOS 10.13
+- macOS 10.13
- - macOS 10.14
+- macOS 10.14
- - macOS 10.15
+- macOS 10.15
- - Windows 7 SP1 (32bit / 64bit)
+- Windows 7 SP1 (32bit / 64bit)
- - Windows 8.1 (64bit)
+- Windows 8.1 (64bit)
- - Windows 10 (64bit)
+- Windows 10 (64bit)
- - Android 5.0 und höher (armeabi-v7a, arm64-v8a)
+- Android 5.0 und höher (armeabi-v7a, arm64-v8a)
- - iOS 13 und höher
+- iOS 13 und höher
Karten
diff --git a/docs/releasenotes/versions.rst b/docs/releasenotes/versions.rst
index bc02bef9e..efaa1a7a8 100644
--- a/docs/releasenotes/versions.rst
+++ b/docs/releasenotes/versions.rst
@@ -6,8 +6,9 @@ Versionszweig 1.20
.. toctree::
:maxdepth: 1
- 1.20.0
+ 1.20.2
1.20.1
+ 1.20.0
Versionszweig 1.18
diff --git a/docs/sdk/android.rst b/docs/sdk/android.rst
index b1d5d13d4..ecd6a1fc8 100644
--- a/docs/sdk/android.rst
+++ b/docs/sdk/android.rst
@@ -41,7 +41,7 @@ The following listing shows the required **jcenter** in **build.gradle**.
The integrated AusweisApp2 will be fetched automatically as a dependency by
your **app/build.gradle** file.
It is recommended to always use the latest version by **1.+** of AusweisApp2.
-But you are free to add a concrete version like **1.20.1**.
+But you are free to add a concrete version like **1.20.2**.
.. code-block:: groovy
@@ -60,6 +60,42 @@ But you are free to add a concrete version like **1.20.1**.
https://developer.android.com/studio/build/manifest-merge.html
+App Bundle
+^^^^^^^^^^
+
+The integrated AusweisApp2 uses native libraries which need to be extracted when
+used in an App Bundle, otherwise the SDK will not work correctly.
+
+Add the following statement to your app's gradle.properties file:
+
+.. code-block:: groovy
+
+ android.bundle.enableUncompressedNativeLibs=false
+
+
+Logging
+^^^^^^^
+
+The AusweisApp2 uses default logging of Android and has its own log file.
+It is **recommended** to collect that log file if an error occurs in
+your application to receive better support.
+
+The log file is in your application path:
+
+.. code-block:: text
+
+ /data/data/your.application.name/files/AusweisApp2.XXXXXX.log
+
+The *XXXXXX* characters will be replaced by an automatically generated
+portion of the filename to avoid conflicts with previous instances.
+
+A new log file will be created for each new instance of the AusweisApp2 and
+will be deleted after a correct shutdown.
+In case of old or multiple log files, it is highly probable that the
+previous instance crashed.
+
+The AusweisApp2 deletes any log files that are older than 14 days.
+
External
--------
diff --git a/docs/sdk/messages.rst b/docs/sdk/messages.rst
index c6ca0a00b..f601f25a7 100644
--- a/docs/sdk/messages.rst
+++ b/docs/sdk/messages.rst
@@ -584,8 +584,10 @@ this message will be send as a notification.
If your application receives this message it should
show a hint to the user.
-After the user inserted a card the workflow will automatically
-continue, unless the eID functionality is disabled.
+After the user inserted a card, the workflow will continue automatically,
+unless both the eID functionality and CAN allowed mode are disabled.
+CAN allowed mode is enabled if the AusweisApp2 is used as SDK and the
+certificate contains the CAN allowed right.
In this case, the workflow will be paused until another card is inserted.
If the user already inserted a card this message will not be sent at all.
diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt
index 4825846c4..35da9b527 100644
--- a/libs/CMakeLists.txt
+++ b/libs/CMakeLists.txt
@@ -69,23 +69,8 @@ ELSE()
SET(PERL_EXECUTABLE perl)
ENDIF()
-FIND_PROGRAM(PATCH_CMD patch CMAKE_FIND_ROOT_PATH_BOTH)
-IF(PATCH_CMD)
- SET(PATCH_OPTIONS -i)
- MESSAGE(STATUS "Using 'patch' command... ${PATCH_CMD}")
-ELSE()
- MESSAGE(STATUS "Cannot find 'patch' command... using patch.py")
-
- IF(CMAKE_VERSION VERSION_LESS "3.12")
- FIND_HOST_PACKAGE(PythonInterp REQUIRED)
- SET(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
- ELSE()
- FIND_HOST_PACKAGE(Python REQUIRED)
- ENDIF()
-
- SET(PATCH_CMD ${Python_EXECUTABLE} ${PROJECT_SOURCE_DIR}/patch.py --debug -v)
-ENDIF()
-SET(PATCH_CMD ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PROJECT_SOURCE_DIR}/patches)
+SET(PATCH_CMAKE ${CMAKE_CURRENT_BINARY_DIR}/patch.cmake)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/patch.cmake.in ${PATCH_CMAKE} @ONLY)
IF(NOT DESTINATION_DIR)
SET(DESTINATION_DIR ${PROJECT_BINARY_DIR}/dist)
@@ -103,6 +88,10 @@ STRING(REPLACE "\\" "/" PACKAGES_DIR ${PACKAGES_DIR})
SET_DIRECTORY_PROPERTIES(PROPERTIES EP_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/b)
INCLUDE(Messages)
+IF(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL CMAKE_SYSTEM_NAME)
+ GET_FILENAME_COMPONENT(compiler "${CMAKE_CXX_COMPILER}" NAME)
+ STRING(REGEX REPLACE "[a-z|+]+$" "" CROSS_PREFIX "${compiler}")
+ENDIF()
################################## Versions
SET(QT 5.12.5)
@@ -161,6 +150,10 @@ ELSEIF(APPLE)
SET(OPENSSL_COMPILER_FLAGS ${OPENSSL_COMPILER_FLAGS} -mmacosx-version-min=10.12)
ELSEIF(MINGW)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} mingw)
+
+ IF(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} --cross-compile-prefix=${CROSS_PREFIX})
+ ENDIF()
ELSEIF(MSVC)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-asm)
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
@@ -209,9 +202,7 @@ ExternalProject_Add(openssl
URL_HASH SHA256=${OPENSSL_HASH}
DOWNLOAD_DIR ${PACKAGES_DIR}
- PATCH_COMMAND ${PATCH_CMD}/openssl-android-shlib_variant.patch &&
- ${PATCH_CMD}/openssl-Fix-an-overflow-bug-in-rsaz_512_sqr.patch &&
- ${PATCH_CMD}/openssl-Adjust-iOS-target.patch
+ PATCH_COMMAND ${CMAKE_COMMAND} -DCOMPONENT=openssl -P ${PATCH_CMAKE}
CONFIGURE_COMMAND ${OPENSSL_ENV} ${PERL_EXECUTABLE} Configure --prefix=${DESTINATION_DIR} ${OPENSSL_CONFIGURE_FLAGS} "${OPENSSL_COMPILER_FLAGS}"
BUILD_COMMAND ${OPENSSL_ENV} ${MAKE} ${MAKE_JOBS}
BUILD_IN_SOURCE 1
@@ -252,7 +243,6 @@ IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
SET(QT_CONFIGURE_FLAGS -debug)
ENDIF()
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -qml-debug)
- SET(QT_PATCH_COMMAND ${PATCH_CMD}/qt-Enable-debug-output-for-OpenSSL.patch &&)
ELSE()
SET(QT_CONFIGURE_FLAGS -release -optimize-size -no-qml-debug)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} $<$:-force-debug-info>)
@@ -324,8 +314,16 @@ ELSEIF(WIN32)
SET(QT_OPENSSL OPENSSL_LIBS=-lcrypto\ -lssl)
ENDIF()
- SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_OPENSSL} -opengl dynamic -no-icu -no-sql-odbc -platform ${QT_PLATFORM})
- SET(QT_CONFIGURE configure.bat)
+ SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_OPENSSL} -no-icu -no-sql-odbc)
+
+ IF(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -opengl dynamic -platform ${QT_PLATFORM})
+ SET(QT_CONFIGURE configure.bat)
+ ELSEIF(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -opengl desktop -xplatform ${QT_PLATFORM} -device-option CROSS_COMPILE=${CROSS_PREFIX})
+ ELSE()
+ MESSAGE(FATAL_ERROR "Cross-Compiling not supported: ${CMAKE_HOST_SYSTEM_NAME}")
+ ENDIF()
ELSEIF(ANDROID)
FIND_PACKAGE(Java COMPONENTS Development REQUIRED)
@@ -361,23 +359,7 @@ ExternalProject_Add(qt
URL_HASH SHA256=${QT_HASH}
DOWNLOAD_DIR ${PACKAGES_DIR}
- PATCH_COMMAND ${QT_PATCH_COMMAND}
- ${PATCH_CMD}/qt-Port-python-check-to-configure-system.patch &&
- ${PATCH_CMD}/qt-Disable-unused-imageformats.patch &&
- ${PATCH_CMD}/qt-Add-work-around-for-freebsd-build.patch &&
- ${PATCH_CMD}/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch &&
- ${PATCH_CMD}/qt-Remove-unused-plugins-from-the-build.patch &&
- ${PATCH_CMD}/qt-disable-designer.patch &&
- ${PATCH_CMD}/qt-Disable-qmltime-for-shared-build.patch &&
- ${PATCH_CMD}/qt-Add-Q_CORE_EXPORT-to-lcEventDispatcher.patch &&
- ${PATCH_CMD}/qt-Adjust-iOS-target.patch &&
- ${PATCH_CMD}/qt-Filesystem-avoid-crashes-on-exit-in-case-the-locale-.patch &&
- ${PATCH_CMD}/qt-Revert-Android-Stick-with-buildToolsVersion-28.0.3.patch &&
- ${PATCH_CMD}/qt-Remove-dead-code-to-fix-a-lint-warning.patch &&
- ${PATCH_CMD}/qt-Fix-llvm-strip.patch &&
- ${PATCH_CMD}/qt-Handle-exceptions-when-accessing-android-clipboard.patch &&
- ${PATCH_CMD}/qt-Fix-build-with-macOS-10.15-and-deployment-10.12.patch &&
- ${PATCH_CMD}/qt-Pass-SDK-root-to-the-linker-as-isysroot-not-Wl-sysli.patch &&
+ PATCH_COMMAND ${CMAKE_COMMAND} -DCOMPONENT=qt -P ${PATCH_CMAKE} &&
${CMAKE_COMMAND} -E touch qtbase/.gitignore
CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES}
BUILD_COMMAND ${MAKE} ${MAKE_JOBS}
diff --git a/libs/README.rst b/libs/README.rst
index 8185201ab..53a000a3e 100644
--- a/libs/README.rst
+++ b/libs/README.rst
@@ -231,29 +231,29 @@ Android
Die Toolchain für Android wird derzeit nur unter Linux unterstützt. Dabei müssen folgende
Komponenten vorhanden sein:
-- Android NDK mit gesetztem ANDROID_NDK
+- Android NDK mit gesetztem ANDROID_NDK_ROOT
- https://developer.android.com/tools/sdk/ndk/index.html
- - Getestet: r18 (https://wiki.qt.io/Qt_for_Android_known_issues)
+ - Getestet: r21d (https://wiki.qt.io/Qt_for_Android_known_issues)
-- Android SDK mit gesetztem ANDROID_HOME
+- Android SDK (cmdline) mit gesetztem ANDROID_SDK_ROOT
- - https://developer.android.com/studio/releases/sdk-tools.html
+ - https://developer.android.com/studio#cmdline-tools
- - Getestet: 26.1.1
+ - Getestet: 26.1.1 / 2.1
- SDK build tools
- https://developer.android.com/studio/releases/build-tools
- - Getestet: 28.0.3
+ - Getestet: 29.0.3
- SDK platform tools
- https://developer.android.com/studio/releases/platform-tools
- - Getestet: 28.0.1
+ - Getestet: 30.0.3
- Um Qt erfolgreich zu bauen, ist mindestens ein API-Levelpaket von Android notwendig.
Dieses sollte mindestens Level 21 sein. Nähere Informationen dazu
diff --git a/libs/patch.cmake.in b/libs/patch.cmake.in
new file mode 100644
index 000000000..84b22c19a
--- /dev/null
+++ b/libs/patch.cmake.in
@@ -0,0 +1,57 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0)
+
+FUNCTION(PATCH_SOURCES_EXECUTE _patchlist)
+ FOREACH(_patch ${_patchlist})
+ GET_FILENAME_COMPONENT(filename "${_patch}" NAME)
+ MESSAGE(STATUS "Apply patch: ${filename}")
+ EXECUTE_PROCESS(COMMAND "${PATCH_CMD}" ${PATCH_OPTIONS} ${_patch} RESULT_VARIABLE _result)
+
+ IF(NOT _result EQUAL 0)
+ MESSAGE(FATAL_ERROR "Patch failed with exit code: ${_result}")
+ ENDIF()
+ ENDFOREACH()
+ENDFUNCTION()
+
+FUNCTION(PATCH_SOURCES _component)
+ SET(PATCHES_DIR @PROJECT_SOURCE_DIR@/patches)
+
+ IF("@CMAKE_BUILD_TYPE@" STREQUAL "DEBUG")
+ FILE(GLOB PATCHES_DEBUG "${PATCHES_DIR}/debug/${_component}-*.patch")
+ PATCH_SOURCES_EXECUTE("${PATCHES_DEBUG}")
+ ENDIF()
+
+ FILE(GLOB PATCHES "${PATCHES_DIR}/${_component}-*.patch")
+ PATCH_SOURCES_EXECUTE("${PATCHES}")
+ENDFUNCTION()
+
+MACRO(SEARCH_PATCH_CMD)
+ IF(NOT DEFINED ENV{FORCE_PATCH_PY})
+ FIND_PROGRAM(PATCH_CMD patch CMAKE_FIND_ROOT_PATH_BOTH)
+ ENDIF()
+
+ IF(PATCH_CMD)
+ SET(PATCH_OPTIONS -p1 -i)
+ MESSAGE(STATUS "Using 'patch' command... ${PATCH_CMD}")
+ ELSE()
+ MESSAGE(STATUS "Cannot find 'patch' command... using patch.py")
+
+ IF(CMAKE_VERSION VERSION_LESS "3.12")
+ FIND_PACKAGE(PythonInterp REQUIRED)
+ SET(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
+ ELSE()
+ FIND_PACKAGE(Python REQUIRED)
+ ENDIF()
+
+ SET(PATCH_CMD ${Python_EXECUTABLE})
+ SET(PATCH_OPTIONS @PROJECT_SOURCE_DIR@/patch.py -p1 --debug -v)
+ ENDIF()
+ENDMACRO()
+
+
+
+IF(COMPONENT MATCHES "qt|openssl")
+ SEARCH_PATCH_CMD()
+ PATCH_SOURCES(${COMPONENT})
+ELSE()
+ MESSAGE(FATAL_ERROR "Component unknown: ${COMPONENT}")
+ENDIF()
diff --git a/libs/patches/qt-Enable-debug-output-for-OpenSSL.patch b/libs/patches/debug/qt-Enable-debug-output-for-OpenSSL.patch
similarity index 100%
rename from libs/patches/qt-Enable-debug-output-for-OpenSSL.patch
rename to libs/patches/debug/qt-Enable-debug-output-for-OpenSSL.patch
diff --git a/libs/patches/qt-Add-NfcTagType4A-and-NfcTagType4B-to-QNearFieldTarge.patch b/libs/patches/qt-Add-NfcTagType4A-and-NfcTagType4B-to-QNearFieldTarge.patch
new file mode 100644
index 000000000..6dacc09b3
--- /dev/null
+++ b/libs/patches/qt-Add-NfcTagType4A-and-NfcTagType4B-to-QNearFieldTarge.patch
@@ -0,0 +1,67 @@
+From 8d7319cf4bdc8a2b39c4869fb4267f0388f50cde Mon Sep 17 00:00:00 2001
+From: Lars Schmertmann
+Date: Thu, 11 Jun 2020 09:06:18 +0200
+Subject: Add NfcTagType4A and NfcTagType4B to QNearFieldTarget::Type
+
+Let the applications know which signalling type is used, is
+important for the support because a lot of mobile devices
+have different behavior.
+
+Task-number: QTBUG-81824
+Change-Id: I8c3e2143d2f005c416173d7f62d04a2a272c616a
+Reviewed-by: Alex Blasche
+---
+ src/nfc/qnearfieldtarget.cpp | 5 ++++-
+ src/nfc/qnearfieldtarget.h | 2 ++
+ src/nfc/qnearfieldtarget_android.cpp | 4 ++--
+ 3 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+index e9a6fa11..476e7bfc 100644
+--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
++++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+@@ -91,7 +91,10 @@ QT_BEGIN_NAMESPACE
+ \value NfcTagType1 An NFC tag type 1 target.
+ \value NfcTagType2 An NFC tag type 2 target.
+ \value NfcTagType3 An NFC tag type 3 target.
+- \value NfcTagType4 An NFC tag type 4 target.
++ \value NfcTagType4 An NFC tag type 4 target. This value is used if the NfcTagType4
++ cannot be further refined by NfcTagType4A or NfcTagType4B below.
++ \value NfcTagType4A An NFC tag type 4 target based on ISO/IEC 14443-3A.
++ \value NfcTagType4B An NFC tag type 4 target based on ISO/IEC 14443-3B.
+ \value MifareTag A Mifare target.
+ */
+
+diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
+index 868b52d5..2f224379 100644
+--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
++++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
+@@ -70,6 +70,8 @@ public:
+ NfcTagType2,
+ NfcTagType3,
+ NfcTagType4,
++ NfcTagType4A,
++ NfcTagType4B,
+ MifareTag
+ };
+ Q_ENUM(Type)
+diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+index 78da6ac2..6b2bf7ff 100644
+--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
++++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+@@ -449,10 +449,10 @@ QNearFieldTarget::Type NearFieldTarget::getTagType() const
+ if ((sakS & 0x0064) == 0x0000)
+ return NfcTagType2;
+ else if ((sakS & 0x0064) == 0x0020)
+- return NfcTagType4;
++ return NfcTagType4A;
+ return ProprietaryTag;
+ } else if (m_techList.contains(NFCBTECHNOLOGY)) {
+- return NfcTagType4;
++ return NfcTagType4B;
+ } else if (m_techList.contains(NFCFTECHNOLOGY)) {
+ return NfcTagType3;
+ }
+--
+2.27.0
+
diff --git a/resources/asan_blacklist b/resources/asan_suppressions
similarity index 82%
rename from resources/asan_blacklist
rename to resources/asan_suppressions
index de183bf80..b0dae86a0 100644
--- a/resources/asan_blacklist
+++ b/resources/asan_suppressions
@@ -1,5 +1,5 @@
# Recommended usage:
-# LSAN_OPTIONS=suppressions=/home/dev/AusweisApp2.src/resources/asan_blacklist ./AusweisApp2
+# LSAN_OPTIONS=suppressions=/home/dev/AusweisApp2.src/resources/asan_suppressions ./AusweisApp2
leak:g_malloc*
leak:libxcb*
diff --git a/resources/images/tutorial/generated/reader_sac_menu_android_de.svg b/resources/images/tutorial/generated/reader_sac_menu_android_de.svg
index 8c7e6451d..7899080a5 100644
--- a/resources/images/tutorial/generated/reader_sac_menu_android_de.svg
+++ b/resources/images/tutorial/generated/reader_sac_menu_android_de.svg
@@ -1,6 +1,6 @@
diff --git a/resources/images/tutorial/src/reader_sac_menu_android_de.svg b/resources/images/tutorial/src/reader_sac_menu_android_de.svg
index 4f2130056..a8e5f97e7 100644
--- a/resources/images/tutorial/src/reader_sac_menu_android_de.svg
+++ b/resources/images/tutorial/src/reader_sac_menu_android_de.svg
@@ -2,5 +2,5 @@
diff --git a/resources/images/tutorial/src/reader_sac_menu_android_en.svg b/resources/images/tutorial/src/reader_sac_menu_android_en.svg
index 6fb0b71e8..8ac070016 100644
--- a/resources/images/tutorial/src/reader_sac_menu_android_en.svg
+++ b/resources/images/tutorial/src/reader_sac_menu_android_en.svg
@@ -1,6 +1,6 @@
diff --git a/resources/jenkins/docker/android/Dockerfile b/resources/jenkins/docker/android/Dockerfile
index ae56ef918..a13fbb0c6 100644
--- a/resources/jenkins/docker/android/Dockerfile
+++ b/resources/jenkins/docker/android/Dockerfile
@@ -1,11 +1,17 @@
FROM ubuntu:swarm
MAINTAINER Governikus KG
-ARG ANDROID_SDK_TOOLS=4333796
-ARG ANDROID_NDK_VERSION=r21d
+ARG ANDROID_CMDLINE_TOOLS=6609375
+ARG ANDROID_NDK_VERSION=21.3.6528147
ARG CMAKE=3.17.3
ENV NAME=Android LABELS="Android" PACKAGES_DIR=/home/governikus/packages
+ENV ANDROID_SDK_ROOT /opt/android-sdk
+ENV ANDROID_NDK_ROOT $ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION
+
+# Remove this later: https://github.com/openssl/openssl/pull/11206
+ENV ANDROID_NDK $ANDROID_NDK_ROOT
+
RUN apt-get update && \
apt-get -y install g++ make ccache ninja-build perl unzip gradle maven patch openjdk-8-jdk-headless && \
ln -s /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/java-8-openjdk && \
@@ -15,18 +21,9 @@ RUN apt-get update && \
RUN wget https://github.com/Kitware/CMake/releases/download/v$CMAKE/cmake-$CMAKE-Linux-x86_64.sh -O /tmp/cmake.sh && \
sh /tmp/cmake.sh --prefix=/usr --skip-license --exclude-subdir && rm /tmp/cmake.sh
-ENV ANDROID_HOME /opt/android-sdk
-RUN mkdir -p /tmp/dl/sdk && cd /tmp/dl/sdk && wget -O sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-$ANDROID_SDK_TOOLS.zip && \
- unzip sdk.zip && mkdir -p $ANDROID_HOME && mv tools/ $ANDROID_HOME
-RUN yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;29.0.3" "platform-tools" "platforms;android-29"
-
-ENV ANDROID_NDK_HOME /opt/android-ndk
-ENV ANDROID_NDK=${ANDROID_NDK_HOME}
-
-RUN mkdir -p /tmp/dl/ndk && \
- cd /tmp/dl/ndk && \
- wget -O ndk.zip https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip && \
- unzip ndk.zip && mv android-ndk-${ANDROID_NDK_VERSION} ${ANDROID_NDK} && \
+RUN mkdir -p /tmp/dl && cd /tmp/dl && wget -O sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS}_latest.zip && \
+ unzip sdk.zip && \
+ yes | /tmp/dl/tools/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "cmdline-tools;2.1" "build-tools;29.0.3" "platform-tools" "platforms;android-29" "ndk;${ANDROID_NDK_VERSION}" && \
rm -rf /tmp/dl
USER governikus
diff --git a/resources/jenkins/dsl/Releases/Release_iOS.groovy b/resources/jenkins/dsl/Releases/Release_iOS.groovy
index 6cea754a1..f48a6677c 100644
--- a/resources/jenkins/dsl/Releases/Release_iOS.groovy
+++ b/resources/jenkins/dsl/Releases/Release_iOS.groovy
@@ -6,7 +6,7 @@ def j = new Release
name: 'iOS_IPA',
libraries: ['iOS'],
label: 'iOS',
- artifacts: 'build/*.ipa,build/*.zip,build/*.bcsymbolmap'
+ artifacts: 'build/*.ipa,build/*.zip,build/*.bcsymbolmap,*.tar.zstd'
).generate(this)
@@ -35,6 +35,7 @@ j.with
shell('cd build; xcodebuild -configuration MinSizeRel -archivePath AusweisApp2.xcarchive -scheme AusweisApp archive')
shell('cd build; xcodebuild -configuration MinSizeRel -archivePath AusweisApp2.xcarchive -exportArchive -exportOptionsPlist exportOptions.plist -exportPath .')
+ shell('cmake -E tar cf AusweisApp2_BuildDir.tar.zstd --zstd build')
shell('cd build; xcodebuild -configuration MinSizeRel -target ipa')
conditionalSteps
diff --git a/resources/jenkins/import.py b/resources/jenkins/import.py
index 46d35bce2..10a4d3970 100755
--- a/resources/jenkins/import.py
+++ b/resources/jenkins/import.py
@@ -53,7 +53,6 @@ def save(self, file, request_id=None, diff_rev=None):
patchy = PatchHelper()
except Exception:
print('Cannot import rbtools')
- pass
def main():
diff --git a/resources/packaging/android/AndroidManifest.xml.aar.in b/resources/packaging/android/AndroidManifest.xml.aar.in
index 5dfdf5590..adeb37616 100644
--- a/resources/packaging/android/AndroidManifest.xml.aar.in
+++ b/resources/packaging/android/AndroidManifest.xml.aar.in
@@ -1,5 +1,8 @@
-
+
@@ -16,10 +19,12 @@
+ android:name="org.qtproject.qt5.android.bindings.QtApplication"
+ android:label="@string/app_name"
+ android:allowBackup="true"
+ android:fullBackupContent="@xml/backup_rules"
+ android:extractNativeLibs="true"
+ tools:targetApi="23">
diff --git a/resources/packaging/android/pom.xml.in b/resources/packaging/android/pom.xml.in
index 696384daa..3bea04d01 100644
--- a/resources/packaging/android/pom.xml.in
+++ b/resources/packaging/android/pom.xml.in
@@ -3,7 +3,7 @@
4.0.0com.governikusausweisapp
- @PROJECT_VERSION@
+ @PROJECT_VERSION@@POM_SNAPSHOT@aarGovernikus AusweisApp2https://github.com/Governikus/AusweisApp2/
diff --git a/resources/packaging/macos/Info.plist.in b/resources/packaging/macos/Info.plist.in
index e1e680c98..f86d422b9 100644
--- a/resources/packaging/macos/Info.plist.in
+++ b/resources/packaging/macos/Info.plist.in
@@ -39,5 +39,7 @@
1NSHighResolutionCapableTrue
+ NSSupportsAutomaticGraphicsSwitching
+ True
diff --git a/resources/packaging/win/WIX.Texts.de-DE.wxl b/resources/packaging/win/WIX.Texts.de-DE.wxl
index 5d8271f8f..a35b5a8bf 100644
--- a/resources/packaging/win/WIX.Texts.de-DE.wxl
+++ b/resources/packaging/win/WIX.Texts.de-DE.wxl
@@ -49,5 +49,6 @@
Verknüpfung auf dem Desktop anlegenNotwendige Regeln zur Windows-Firewall hinzufügen
+ Firewallregeln sind u.A. für die Funktion Smartphone als Kartenleser notwendig.Starten der AusweisApp2
diff --git a/resources/packaging/win/WIX.Texts.en-US.wxl b/resources/packaging/win/WIX.Texts.en-US.wxl
index 7b8dfcaca..02da15fc2 100644
--- a/resources/packaging/win/WIX.Texts.en-US.wxl
+++ b/resources/packaging/win/WIX.Texts.en-US.wxl
@@ -9,5 +9,6 @@
Create link on desktopAdd required rules to Windows Firewall
- Start AusweisApp
+ Firewall rules are required, among others, by the function smartphone as card reader.
+ Start AusweisApp2
diff --git a/resources/packaging/win/WIX.template.in b/resources/packaging/win/WIX.template.in
index e343c825c..f92afb064 100644
--- a/resources/packaging/win/WIX.template.in
+++ b/resources/packaging/win/WIX.template.in
@@ -175,7 +175,7 @@
-
+
diff --git a/resources/qml/+desktop/main.qml b/resources/qml/+desktop/main.qml
index 46bafc3ca..c48002ae4 100644
--- a/resources/qml/+desktop/main.qml
+++ b/resources/qml/+desktop/main.qml
@@ -30,7 +30,7 @@ import QtQml.Models 2.10
import QtQuick 2.10
import QtQuick.Controls 2.3
import QtGraphicalEffects 1.0
-import Qt.labs.platform 1.1 as Labs
+import Qt.labs.platform 1.0 as Labs
ApplicationWindow {
diff --git a/resources/qml/Governikus/ChangePinView/+mobile/ChangePinView.qml b/resources/qml/Governikus/ChangePinView/+mobile/ChangePinView.qml
index c0a7c22cd..172dc373a 100644
--- a/resources/qml/Governikus/ChangePinView/+mobile/ChangePinView.qml
+++ b/resources/qml/Governikus/ChangePinView/+mobile/ChangePinView.qml
@@ -128,7 +128,7 @@ SectionPage {
: ChangePinModel.isBasicReader ? qsTr("Please don't move the ID card.")
: !!NumberModel.inputError ? NumberModel.inputError
//: INFO ANDROID IOS The card communcation was aborted, the online identification functionality is deactivated and needs to be actived by the authorities.
- : NumberModel.pinDeactivated ? qsTr("The online identification function of your ID card is not activated. Please contact the authority responsible for issuing your identification card to activate the online identification function.")
+ : NumberModel.pinDeactivated ? qsTr("The online identification function of your ID card is not activated. Please contact your responsible authority to activate the online identification function.")
: changePinController.workflowState === ChangePinController.WorkflowStates.Update
|| changePinController.workflowState === ChangePinController.WorkflowStates.Pin
//: INFO ANDROID IOS Either an comfort card reader or smartphone-as-card-reader is used, the user needs to react to request on that device.
diff --git a/resources/qml/Governikus/EnterPasswordView/+desktop/EnterPasswordView.qml b/resources/qml/Governikus/EnterPasswordView/+desktop/EnterPasswordView.qml
index f7e971bb9..fa69a1c29 100644
--- a/resources/qml/Governikus/EnterPasswordView/+desktop/EnterPasswordView.qml
+++ b/resources/qml/Governikus/EnterPasswordView/+desktop/EnterPasswordView.qml
@@ -29,12 +29,7 @@ SectionPage
//: LABEL DESKTOP_QML %1 is the title, e.g. "PIN entry"
Accessible.name: qsTr("%1. You can start to enter the number.").arg(mainText.text) + SettingsModel.translationTrigger
Accessible.description: qsTr("This is the enter password view of the AusweisApp2.") + SettingsModel.translationTrigger
- Keys.onPressed: {
- if (focus && event.key >= Qt.Key_0 && event.key <= Qt.Key_9) {
- numberField.append(event.key - Qt.Key_0)
- numberField.forceActiveFocus()
- }
- }
+ Keys.onPressed: event.accepted = numberField.handleKeyEvent(event.key, event.modifiers)
onPasswordTypeChanged: numberField.inputConfirmation = ""
onVisibleChanged: if (!visible) numberField.text = ""
@@ -137,6 +132,10 @@ SectionPage
//: LABEL DESKTOP_QML
: passwordType === NumberModel.PASSWORD_REMOTE_PIN ? qsTr("Enter pairing code")
//: LABEL DESKTOP_QML
+ : passwordType === NumberModel.PASSWORD_NEW_PIN && numberField.inputConfirmation === "" ? qsTr("Enter new PIN")
+ //: LABEL DESKTOP_QML
+ : passwordType === NumberModel.PASSWORD_NEW_PIN ? qsTr("Confirm new PIN")
+ //: LABEL DESKTOP_QML
: NumberModel.requestTransportPin ? qsTr("Enter Transport PIN")
//: LABEL DESKTOP_QML
: qsTr("Enter PIN")) + SettingsModel.translationTrigger
@@ -299,7 +298,11 @@ SectionPage
submitEnabled: numberField.validInput
deleteEnabled: numberField.text.length > 0
onDigitPressed: numberField.append(digit)
- onDeletePressed: numberField.removeLast()
+ onDeletePressed: {
+ numberField.removeLast()
+ if (numberField.text.length === 0)
+ numberField.forceActiveFocus()
+ }
onSubmitPressed: d.setPassword()
}
diff --git a/resources/qml/Governikus/EnterPasswordView/+desktop/PasswordInfoView.qml b/resources/qml/Governikus/EnterPasswordView/+desktop/PasswordInfoView.qml
index 3d999113e..95eb3c6b8 100644
--- a/resources/qml/Governikus/EnterPasswordView/+desktop/PasswordInfoView.qml
+++ b/resources/qml/Governikus/EnterPasswordView/+desktop/PasswordInfoView.qml
@@ -91,7 +91,7 @@ SectionPage {
}
//: INFO DESKTOP_QML Description text of PIN
- return qsTr("The Personal Identification Number (PIN) is chosen by you and is required for every use of the online eID function. You can change it anytime and indefinitely if you know your valid PIN. For your six-digit PIN choose a combination of numbers, that is not easy to guess, neither \"123456\" nor your birth date, or any other numbers printed on the ID card. If you are no longer aware of your valid PIN, you will need to contact the authority responsible for issuing your identification card to renew your PIN.
When changing the PIN for the first time, please use the five-digit Transport PIN. You will find the Transport PIN in the letter you received from the authority responsible for issuing your identification card (marked in red) after you have applied for your identity card.
Please note that you can not use the online eID function with the five-digit Transport PIN. A change to a six-digit PIN is mandatory.")
+ return qsTr("The Personal Identification Number (PIN) is chosen by you and is required for every use of the online eID function. You can change it anytime and indefinitely if you know your valid PIN. For your six-digit PIN choose a combination of numbers, that is not easy to guess, neither \"123456\" nor your birth date, or any other numbers printed on the ID card. If you are no longer aware of your valid PIN, you will need to contact your responsible authority to renew your PIN.
When changing the PIN for the first time, please use the five-digit Transport PIN. You will find the Transport PIN in the letter you received from your responsible authority (marked in red) after you have applied for your identity card.
Please note that you can not use the online eID function with the five-digit Transport PIN. A change to a six-digit PIN is mandatory.")
}
textStyle: Style.text.header_inverse
horizontalAlignment: Text.AlignJustify
diff --git a/resources/qml/Governikus/EnterPasswordView/+mobile/EnterPasswordView.qml b/resources/qml/Governikus/EnterPasswordView/+mobile/EnterPasswordView.qml
index 064f8e35f..bcb2c7bf4 100644
--- a/resources/qml/Governikus/EnterPasswordView/+mobile/EnterPasswordView.qml
+++ b/resources/qml/Governikus/EnterPasswordView/+mobile/EnterPasswordView.qml
@@ -3,6 +3,7 @@
*/
import QtQuick 2.10
+import QtQuick.Controls 2.10
import QtQuick.Layouts 1.3
import Governikus.Global 1.0
@@ -54,9 +55,15 @@ SectionPage
}
GText {
+ id: infoText
+
Layout.alignment: Qt.AlignVCenter
Layout.fillWidth: true
Layout.maximumWidth: Math.ceil(implicitWidth)
+ Layout.fillHeight: true
+
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
textStyle: {
if (!pinField.confirmedInput || !!NumberModel.inputError || baseItem.state === "CAN" || baseItem.state === "PUK") {
@@ -109,13 +116,20 @@ SectionPage
//: LABEL ANDROID IOS
: qsTr("Please enter your PIN.")
}
+
+ MouseArea {
+ enabled: infoText.truncated
+
+ anchors.fill: parent
+ anchors.margins: -12
+
+ onClicked: completeTextPopup.open()
+ }
}
Item {/*spacer*/ Layout.fillWidth: true; }
}
- Item {/*spacer*/ Layout.fillHeight: true }
-
Rectangle {
Layout.alignment: Qt.AlignHCenter
Layout.preferredHeight: pinField.height + Constants.component_spacing
@@ -173,8 +187,6 @@ SectionPage
}
}
- Item {/*spacer*/ Layout.fillHeight: true }
-
NumberPad {
state: baseItem.state
@@ -185,7 +197,11 @@ SectionPage
submitEnabled: pinField.validInput
deleteEnabled: pinField.text.length > 0
onDigitPressed: pinField.append(digit)
- onDeletePressed: pinField.removeLast()
+ onDeletePressed: {
+ pinField.removeLast()
+ if (pinField.text.length === 0)
+ pinField.forceActiveFocus()
+ }
onSubmitPressed: {
switch(baseItem.state) {
case "PIN":
@@ -217,4 +233,11 @@ SectionPage
}
}
}
+
+ ConfirmationPopup {
+ id: completeTextPopup
+
+ style: ConfirmationPopup.PopupStyle.OkButton
+ text: infoText.text
+ }
}
diff --git a/resources/qml/Governikus/Global/+desktop/TabbedPane.qml b/resources/qml/Governikus/Global/+desktop/TabbedPane.qml
index de7e461ea..207967c03 100644
--- a/resources/qml/Governikus/Global/+desktop/TabbedPane.qml
+++ b/resources/qml/Governikus/Global/+desktop/TabbedPane.qml
@@ -173,7 +173,7 @@ Item {
Accessible.role: Accessible.PageTab
Accessible.name: delegateLoader.item ? delegateLoader.item.sectionName : ""
- width: parent.width
+ width: sectionNameList.width
height: delegateLoader.height + 2 * Constants.pane_padding
RoundedRectangle {
diff --git a/resources/qml/Governikus/Global/+mobile/SwipeActionDelegate.qml b/resources/qml/Governikus/Global/+mobile/SwipeActionDelegate.qml
index d2b0600c7..b89fda441 100644
--- a/resources/qml/Governikus/Global/+mobile/SwipeActionDelegate.qml
+++ b/resources/qml/Governikus/Global/+mobile/SwipeActionDelegate.qml
@@ -18,21 +18,22 @@ Rectangle {
signal actionClicked
height: content.childrenRect.height
- width: parent.width
+ width: content.childrenRect.width
Image {
- Accessible.role: Accessible.Button
- Accessible.name: actionAccessibleName
- Accessible.onPressAction: baseItem.actionClicked()
-
id: actionImage
+
anchors {
top: parent.top
bottom: parent.bottom
right: parent.right
margins: 20
}
+
width: Math.abs(mouseArea.actionOpenOffset) - anchors.margins * 2
+ Accessible.role: Accessible.Button
+ Accessible.name: actionAccessibleName
+ Accessible.onPressAction: baseItem.actionClicked()
fillMode: Image.PreserveAspectFit
}
diff --git a/resources/qml/Governikus/Global/BaseConfirmationPopup.qml b/resources/qml/Governikus/Global/BaseConfirmationPopup.qml
index aa3229882..3ca421748 100644
--- a/resources/qml/Governikus/Global/BaseConfirmationPopup.qml
+++ b/resources/qml/Governikus/Global/BaseConfirmationPopup.qml
@@ -51,7 +51,9 @@ Popup {
}
}
- anchors.centerIn: Overlay.overlay
+ parent: Overlay.overlay
+ x: Math.round((parent.width - width) / 2)
+ y: Math.round((parent.height - height) / 2)
contentWidth: Overlay.overlay ? Math.min(0.75 * Overlay.overlay.width, Style.dimens.max_text_width) : 0
margins: Constants.pane_padding
padding: 0
@@ -103,24 +105,50 @@ Popup {
text: root.title
textStyle: root.headerTextStyle
+ maximumLineCount: 5
+ elide: Text.ElideRight
font.bold: true
horizontalAlignment: root.horizontalTextAlignment
FocusFrame {}
}
- GText {
- visible: text !== ""
+ Item {
+ visible: infoText.text !== ""
+
Layout.fillWidth: true
- Layout.rightMargin: Constants.pane_padding
- Layout.leftMargin: Constants.pane_padding
+ implicitHeight: infoTextFlickable.implicitHeight
- activeFocusOnTab: true
+ GFlickable {
+ id: infoTextFlickable
- text: root.text
- horizontalAlignment: root.horizontalTextAlignment
+ anchors.fill: parent
+ anchors.leftMargin: Constants.pane_padding
+ anchors.rightMargin: Constants.pane_padding
+ implicitHeight: root.Overlay.overlay ? Math.min(infoText.height, 0.5 * root.Overlay.overlay.height) : 0
- FocusFrame {}
+ contentHeight: infoText.implicitHeight
+ contentWidth: width
+ clip: true
+
+ GText {
+ id: infoText
+
+ width: parent.width
+ height: implicitHeight
+ rightPadding: Constants.pane_padding
+
+ activeFocusOnTab: true
+
+ text: root.text
+ horizontalAlignment: root.horizontalTextAlignment
+ }
+ }
+
+ FocusFrame {
+ scope: infoText
+ framee: infoTextFlickable
+ }
}
Column {
diff --git a/resources/qml/Governikus/Global/GButton.qml b/resources/qml/Governikus/Global/GButton.qml
index 8fb065d8a..f0256341c 100644
--- a/resources/qml/Governikus/Global/GButton.qml
+++ b/resources/qml/Governikus/Global/GButton.qml
@@ -44,7 +44,7 @@ Button {
contentItem: RowLayout {
z: 1
- spacing: root.icon.source != "" ? Constants.text_spacing : 0
+ spacing: root.icon.source != "" && root.text != "" ? Constants.text_spacing : 0
TintableIcon {
readonly property color iconColor: root.textStyle.textColor
@@ -69,6 +69,8 @@ Button {
color: !animationsDisabled && root.pressed ? root.textHighlightColor : root.textStyle.textColor
text: root.text
horizontalAlignment: root.icon.source == "" ? Text.AlignHCenter : Text.AlignLeft
+ maximumLineCount: 1
+ elide: Text.ElideRight
FocusFrame {
scope: root
diff --git a/resources/qml/Governikus/Global/GTextField.qml b/resources/qml/Governikus/Global/GTextField.qml
index 7f7378588..07135a878 100644
--- a/resources/qml/Governikus/Global/GTextField.qml
+++ b/resources/qml/Governikus/Global/GTextField.qml
@@ -28,7 +28,6 @@ TextField {
selectByMouse: true
selectedTextColor: Style.color.primary_text_inverse
selectionColor: Style.color.accent
- placeholderTextColor: Style.color.secondary_text
ToolTip.visible: text.length === maximumLength && focus
ToolTip.text: qsTr("Maximum allowed length reached.") + SettingsModel.translationTrigger
diff --git a/resources/qml/Governikus/Global/NumberField.qml b/resources/qml/Governikus/Global/NumberField.qml
index e998a13a7..d4fd42513 100644
--- a/resources/qml/Governikus/Global/NumberField.qml
+++ b/resources/qml/Governikus/Global/NumberField.qml
@@ -38,13 +38,29 @@ Item {
//: LABEL DESKTOP_QML Screenreader text for the password field
) + " " + qsTr("You entered %1 of %2 digits.").arg(text.length).arg(passwordLength)
+ SettingsModel.translationTrigger
- Keys.onPressed: {
- if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9) {
- numberField.append(event.key - Qt.Key_0)
+ Keys.onPressed: event.accepted = root.handleKeyEvent(event.key, event.modifiers)
+
+ function handleKeyEvent(eventKey, eventModifiers = Qt.NoModifier) {
+ if (eventKey >= Qt.Key_0 && eventKey <= Qt.Key_9) {
+ root.append(eventKey - Qt.Key_0)
+ }
+ else if (eventKey === Qt.Key_Backspace) {
+ root.removeLast()
+ }
+ else if (eventKey === Qt.Key_Delete) {
+ echoField.clear()
+ }
+ else if (eventKey === Qt.Key_Paste || (eventKey === Qt.Key_V) && (eventModifiers & Qt.ControlModifier)) {
+ echoField.paste()
}
- else if (event.key === Qt.Key_Backspace) {
- numberField.removeLast()
+ else {
+ return false
}
+
+ // Otherwise focus is lost if last clicked button gets invisible
+ // like 'C' in NumberPad.
+ root.forceActiveFocus()
+ return true
}
FontMetrics {
@@ -67,6 +83,21 @@ Item {
FocusFrame {
framee: layout
+
+ MouseArea {
+ anchors.fill: parent
+
+ cursorShape: Qt.PointingHandCursor
+ acceptedButtons: Qt.AllButtons
+
+ onPressAndHold: root.handleKeyEvent(Qt.Key_Paste)
+ onClicked: {
+ root.forceActiveFocus()
+ if (mouse.button == Qt.RightButton || mouse.button == Qt.MiddleButton) {
+ echoField.paste()
+ }
+ }
+ }
}
RowLayout {
diff --git a/resources/qml/Governikus/Global/Utils.qml b/resources/qml/Governikus/Global/Utils.qml
index ce58475b6..f5a4062f7 100644
--- a/resources/qml/Governikus/Global/Utils.qml
+++ b/resources/qml/Governikus/Global/Utils.qml
@@ -74,7 +74,7 @@ QtObject {
}
function shuffle(pArray) {
- for (let i = pArray.length - 1; i > 0; i--) {
+ for (var i = pArray.length - 1; i > 0; i--) {
let j = Random.randomInt(0, i);
let x = pArray[i];
pArray[i] = pArray[j];
diff --git a/resources/qml/Governikus/HistoryView/+desktop/HistoryView.qml b/resources/qml/Governikus/HistoryView/+desktop/HistoryView.qml
index 2cd9412dc..789c6dcc5 100644
--- a/resources/qml/Governikus/HistoryView/+desktop/HistoryView.qml
+++ b/resources/qml/Governikus/HistoryView/+desktop/HistoryView.qml
@@ -53,6 +53,8 @@ SectionPage {
customSubAction: SearchBar {
id: searchBar
+ visible: HistoryModel.rowCount() > 0
+
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
onDisplayTextChanged: HistoryModel.searchFilter.setFilterString(displayText)
@@ -136,8 +138,11 @@ SectionPage {
activeFocusOnTab: true
- //: INFO DESKTOP_QML No authentication history, placeholder text.
- text: qsTr("Currently there are no history entries.") + SettingsModel.translationTrigger
+ text: (HistoryModel.rowCount() === 0
+ //: INFO DESKTOP_QML No authentication history, placeholder text.
+ ? qsTr("Currently there are no history entries.")
+ //: INFO DESKTOP_QML No authentication history entries match the search, placeholder text.
+ : qsTr("No history entries match your search term.")) + SettingsModel.translationTrigger
textStyle: Style.text.header_inverse
}
}
diff --git a/resources/qml/Governikus/HistoryView/+mobile/BaseHistoryView.qml b/resources/qml/Governikus/HistoryView/+mobile/BaseHistoryView.qml
index d8a3a08a6..e961bcd1a 100644
--- a/resources/qml/Governikus/HistoryView/+mobile/BaseHistoryView.qml
+++ b/resources/qml/Governikus/HistoryView/+mobile/BaseHistoryView.qml
@@ -51,11 +51,12 @@ SectionPage {
}
delegate: HistoryListViewDelegate {
- historyModelItem: model
+ width: listView.width
Accessible.onScrollDownAction: historyListView.positionViewAtIndex(index, ListView.Beginning)
Accessible.onScrollUpAction: historyListView.positionViewAtIndex(index, ListView.End)
+ historyModelItem: model
showSeparator: index < listView.count - 1
onClicked: firePushWithProperties(detailsHistoryView, {historyModelItem: historyModelItem})
diff --git a/resources/qml/Governikus/IdentifyView/+desktop/IdentifyView.qml b/resources/qml/Governikus/IdentifyView/+desktop/IdentifyView.qml
index 2444b051b..fef0e2ae3 100644
--- a/resources/qml/Governikus/IdentifyView/+desktop/IdentifyView.qml
+++ b/resources/qml/Governikus/IdentifyView/+desktop/IdentifyView.qml
@@ -312,7 +312,7 @@ SectionPage
}
if (NumberModel.pinDeactivated) {
//: INFO DESKTOP_QML The online authentication feature of the ID card is deactivated and needs to be activated by the local authorities.
- return qsTr("The online identification function of your ID card is not activated. Please contact the authority responsible for issuing your identification card to activate the online identification function.")
+ return qsTr("The online identification function of your ID card is not activated. Please contact your responsible authority to activate the online identification function.")
}
//: INFO DESKTOP_QML Generic progress status message during authentication.
return qsTr("Please wait a moment.")
diff --git a/resources/qml/Governikus/IdentifyView/+mobile/IdentifyView.qml b/resources/qml/Governikus/IdentifyView/+mobile/IdentifyView.qml
index 47d26a962..f83d4f979 100644
--- a/resources/qml/Governikus/IdentifyView/+mobile/IdentifyView.qml
+++ b/resources/qml/Governikus/IdentifyView/+mobile/IdentifyView.qml
@@ -183,7 +183,7 @@ SectionPage
}
if (NumberModel.pinDeactivated) {
//: INFO ANDROID IOS The online authentication feature of the ID card is disabled and needs to be actived the be authorities.
- return qsTr("The online identification function of your ID card is not activated. Please contact the authority responsible for issuing your identification card to activate the online identification function.")
+ return qsTr("The online identification function of your ID card is not activated. Please contact your responsible authority to activate the online identification function.")
}
if (identifyController.workflowState === IdentifyController.WorkflowStates.Update || identifyController.workflowState === IdentifyController.WorkflowStates.Pin) {
//: INFO ANDROID IOS The card reader requests the user's attention.
diff --git a/resources/qml/Governikus/Navigation/+ios/NavigationItem.qml b/resources/qml/Governikus/Navigation/+ios/NavigationItem.qml
index 35226648d..c3386a2f9 100644
--- a/resources/qml/Governikus/Navigation/+ios/NavigationItem.qml
+++ b/resources/qml/Governikus/Navigation/+ios/NavigationItem.qml
@@ -3,7 +3,7 @@
*/
import QtQuick 2.10
-import QtGraphicalEffects 1.3
+import QtGraphicalEffects 1.0
import Governikus.Global 1.0
import Governikus.Style 1.0
diff --git a/resources/qml/Governikus/ProviderView/+mobile/+phone/BaseProviderView.qml b/resources/qml/Governikus/ProviderView/+mobile/+phone/BaseProviderView.qml
index b85b72228..661c06453 100644
--- a/resources/qml/Governikus/ProviderView/+mobile/+phone/BaseProviderView.qml
+++ b/resources/qml/Governikus/ProviderView/+mobile/+phone/BaseProviderView.qml
@@ -83,6 +83,7 @@ SectionPage {
interactive: false
model: ProviderCategoryFilterModel
delegate: ProviderListItemDelegate {
+ width: visible ? providerListMain.width : 0
height: visible ? Style.dimens.list_item_height : 0
visible: ProviderCategoryFilterModel.searchString !== ""
}
@@ -109,6 +110,8 @@ SectionPage {
model: ProviderCategoryFilterModel
delegate: ProviderListItemDelegate {
+ width: providerListSection.width
+
Accessible.onScrollDownAction: baseItem.scrollPageDown()
Accessible.onScrollUpAction: baseItem.scrollPageUp()
}
diff --git a/resources/qml/Governikus/RemoteServiceView/RemoteServiceController.qml b/resources/qml/Governikus/RemoteServiceView/RemoteServiceController.qml
index ef5ccbb7f..abcd9a9a4 100644
--- a/resources/qml/Governikus/RemoteServiceView/RemoteServiceController.qml
+++ b/resources/qml/Governikus/RemoteServiceView/RemoteServiceController.qml
@@ -89,7 +89,7 @@ Item {
Connections {
target: RemoteServiceModel
- onFireConnectedChanged: if (!pConnected && passwordView.StackView.visible) firePop()
+ onFireConnectedChanged: if (!RemoteServiceModel.connectedToPairedDevice && passwordView.StackView.visible) firePop()
}
}
}
diff --git a/resources/qml/Governikus/SettingsView/+mobile/SettingsView.qml b/resources/qml/Governikus/SettingsView/+mobile/SettingsView.qml
index 05a73053e..227e44594 100644
--- a/resources/qml/Governikus/SettingsView/+mobile/SettingsView.qml
+++ b/resources/qml/Governikus/SettingsView/+mobile/SettingsView.qml
@@ -15,6 +15,8 @@ import Governikus.RemoteServiceView 1.0
import Governikus.Type.SettingsModel 1.0
import Governikus.Type.ApplicationModel 1.0
import Governikus.Type.RemoteServiceModel 1.0
+import Governikus.Type.HistoryModel 1.0
+import Governikus.Type.LogModel 1.0
SectionPage {
id: baseItem
diff --git a/resources/qml/Governikus/View/+mobile/FocusFrame.qml b/resources/qml/Governikus/View/+mobile/FocusFrame.qml
index 93089919c..f1d7c011e 100644
--- a/resources/qml/Governikus/View/+mobile/FocusFrame.qml
+++ b/resources/qml/Governikus/View/+mobile/FocusFrame.qml
@@ -10,4 +10,6 @@ Item {
property real marginFactor
property bool dynamic
property color borderColor
+
+ anchors.fill: framee
}
diff --git a/resources/qml/Governikus/Workflow/+desktop/GeneralWorkflow.qml b/resources/qml/Governikus/Workflow/+desktop/GeneralWorkflow.qml
index 3f06645cd..88f17a5f4 100644
--- a/resources/qml/Governikus/Workflow/+desktop/GeneralWorkflow.qml
+++ b/resources/qml/Governikus/Workflow/+desktop/GeneralWorkflow.qml
@@ -183,11 +183,11 @@ SectionPage
switch (waitingFor) {
case Workflow.WaitingFor.Reader:
//: INFO DESKTOP_QML AA2 is waiting for the card reader or the ID card.
- return d.foundSelectedReader ? requestCardText : qsTr("No card reader detected. Please make sure that a USB card reader is connected or a smartphone as cardreader is paired and available. Open the %1reader settings%2 to configure readers and get more information about supported readers.").arg("").arg("")
+ return d.foundSelectedReader ? requestCardText : qsTr("No card reader detected. Please make sure that an USB card reader is connected or a smartphone as card reader is paired and available. Open the %1reader settings%2 to configure readers and get more information about supported readers.").arg("").arg("")
case Workflow.WaitingFor.Card:
if (NumberModel.pinDeactivated) {
//: INFO DESKTOP_QML The online authentication feature of the card is disabled and needs to be activated by the authorities.
- return qsTr("The online identification function of your ID card is not activated. Please contact the authority responsible for issuing your identification card to activate the online identification function.")
+ return qsTr("The online identification function of your ID card is not activated. Please contact your responsible authority to activate the online identification function.")
}
return requestCardText
case Workflow.WaitingFor.Password:
diff --git a/resources/qml/Governikus/Workflow/+mobile/NfcWorkflow.qml b/resources/qml/Governikus/Workflow/+mobile/NfcWorkflow.qml
index 0edbc391f..111c135cd 100644
--- a/resources/qml/Governikus/Workflow/+mobile/NfcWorkflow.qml
+++ b/resources/qml/Governikus/Workflow/+mobile/NfcWorkflow.qml
@@ -78,7 +78,7 @@ Item {
//: INFO ANDROID IOS The NFC interface does not meet the minimum requirements, using a bluetooth reader or a differnt smarthpone is suggested.
ApplicationModel.extendedLengthApdusUnsupported ? qsTr("Your device does not meet the technical requirements (Extended Length not supported). However you can use a separate 'smartphone as card reader' to utilize the online identification function.") :
//: INFO ANDROID IOS The online authentication feature is disabled and needs to be activated by the authorities.
- NumberModel.pinDeactivated ? qsTr("The online identification function of your ID card is not activated. Please contact the authority responsible for issuing your identification card to activate the online identification function.") :
+ NumberModel.pinDeactivated ? qsTr("The online identification function of your ID card is not activated. Please contact your responsible authority to activate the online identification function.") :
//: INFO ANDROID IOS The ID card may be inserted, the authentication process may be started.
qsTr("Please place your device on your ID card.")
) + SettingsModel.translationTrigger
diff --git a/resources/qml/Governikus/Workflow/+mobile/RemoteWorkflow.qml b/resources/qml/Governikus/Workflow/+mobile/RemoteWorkflow.qml
index 0b05bb533..9522439d9 100644
--- a/resources/qml/Governikus/Workflow/+mobile/RemoteWorkflow.qml
+++ b/resources/qml/Governikus/Workflow/+mobile/RemoteWorkflow.qml
@@ -88,7 +88,7 @@ Item {
return qsTr("To use the remote service WiFi has to be activated. Please activate WiFi in your device settings.");
} else if (!foundSelectedReader) {
//: INFO ANDROID IOS No paired and reachable device was found, hint that the remote device needs to be actually started for this feature.
- return qsTr("No paired smartphone as cardreader (SaC) with activated \"remote service\" available.");
+ return qsTr("No paired smartphone as card reader (SaC) with activated \"remote service\" available.");
} else {
return "";
}
@@ -113,7 +113,7 @@ Item {
qsTr("The connected smartphone as card reader (SaC) unfortunately does not meet the technical requirements (Extended Length not supported).");
} else if (NumberModel.pinDeactivated) {
//: INFO ANDROID IOS The online authentication is disabled and needs to be enabled by the authorities.
- return qsTr("The online identification function of your ID card is not activated. Please contact the authority responsible for issuing your identification card to activate the online identification function.");
+ return qsTr("The online identification function of your ID card is not activated. Please contact your responsible authority to activate the online identification function.");
} else {
//: INFO ANDROID IOS The connection to the smartphone was established, the ID card may be inserted.
return qsTr("Connected to %1. Please place the NFC interface of the smartphone on your ID card.").arg(RemoteServiceModel.connectedServerDeviceNames);
diff --git a/resources/translations/ausweisapp2_de.ts b/resources/translations/ausweisapp2_de.ts
index e943dd7cd..982ee58e5 100644
--- a/resources/translations/ausweisapp2_de.ts
+++ b/resources/translations/ausweisapp2_de.ts
@@ -478,9 +478,9 @@ INFO ANDROID IOS Generic progress message during PIN change process.Bitte den Ausweis nicht bewegen.
-
+
INFO ANDROID IOS The card communcation was aborted, the online identification functionality is deactivated and needs to be actived by the authorities.
- Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihren Ausweis ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+ Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
@@ -1091,6 +1091,16 @@ LABEL ANDROID IOS Button to switch to a Transport PIN or start a change of the T
LABEL DESKTOP_QMLPIN eingeben
+
+
+ LABEL DESKTOP_QML
+ Neue PIN eingeben
+
+
+
+ LABEL DESKTOP_QML
+ Neue PIN bestätigen
+ LABEL DESKTOP_QML
@@ -1326,14 +1336,14 @@ LABEL ANDROID IOS Button to switch to a Transport PIN or start a change of the T
Information
-
+
INFO DESKTOP_QML AA2 is waiting for the card reader or the ID card.Es wurde kein Kartenleser gefunden. Bitte überprüfen Sie, ob ein USB-Kartenleser angeschlossen bzw. ein Smartphone als Kartenleser gekoppelt und verfügbar ist. Öffnen Sie die %1Einstellungen%2, um Kartenleser zu konfigurieren und weitere Hinweise zu erhalten.
-
+
INFO DESKTOP_QML The online authentication feature of the card is disabled and needs to be activated by the authorities.
- Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihren Ausweis ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+ Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
@@ -1526,6 +1536,11 @@ LABEL ANDROID IOS Button to switch to a Transport PIN or start a change of the T
Portable Document Format
+
+
+ INFO DESKTOP_QML No authentication history entries match the search, placeholder text.
+ Es wurden keine Verlaufseinträge zu Ihrer Suche gefunden.
+ HistoryViewConfirmationPopup
@@ -1712,11 +1727,11 @@ INFO ANDROID IOS Generic status message during the authentication process.Bitte warten Sie einen Moment.
-
+
INFO DESKTOP_QML The online authentication feature of the ID card is deactivated and needs to be activated by the local authorities.
----------
INFO ANDROID IOS The online authentication feature of the ID card is disabled and needs to be actived the be authorities.
- Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihren Ausweis ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+ Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
@@ -2442,9 +2457,9 @@ LABEL IOS
Ihr Gerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length). Sie können die Online-Ausweisfunktion aber mit einem anderen Smartphone als Kartenleser nutzen.
-
+
INFO ANDROID IOS The online authentication feature is disabled and needs to be activated by the authorities.
- Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihren Ausweis ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+ Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
@@ -2574,9 +2589,9 @@ LABEL IOS
Es besteht die Möglichkeit Ihr Smartphone als Kartenleser mit der AusweisApp2 zu verwenden. Das Smartphone muss einen unterstützten NFC-Chip verwenden und beide Geräte, sowohl das Smartphone als auch Ihr Rechner, müssen mit dem selben WLAN-Netz verbunden sein.<br><br>Um Ihr Smartphone als Kartenleser zu verwenden muss stets der Fernzugriff in der AusweisApp2 auf Ihrem Smartphone aktiviert sein. Für eine intiale Verbindung der Geräte muss zusätzlich der Kopplungsmodus auf dem Smartphone aktiviert werden, wählen Sie danach das Gerät aus der Liste der verfügbaren Geräte auf Ihrem Rechner und geben Sie den von Ihrem Smartphone dargestellten Kopplungscode ein.
-
+
INFO DESKTOP_QML Description text of PIN
- Die Persönliche Identifikationsnummer (PIN) vergeben Sie selbst und benötigen Sie bei jeder Nutzung der Online-Ausweisfunktion. Sie können diese jederzeit und unbegrenzt oft ändern, solange Ihnen Ihre gültige PIN bekannt ist. Wählen Sie für Ihre sechsstellige PIN eine Zahlenkombination, die nicht leicht zu erraten ist, also weder "123456", noch Ihr Geburtsdatum oder andere Zahlen, die auf dem Ausweis aufgedruckt sind. Sollten Sie Ihre PIN vergessen haben, können Sie in der für die Ausgabe Ihres Ausweises zuständigen Behörde eine neue PIN setzen.<br><br>Zum erstmaligen Setzen Ihrer PIN verwenden Sie bitte die fünfstellige Transport-PIN. Sie finden diese in dem Schreiben, welches Sie nach Beantragung Ihres Ausweises von der zuständigen Behörde erhalten haben (rot markiert).<br><br>Bitte beachten Sie, dass die Online-Ausweisfunktion erst nach Änderung der fünfstelligen Transport-PIN in eine sechsstellige PIN genutzt werden kann.
+ Die Persönliche Identifikationsnummer (PIN) vergeben Sie selbst und benötigen Sie bei jeder Nutzung der Online-Ausweisfunktion. Sie können diese jederzeit und unbegrenzt oft ändern, solange Ihnen Ihre gültige PIN bekannt ist. Wählen Sie für Ihre sechsstellige PIN eine Zahlenkombination, die nicht leicht zu erraten ist, also weder "123456", noch Ihr Geburtsdatum oder andere Zahlen, die auf dem Ausweis aufgedruckt sind. Sollten Sie Ihre PIN vergessen haben, können Sie in Ihrer zuständigen Behörde eine neue PIN setzen.<br><br>Zum erstmaligen Setzen Ihrer PIN verwenden Sie bitte die fünfstellige Transport-PIN. Sie finden diese in dem Schreiben, welches Sie nach Beantragung Ihres Ausweises von Ihrer zuständigen Behörde erhalten haben (rot markiert).<br><br>Bitte beachten Sie, dass die Online-Ausweisfunktion erst nach Änderung der fünfstelligen Transport-PIN in eine sechsstellige PIN genutzt werden kann.
@@ -2639,7 +2654,7 @@ Anderenfalls können Sie nun Ihren Ausweis vom Kartenleser entfernen.
<html>
<h4>Online-Ausweisfunktion deaktiviert</h4>
-<p>Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihren Ausweis ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.</p>
+<p>Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.</p>
</html>
@@ -3490,9 +3505,9 @@ LABEL DESKTOP Text of the button in the proxy credentials popup.
Das verbundene Smartphone als Kartenleser erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt).
-
+
INFO ANDROID IOS The online authentication is disabled and needs to be enabled by the authorities.
- Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihren Ausweis ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+ Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
@@ -3510,7 +3525,7 @@ LABEL DESKTOP Text of the button in the proxy credentials popup.
Um den Fernzugriff zu nutzen, muss WLAN aktiviert werden. Bitte aktivieren Sie WLAN in Ihren Einstellungen.
-
+
INFO ANDROID IOS No paired and reachable device was found, hint that the remote device needs to be actually started for this feature.Kein gekoppeltes Smartphone als Kartenleser mit aktiviertem "Fernzugriff" verfügbar.
@@ -4044,7 +4059,7 @@ LABEL ALL_PLATFORMS
LABEL ANDROID IOS
- Anzeige der Bereichtigungen überspringen
+ Anzeige der Berechtigungen überspringen
@@ -6757,11 +6772,6 @@ klicken.
LABEL ALL_PLATFORMSEine oder mehrere Zertifikatsprüfungen schlugen fehl. Der Vorgang wird aus Sicherheitsgründen abgebrochen.
-
-
- LABEL ALL_PLATFORMS
- Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihren Ausweis ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
- LABEL ALL_PLATFORMS
@@ -6782,6 +6792,11 @@ klicken.
LABEL ALL_PLATFORMSDer Ausweis ist ungültig oder gesperrt.
+
+
+ LABEL ALL_PLATFORMS
+ Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihren Ausweis ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+ governikus::GlobalStatus
@@ -7080,14 +7095,14 @@ klicken.
Fehler bei der Verbindung zum Server. Der Verschlüsselungsalgorithmus oder die Länge des Schlüssels im TLS-Zertifikat des Servers wird nicht unterstützt. Zertifikatsaussteller: %1
-
+
ERROR ANDROID IOS Error message which is used for "masked" errors. Generic message with link to support section of the homepage.
- Eine sichere Verbindung zum Anbieter konnte nicht aufgebaut werden. Bitte kontaktieren Sie unseren %1Support%2.
+ Bei der Verbindung zum Anbieter ist ein unbekannter Netzwerkfehler aufgetreten. Überprüfen Sie die Netzwerkverbindung und versuchen Sie, die App neu zu starten. Wenn dies nicht hilft kontaktieren Sie unseren %1Support%2.
-
+
ERROR DESKTOP Error message which is used for "masked" errors. Generic message with link to support section of the homepage.
- Eine sichere Verbindung zum Anbieter konnte nicht aufgebaut werden. Bitte kontaktieren Sie unseren %1Support%2 oder senden Sie uns eine E-Mail.
+ Bei der Verbindung zum Anbieter ist ein unbekannter Netzwerkfehler aufgetreten. Überprüfen Sie die Netzwerkverbindung und versuchen Sie, die App neu zu starten. Wenn dies nicht hilft kontaktieren Sie unseren %1Support%2 oder senden Sie uns eine E-Mail.
@@ -7699,7 +7714,7 @@ klicken.
INFO ALL_PLATFORMS No smartphone with enabled remote service was found on the same network.
- Kein Smartphone als Kartenleser verfügbar. Bitte stellen Sie sicher, dass die die Funktion "Fernzugriff" in der AusweisApp2 auf Ihrem Smartphone aktiviert ist und beide Geräte mit demselben WLAN verbunden sind. Informationen zur Verwendung finden Sie in der %1.
+ Kein Smartphone als Kartenleser verfügbar. Bitte stellen Sie sicher, dass die Funktion "Fernzugriff" in der AusweisApp2 auf Ihrem Smartphone aktiviert ist und beide Geräte mit demselben WLAN verbunden sind. Informationen zur Verwendung finden Sie in der %1.
@@ -8183,10 +8198,6 @@ klicken.
Die Online-Ausweisfunktion ist deaktiviert.
-
-
- Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
- Verbindungsversuch wiederholen
@@ -8205,6 +8216,10 @@ klicken.
- entfernen Sie Handyhüllen o.Ä.
- verbinden Sie das Smartphone mit dem Ladegerät
+
+
+ Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweises ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+ governikus::StepErrorGui
diff --git a/resources/updatable-files/supported-providers.json b/resources/updatable-files/supported-providers.json
index 24deff711..b6e46b29b 100644
--- a/resources/updatable-files/supported-providers.json
+++ b/resources/updatable-files/supported-providers.json
@@ -134,7 +134,7 @@
"phone": "+49 291 94 0",
"email": "post@hochsauerlandkreis.de",
"postalAddress": "Steinstraße 27 59872 Meschede",
- "image": "HSK_image.jpg",
+ "image": "HSK_image.png",
"icon": "HSK_icon.png",
"category": "citizen",
"subjectUrlInfo": "Using service from Servicekonto Nordrhein-Westfalen (https://servicekonto.nrw)."
@@ -343,10 +343,9 @@
"email": "stadt@braunschweig.de",
"postalAddress": "Stadt Braunschweig Platz der Deutschen Einheit 1 38100 Braunschweig",
"category": "citizen",
- "subjectUrls": ["https://e-id.niedersachsen.de"]
+ "subjectUrlInfo": "Using service from Niedersächsisches Ministerium für Inneres und Sport (https://e-id.niedersachsen.de)."
},
{
- "exclude": ["ios"],
"shortName": {"" : "Bundesagentur für Arbeit"},
"longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich bei der Bundesagentur für Arbeit einfach und zuverlässig über Ihr Kindergeld informieren. Die Anwendung bietet u.a. die Möglichkeit: - sich über den Antragstatus und die Berechnungsgrundlage für den eigenen Kindergeldbezug zu informieren - Ihre persönlichen Daten online zu ändern, z. B. Ihre Adresse - für Kunden der Familienkasse Änderungen vollständig papierlos zu übermitteln."},
"address": "https://www.arbeitsagentur.de/npa",
@@ -581,7 +580,7 @@
"phone": "+49 89 9991 0",
"email": "info@elster.de",
"postalAddress": "Bayerisches Landesamt für Steuern - Dienststelle München 80284 München",
- "image": "elster_image.png",
+ "image": "elster_image.jpg",
"icon": "elster_icon.png",
"category": "citizen",
"subjectUrls": ["https://www.elster.de"]
@@ -634,6 +633,17 @@
"category": "other",
"subjectUrlInfo": "Generic service provider. Order number required to start authentication."
},
+ {
+ "shortName": {"" : "iKFZ Zulassungsstelle Lüneburg"},
+ "longDescription": {"": "Seit dem 01.10.2019 können Sie viele Zulassungsvorgänge online und damit bequem von zu Hause erledigen. Nachdem im Jahr 2015 bzw. 2017 die Online-Außerbetriebsetzung bzw. Online-Wiederzulassung möglich wurden, sind nun weitere Standard-Zulassungsvorgänge dazugekommen. Mit „I-KFZ Stufe 3“ haben Sie jetzt die Möglichkeit, unter bestimmten Voraussetzungen Fahrzeuge online an-, um- oder abzumelden – ohne Wege- und Wartezeiten, unabhängig von unseren Öffnungszeiten."},
+ "address": "https://www.landkreis-lueneburg.de/Home-Landkreis-Lueneburg/Verkehr-Sicherheit-und-Ordnung/Verkehr-Landkreis/Kfz-Zulassungsstelle.aspx",
+ "homepage": "https://www.landkreis-lueneburg.de",
+ "phone": "+49 4131 26 0",
+ "email": "info@landkreis-lueneburg.de",
+ "postalAddress": "Landkreis Lüneburg Auf dem Michaeliskloster 4 21335 Lüneburg",
+ "category": "citizen",
+ "subjectUrlInfo": "Using service from Niedersächsisches Ministerium für Inneres und Sport (https://e-id.niedersachsen.de)."
+ },
{
"exclude": ["ios"],
"shortName": {"" : "invenio"},
@@ -804,6 +814,16 @@
"category": "other",
"subjectUrls": ["https://www.fp-demail.de"]
},
+ {
+ "shortName": {"" : "Niedersächsisches Ministerium für Inneres und Sport"},
+ "homepage": "https://www.mi.niedersachsen.de",
+ "address": "https://www.mi.niedersachsen.de",
+ "phone": "+49 511 120 45 00",
+ "email": "poststelle@mi.niedersachsen.de",
+ "postalAddress": "Niedersächsisches Ministerium für Inneres und Sport Lavesallee 6 30169 Hannover",
+ "category": "citizen",
+ "subjectUrls": ["https://e-id.niedersachsen.de"]
+ },
{
"shortName": {"" : "Siegburg Online"},
"longName": {"" : "Online-Bürgerdienste der Kreisstadt Siegburg"},
diff --git a/resources/updatable-files/supported-readers.json b/resources/updatable-files/supported-readers.json
index bb2386b6b..f191eadb9 100644
--- a/resources/updatable-files/supported-readers.json
+++ b/resources/updatable-files/supported-readers.json
@@ -129,6 +129,11 @@
],
"Information":
[
+ {
+ "Platforms":[{"os": "mac"}, {"os": "win", "max": "6.3"}],
+ "DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber.",
+ "EN": "The card reader is compatible with the installed system driver."
+ },
{
"Platforms":[{"os": "win", "min": "10.0"}],
"DE": "Es ist notwendig, die Treiber vom Hersteller zu installieren. Dazu folgen Sie bitte dem jeweiligen Link für Ihr Betriebssystem zur Herstellerseite.",
@@ -179,7 +184,7 @@
"Drivers":
[
{
- "Platforms": [{"os": "win"}, {"os": "mac", "max": "10.14"}],
+ "Platforms": [{"os": "win"}, {"os": "mac", "max": "10.14"}, {"os": "unknown"}],
"URL": "https://security.kobil.de/idtoken/"
}
],
diff --git a/src/card/base/CardConnection.cpp b/src/card/base/CardConnection.cpp
index b71db79fa..f0b3c3423 100644
--- a/src/card/base/CardConnection.cpp
+++ b/src/card/base/CardConnection.cpp
@@ -52,7 +52,7 @@ void CardConnection::setProgressMessage(const QString& pMessage)
{
QMetaObject::invokeMethod(mCardConnectionWorker.data(), [ = ] {
mCardConnectionWorker->setProgressMessage(pMessage);
- }, Qt::QueuedConnection);
+ }, Qt::BlockingQueuedConnection);
}
diff --git a/src/core/controller/AppController.cpp b/src/core/controller/AppController.cpp
index 1c6ba8293..d602f55d2 100644
--- a/src/core/controller/AppController.cpp
+++ b/src/core/controller/AppController.cpp
@@ -506,7 +506,7 @@ void AppController::onUiPlugin(UIPlugIn* pPlugin)
connect(this, &AppController::fireUiDominationReleased, pPlugin, &UIPlugIn::onUiDominationReleased);
connect(this, &AppController::fireProxyAuthenticationRequired, pPlugin, &UIPlugIn::onProxyAuthenticationRequired);
- connect(pPlugin, &UIPlugIn::fireChangePinRequest, this, &AppController::onChangePinRequested, Qt::QueuedConnection);
+ connect(pPlugin, &UIPlugIn::fireChangePinRequested, this, &AppController::onChangePinRequested, Qt::QueuedConnection);
connect(pPlugin, &UIPlugIn::fireSelfAuthenticationRequested, this, &AppController::onSelfAuthenticationRequested, Qt::QueuedConnection);
connect(pPlugin, &UIPlugIn::fireRemoteServiceRequested, this, &AppController::onRemoteServiceRequested, Qt::QueuedConnection);
connect(pPlugin, &UIPlugIn::fireRestartApplicationRequested, this, &AppController::onRestartApplicationRequested, Qt::QueuedConnection);
diff --git a/src/core/paos/retrieve/DidAuthenticateEac2Parser.cpp b/src/core/paos/retrieve/DidAuthenticateEac2Parser.cpp
index 891c718a0..8842d85ee 100644
--- a/src/core/paos/retrieve/DidAuthenticateEac2Parser.cpp
+++ b/src/core/paos/retrieve/DidAuthenticateEac2Parser.cpp
@@ -54,7 +54,7 @@ PaosMessage* DidAuthenticateEac2Parser::parseMessage()
{
QString ns = PaosCreator::getNamespace(PaosCreator::Namespace::XSI);
QStringRef value = mXmlReader->attributes().value(ns, QStringLiteral("type"));
- if (value.endsWith(QStringLiteral("EAC2InputType")))
+ if (value.endsWith(QLatin1String("EAC2InputType")))
{
mDidAuthenticateEac2->setEac2InputType(parseEac2InputType());
}
diff --git a/src/core/states/StateActivateStoreFeedbackDialog.cpp b/src/core/states/StateActivateStoreFeedbackDialog.cpp
index b58d2e8c1..f20081229 100644
--- a/src/core/states/StateActivateStoreFeedbackDialog.cpp
+++ b/src/core/states/StateActivateStoreFeedbackDialog.cpp
@@ -21,7 +21,7 @@ void StateActivateStoreFeedbackDialog::run()
{
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
auto& settings = Env::getSingleton()->getGeneralSettings();
- if (getContext()->getStatus().isNoError() && settings.askForStoreFeedback())
+ if (getContext()->getStatus().isNoError() && settings.askForStoreFeedback() && !Env::getSingleton()->isUsedAsSDK())
{
settings.setRequestStoreFeedback(true);
}
diff --git a/src/core/states/StateCheckRefreshAddress.cpp b/src/core/states/StateCheckRefreshAddress.cpp
index 71c1b0e64..aa7913a53 100644
--- a/src/core/states/StateCheckRefreshAddress.cpp
+++ b/src/core/states/StateCheckRefreshAddress.cpp
@@ -29,7 +29,7 @@ Q_DECLARE_LOGGING_CATEGORY(network)
StateCheckRefreshAddress::StateCheckRefreshAddress(const QSharedPointer& pContext)
: AbstractState(pContext, false)
, GenericContextContainer(pContext)
- , mReply(nullptr)
+ , mReply()
, mUrl()
, mSubjectUrl()
, mCertificateFetched(false)
@@ -37,15 +37,6 @@ StateCheckRefreshAddress::StateCheckRefreshAddress(const QSharedPointerdeleteLater();
- }
-}
-
-
bool StateCheckRefreshAddress::isMatchingSameOriginPolicyInDevMode() const
{
// Checking for same origin policy needs a special treatment in developer mode because
@@ -168,14 +159,9 @@ QUrl StateCheckRefreshAddress::determineSubjectUrl()
void StateCheckRefreshAddress::sendGetRequest()
{
- if (!mReply.isNull())
- {
- mReply->deleteLater();
- }
-
qDebug() << "Send GET request to URL:" << mUrl.toString();
QNetworkRequest request(mUrl);
- mReply = Env::getSingleton()->get(request);
+ mReply.reset(Env::getSingleton()->get(request), &QObject::deleteLater);
mConnections += connect(mReply.data(), &QNetworkReply::sslErrors, this, &StateCheckRefreshAddress::onSslErrors);
mConnections += connect(mReply.data(), &QNetworkReply::encrypted, this, &StateCheckRefreshAddress::onSslHandshakeDone);
mConnections += connect(mReply.data(), &QNetworkReply::finished, this, &StateCheckRefreshAddress::onNetworkReply);
@@ -260,7 +246,7 @@ void StateCheckRefreshAddress::onNetworkReply()
if (mReply->error() != QNetworkReply::NoError)
{
qCritical() << "An error occured:" << mReply->errorString();
- switch (NetworkManager::toNetworkError(mReply.data()))
+ switch (NetworkManager::toNetworkError(mReply))
{
case NetworkManager::NetworkError::ServiceUnavailable:
reportCommunicationError({GlobalStatus::Code::Network_ServiceUnavailable, {GlobalStatus::ExternalInformation::LAST_URL, mUrl.toString()}
@@ -387,7 +373,7 @@ void StateCheckRefreshAddress::fetchServerCertificate()
//
// "...This means that you are only guaranteed to receive this signal for the first connection to a site in the lifespan of the QNetworkAccessManager."
Env::getSingleton()->clearConnections();
- mReply = Env::getSingleton()->get(request);
+ mReply.reset(Env::getSingleton()->get(request), &QObject::deleteLater);
mConnections += connect(mReply.data(), &QNetworkReply::encrypted, this, &StateCheckRefreshAddress::onSslHandshakeDoneFetchingServerCertificate);
mConnections += connect(mReply.data(), &QNetworkReply::sslErrors, this, &StateCheckRefreshAddress::onSslErrors);
diff --git a/src/core/states/StateCheckRefreshAddress.h b/src/core/states/StateCheckRefreshAddress.h
index ad3e9f7e0..7f85cbb40 100644
--- a/src/core/states/StateCheckRefreshAddress.h
+++ b/src/core/states/StateCheckRefreshAddress.h
@@ -12,7 +12,7 @@
#include "GenericContextContainer.h"
#include
-#include
+#include
#include
#include
#include
@@ -31,7 +31,7 @@ class StateCheckRefreshAddress
friend class ::test_StateCheckRefreshAddress;
private:
- QPointer mReply;
+ QSharedPointer mReply;
QUrl mUrl;
QUrl mSubjectUrl;
bool mCertificateFetched;
@@ -58,7 +58,6 @@ class StateCheckRefreshAddress
void onNetworkErrorFetchingServerCertificate(QNetworkReply::NetworkError pError);
public:
- virtual ~StateCheckRefreshAddress() override;
void onEntry(QEvent* pEvent) override;
};
diff --git a/src/core/states/StateGenericSendReceive.cpp b/src/core/states/StateGenericSendReceive.cpp
index d748ba291..1ee46325e 100644
--- a/src/core/states/StateGenericSendReceive.cpp
+++ b/src/core/states/StateGenericSendReceive.cpp
@@ -266,7 +266,7 @@ void StateGenericSendReceive::run()
qCDebug(network).noquote() << "Try to send raw data:\n" << data;
const QByteArray& paosNamespace = PaosCreator::getNamespace(PaosCreator::Namespace::PAOS).toUtf8();
const auto& session = token->usePsk() ? QByteArray() : getContext()->getSslSession();
- mReply = Env::getSingleton()->paos(request, paosNamespace, data, token->usePsk(), session);
+ mReply.reset(Env::getSingleton()->paos(request, paosNamespace, data, token->usePsk(), session), &QObject::deleteLater);
mConnections += connect(mReply.data(), &QNetworkReply::sslErrors, this, &StateGenericSendReceive::onSslErrors);
mConnections += connect(mReply.data(), &QNetworkReply::encrypted, this, &StateGenericSendReceive::onSslHandshakeDone);
mConnections += connect(mReply.data(), &QNetworkReply::finished, this, &StateGenericSendReceive::onReplyFinished);
@@ -277,15 +277,16 @@ void StateGenericSendReceive::run()
void StateGenericSendReceive::onReplyFinished()
{
qCDebug(network) << "Received message from eID-Server";
- QNetworkReply* reply = mReply.data();
- mReply.clear();
- reply->deleteLater();
- const auto statusCode = NetworkManager::getLoggedStatusCode(reply, spawnMessageLogger(network));
+ const auto guard = qScopeGuard([this] {
+ mReply.reset();
+ });
- if (reply->error() != QNetworkReply::NoError)
+ const auto statusCode = NetworkManager::getLoggedStatusCode(mReply, spawnMessageLogger(network));
+
+ if (mReply->error() != QNetworkReply::NoError)
{
- const auto& channelStatus = NetworkManager::toTrustedChannelStatus(reply);
+ const auto& channelStatus = NetworkManager::toTrustedChannelStatus(mReply);
qCCritical(network) << GlobalStatus(channelStatus);
updateStatus(channelStatus);
Q_EMIT fireAbort();
@@ -295,7 +296,7 @@ void StateGenericSendReceive::onReplyFinished()
if (statusCode >= 500)
{
qCCritical(network) << GlobalStatus(GlobalStatus::Code::Workflow_TrustedChannel_Error_From_Server);
- updateStatus({GlobalStatus::Code::Workflow_TrustedChannel_Error_From_Server, {GlobalStatus::ExternalInformation::LAST_URL, reply->url().toString()}
+ updateStatus({GlobalStatus::Code::Workflow_TrustedChannel_Error_From_Server, {GlobalStatus::ExternalInformation::LAST_URL, mReply->url().toString()}
});
Q_EMIT fireAbort();
return;
@@ -304,13 +305,13 @@ void StateGenericSendReceive::onReplyFinished()
if (statusCode >= 400)
{
qCCritical(network) << GlobalStatus(GlobalStatus::Code::Workflow_Unexpected_Message_From_EidServer);
- updateStatus({GlobalStatus::Code::Workflow_Unexpected_Message_From_EidServer, {GlobalStatus::ExternalInformation::LAST_URL, reply->url().toString()}
+ updateStatus({GlobalStatus::Code::Workflow_Unexpected_Message_From_EidServer, {GlobalStatus::ExternalInformation::LAST_URL, mReply->url().toString()}
});
Q_EMIT fireAbort();
return;
}
- QByteArray message = reply->readAll();
+ QByteArray message = mReply->readAll();
qCDebug(network).noquote() << "Received raw data:\n" << message;
PaosHandler paosHandler(message);
qCDebug(network) << "Received PAOS message of type:" << paosHandler.getDetectedPaosType();
@@ -328,14 +329,14 @@ void StateGenericSendReceive::onReplyFinished()
if (paosHandler.getDetectedPaosType() == PaosType::UNKNOWN)
{
qCCritical(network) << "The program received an unknown message from the server.";
- updateStatus({GlobalStatus::Code::Workflow_Unknown_Paos_From_EidServer, {GlobalStatus::ExternalInformation::LAST_URL, reply->url().toString()}
+ updateStatus({GlobalStatus::Code::Workflow_Unknown_Paos_From_EidServer, {GlobalStatus::ExternalInformation::LAST_URL, mReply->url().toString()}
});
Q_EMIT fireAbort();
}
else
{
qCCritical(network) << "The program received an unexpected message from the server.";
- updateStatus({GlobalStatus::Code::Workflow_Unexpected_Message_From_EidServer, {GlobalStatus::ExternalInformation::LAST_URL, reply->url().toString()}
+ updateStatus({GlobalStatus::Code::Workflow_Unexpected_Message_From_EidServer, {GlobalStatus::ExternalInformation::LAST_URL, mReply->url().toString()}
});
Q_EMIT fireAbort();
}
diff --git a/src/core/states/StateGenericSendReceive.h b/src/core/states/StateGenericSendReceive.h
index c13a3c92a..c31de3cf4 100644
--- a/src/core/states/StateGenericSendReceive.h
+++ b/src/core/states/StateGenericSendReceive.h
@@ -29,7 +29,7 @@ class StateGenericSendReceive
private:
friend class ::test_StateGenericSendReceive;
const QVector mTypesToReceive;
- QPointer mReply;
+ QSharedPointer mReply;
void setReceivedMessage(const QSharedPointer& pMessage);
GlobalStatus::Code checkAndSaveCertificate(const QSslCertificate& pCertificate);
diff --git a/src/core/states/StateGetSelfAuthenticationData.cpp b/src/core/states/StateGetSelfAuthenticationData.cpp
index f394989d8..a73026e6d 100644
--- a/src/core/states/StateGetSelfAuthenticationData.cpp
+++ b/src/core/states/StateGetSelfAuthenticationData.cpp
@@ -20,27 +20,18 @@ using namespace governikus;
StateGetSelfAuthenticationData::StateGetSelfAuthenticationData(const QSharedPointer& pContext)
: AbstractState(pContext, false)
, GenericContextContainer(pContext)
- , mReply(nullptr)
+ , mReply()
{
}
-StateGetSelfAuthenticationData::~StateGetSelfAuthenticationData()
-{
- if (!mReply.isNull())
- {
- mReply->deleteLater();
- }
-}
-
-
void StateGetSelfAuthenticationData::run()
{
QUrl address = getContext()->getRefreshUrl();
qDebug() << address;
QNetworkRequest request(address);
- mReply = Env::getSingleton()->get(request);
+ mReply.reset(Env::getSingleton()->get(request), &QObject::deleteLater);
mConnections += connect(mReply.data(), &QNetworkReply::sslErrors, this, &StateGetSelfAuthenticationData::onSslErrors);
mConnections += connect(mReply.data(), &QNetworkReply::encrypted, this, &StateGetSelfAuthenticationData::onSslHandshakeDone);
mConnections += connect(mReply.data(), &QNetworkReply::finished, this, &StateGetSelfAuthenticationData::onNetworkReply);
diff --git a/src/core/states/StateGetSelfAuthenticationData.h b/src/core/states/StateGetSelfAuthenticationData.h
index e6de3a5ab..4ac804279 100644
--- a/src/core/states/StateGetSelfAuthenticationData.h
+++ b/src/core/states/StateGetSelfAuthenticationData.h
@@ -21,18 +21,17 @@ class StateGetSelfAuthenticationData
, public GenericContextContainer
{
Q_OBJECT
+
friend class StateBuilder;
friend class ::test_StateGetSelfAuthenticationData;
- QPointer mReply;
-
- explicit StateGetSelfAuthenticationData(const QSharedPointer& pContext);
- virtual void run() override;
- void reportCommunicationError(const GlobalStatus& pStatus);
- bool checkSslConnectionAndSaveCertificate(const QSslConfiguration& pSslConfiguration);
+ private:
+ QSharedPointer mReply;
- public:
- virtual ~StateGetSelfAuthenticationData() override;
+ explicit StateGetSelfAuthenticationData(const QSharedPointer& pContext);
+ virtual void run() override;
+ void reportCommunicationError(const GlobalStatus& pStatus);
+ bool checkSslConnectionAndSaveCertificate(const QSslConfiguration& pSslConfiguration);
private Q_SLOTS:
void onNetworkReply();
diff --git a/src/core/states/StateGetTcToken.cpp b/src/core/states/StateGetTcToken.cpp
index 670b52407..88ac67839 100644
--- a/src/core/states/StateGetTcToken.cpp
+++ b/src/core/states/StateGetTcToken.cpp
@@ -29,15 +29,6 @@ StateGetTcToken::StateGetTcToken(const QSharedPointer& pContext
}
-StateGetTcToken::~StateGetTcToken()
-{
- if (!mReply.isNull())
- {
- mReply->deleteLater();
- }
-}
-
-
void StateGetTcToken::run()
{
auto url = getContext()->getTcTokenUrl();
@@ -94,13 +85,8 @@ bool StateGetTcToken::isValidRedirectUrl(const QUrl& pUrl)
void StateGetTcToken::sendRequest(const QUrl& pUrl)
{
- if (!mReply.isNull())
- {
- mReply->deleteLater();
- }
-
QNetworkRequest request(pUrl);
- mReply = Env::getSingleton()->get(request);
+ mReply.reset(Env::getSingleton()->get(request), &QObject::deleteLater);
mConnections += connect(mReply.data(), &QNetworkReply::sslErrors, this, &StateGetTcToken::onSslErrors);
mConnections += connect(mReply.data(), &QNetworkReply::encrypted, this, &StateGetTcToken::onSslHandshakeDone);
mConnections += connect(mReply.data(), &QNetworkReply::finished, this, &StateGetTcToken::onNetworkReply);
@@ -151,8 +137,8 @@ void StateGetTcToken::onNetworkReply()
if (mReply->error() != QNetworkReply::NoError)
{
- qCritical() << NetworkManager::toStatus(mReply.data());
- updateStatus(NetworkManager::toTrustedChannelStatus(mReply.data()));
+ qCritical() << NetworkManager::toStatus(mReply);
+ updateStatus(NetworkManager::toTrustedChannelStatus(mReply));
Q_EMIT fireAbort();
return;
}
diff --git a/src/core/states/StateGetTcToken.h b/src/core/states/StateGetTcToken.h
index 0ad8f7fb6..750fff851 100644
--- a/src/core/states/StateGetTcToken.h
+++ b/src/core/states/StateGetTcToken.h
@@ -11,7 +11,7 @@
#include "GenericContextContainer.h"
#include
-#include
+#include
class test_StateGetTcToken;
@@ -26,7 +26,7 @@ class StateGetTcToken
friend class StateBuilder;
friend class ::test_StateGetTcToken;
- QPointer mReply;
+ QSharedPointer mReply;
void parseTcToken();
void sendRequest(const QUrl& pUrl);
@@ -35,9 +35,6 @@ class StateGetTcToken
explicit StateGetTcToken(const QSharedPointer& pContext);
- public:
- virtual ~StateGetTcToken() override;
-
private Q_SLOTS:
void onNetworkReply();
void onSslHandshakeDone();
diff --git a/src/core/states/remote_service/StatePreparePaceRemote.cpp b/src/core/states/remote_service/StatePreparePaceRemote.cpp
index a37da4b01..0ec0da3ee 100644
--- a/src/core/states/remote_service/StatePreparePaceRemote.cpp
+++ b/src/core/states/remote_service/StatePreparePaceRemote.cpp
@@ -33,6 +33,7 @@ void StatePreparePaceRemote::run()
switch (parser.getPasswordId())
{
case PacePasswordId::PACE_CAN:
+ getContext()->setCanAllowedMode(!parser.getChat().isEmpty() && !parser.getCertificateDescription().isEmpty());
if (getContext()->getCan().isEmpty())
{
Q_EMIT fireEnterPacePassword();
diff --git a/src/file_provider/Downloader.cpp b/src/file_provider/Downloader.cpp
index 14f49aca4..26ef60e14 100644
--- a/src/file_provider/Downloader.cpp
+++ b/src/file_provider/Downloader.cpp
@@ -47,24 +47,22 @@ void Downloader::startDownloadIfPending()
if (mCurrentReply)
{
qCDebug(fileprovider) << "A download is already in progress... delaying.";
-
return;
}
if (mPendingRequests.isEmpty())
{
qCDebug(fileprovider) << "No pending requests to be started.";
-
return;
}
mCurrentRequest = mPendingRequests.dequeue();
- mCurrentReply = Env::getSingleton()->get(*mCurrentRequest);
+ mCurrentReply.reset(Env::getSingleton()->get(*mCurrentRequest), &QObject::deleteLater);
- connect(mCurrentReply, &QNetworkReply::sslErrors, this, &Downloader::onSslErrors);
- connect(mCurrentReply, &QNetworkReply::encrypted, this, &Downloader::onSslHandshakeDone);
- connect(mCurrentReply, &QNetworkReply::metaDataChanged, this, &Downloader::onMetadataChanged);
- connect(mCurrentReply, &QNetworkReply::finished, this, &Downloader::onNetworkReplyFinished);
+ connect(mCurrentReply.data(), &QNetworkReply::sslErrors, this, &Downloader::onSslErrors);
+ connect(mCurrentReply.data(), &QNetworkReply::encrypted, this, &Downloader::onSslHandshakeDone);
+ connect(mCurrentReply.data(), &QNetworkReply::metaDataChanged, this, &Downloader::onMetadataChanged);
+ connect(mCurrentReply.data(), &QNetworkReply::finished, this, &Downloader::onNetworkReplyFinished);
}
@@ -79,7 +77,7 @@ void Downloader::onSslHandshakeDone()
const auto& cfg = mCurrentReply->sslConfiguration();
TlsChecker::logSslConfig(cfg, spawnMessageLogger(network));
- if (!Env::getSingleton()->checkUpdateServerCertificate(*mCurrentReply))
+ if (!Env::getSingleton()->checkUpdateServerCertificate(mCurrentReply))
{
const QString& textForLog = mCurrentRequest->url().fileName();
qCCritical(fileprovider).nospace() << "Untrusted certificate found [" << textForLog << "]: " << cfg.peerCertificate();
@@ -109,8 +107,7 @@ void Downloader::onNetworkReplyFinished()
qCDebug(fileprovider) << "Downloader finished:" << mCurrentReply->request().url().fileName();
const auto guard = qScopeGuard([this] {
- mCurrentReply->deleteLater();
- mCurrentReply = nullptr;
+ mCurrentReply.reset();
startDownloadIfPending();
});
@@ -124,7 +121,7 @@ void Downloader::onNetworkReplyFinished()
const QUrl url = mCurrentRequest->url();
const QString& textForLog = mCurrentRequest->url().fileName();
- if (!Env::getSingleton()->checkUpdateServerCertificate(*mCurrentReply))
+ if (!Env::getSingleton()->checkUpdateServerCertificate(mCurrentReply))
{
qCCritical(fileprovider).nospace() << "Connection not secure [" << textForLog << "]";
Q_EMIT fireDownloadFailed(url, GlobalStatus::Code::Network_Ssl_Establishment_Error);
@@ -191,15 +188,10 @@ Downloader::Downloader()
Downloader::~Downloader()
{
- if (mCurrentReply != nullptr)
+ if (!mCurrentReply.isNull() && mCurrentReply->isRunning() && !mCurrentRequest.isNull())
{
- if (mCurrentReply->isRunning() && !mCurrentRequest.isNull())
- {
- const QString& textForLog = mCurrentRequest->url().fileName();
- qCDebug(fileprovider).nospace() << "Scheduling pending update request [" << textForLog << "] for deletion";
- }
- mCurrentReply->deleteLater();
- mCurrentReply = nullptr;
+ const QString& textForLog = mCurrentRequest->url().fileName();
+ qCDebug(fileprovider).nospace() << "Scheduling pending update request [" << textForLog << "] for deletion";
}
}
diff --git a/src/file_provider/Downloader.h b/src/file_provider/Downloader.h
index 21383a3ed..05804817f 100644
--- a/src/file_provider/Downloader.h
+++ b/src/file_provider/Downloader.h
@@ -28,7 +28,7 @@ class Downloader
private:
QSharedPointer mCurrentRequest;
- QNetworkReply* mCurrentReply;
+ QSharedPointer mCurrentReply;
QQueue> mPendingRequests;
void scheduleDownload(QSharedPointer pDownloadRequest);
diff --git a/src/global/GlobalStatus.cpp b/src/global/GlobalStatus.cpp
index a0a6e5953..3ee292a80 100644
--- a/src/global/GlobalStatus.cpp
+++ b/src/global/GlobalStatus.cpp
@@ -40,6 +40,8 @@ bool GlobalStatus::isMessageMasked() const
case Code::Workflow_TrustedChannel_Establishment_Error:
case Code::Workflow_TrustedChannel_Error_From_Server:
case Code::Workflow_TrustedChannel_No_Data_Received:
+ case Code::Workflow_TrustedChannel_Other_Network_Error:
+ case Code::Network_Other_Error:
case Code::Network_TimeOut:
case Code::Workflow_TrustedChannel_TimeOut:
case Code::Network_Proxy_Error:
@@ -95,10 +97,10 @@ QString GlobalStatus::toErrorDescription(const bool pSimplifiedVersion) const
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
//: ERROR ANDROID IOS Error message which is used for "masked" errors. Generic message with link to support section of the homepage.
- QString message = tr("A secure connection to the provider could not be established. Please contact our %1support%2.").arg(hyperlink, QStringLiteral(""));
+ QString message = tr("An unknown network error has occurred during the connection to the provider. Check the network connection and try restarting the app. If this does not help contact our %1support%2.").arg(hyperlink, QStringLiteral(""));
#else
//: ERROR DESKTOP Error message which is used for "masked" errors. Generic message with link to support section of the homepage.
- QString message = tr("A secure connection to the provider could not be established. Please contact our %1support%2 or feel free to send us an email.").arg(hyperlink, QStringLiteral(""));
+ QString message = tr("An unknown network error has occurred during the connection to the provider. Check the network connection and try restarting the app. If this does not help contact our %1support%2 or send us an email.").arg(hyperlink, QStringLiteral(""));
#endif
return message;
}
diff --git a/src/network/HttpServerRequestor.cpp b/src/network/HttpServerRequestor.cpp
index 08dda19cb..c98ab6425 100644
--- a/src/network/HttpServerRequestor.cpp
+++ b/src/network/HttpServerRequestor.cpp
@@ -19,7 +19,6 @@ HttpServerRequestor::HttpServerRequestor()
: QObject()
, mEventLoop()
, mTimer()
- , mReply(nullptr)
{
connect(&mTimer, &QTimer::timeout, &mEventLoop, &QEventLoop::quit);
mTimer.setSingleShot(true);
@@ -43,17 +42,31 @@ QUrl HttpServerRequestor::createUrl(const QString& pQuery, quint16 pPort, const
}
-QPointer HttpServerRequestor::request(const QUrl& pUrl, int pTimeOut)
+QSharedPointer HttpServerRequestor::request(const QUrl& pUrl, int pTimeOut)
{
+ if (mEventLoop.isRunning())
+ {
+ qCWarning(network) << "Requestor already active...";
+ return nullptr;
+ }
+
qCDebug(network) << "Request URL:" << pUrl;
QNetworkRequest getRequest(pUrl);
mTimer.start(pTimeOut);
- mReply.reset(Env::getSingleton()->get(getRequest));
- connect(mReply.data(), &QNetworkReply::finished, this, &HttpServerRequestor::finished);
+ auto* reply = Env::getSingleton()->get(getRequest);
+ const auto connection = connect(reply, &QNetworkReply::finished, this, &HttpServerRequestor::finished);
mEventLoop.exec();
- return mReply->isFinished() ? mReply.data() : nullptr;
+ if (reply->isFinished())
+ {
+ return QSharedPointer(reply, &QObject::deleteLater);
+ }
+
+ disconnect(connection);
+ reply->abort();
+ reply->deleteLater();
+ return nullptr;
}
diff --git a/src/network/HttpServerRequestor.h b/src/network/HttpServerRequestor.h
index 5f6df1ad4..6affb82bc 100644
--- a/src/network/HttpServerRequestor.h
+++ b/src/network/HttpServerRequestor.h
@@ -9,8 +9,7 @@
#include
#include
#include
-#include
-#include
+#include
#include
namespace governikus
@@ -24,13 +23,12 @@ class HttpServerRequestor
private:
QEventLoop mEventLoop;
QTimer mTimer;
- QScopedPointer mReply;
public:
HttpServerRequestor();
virtual ~HttpServerRequestor();
- QPointer request(const QUrl& pUrl, int pTimeOut = 2000);
+ QSharedPointer request(const QUrl& pUrl, int pTimeOut = 2000);
static QUrl createUrl(const QString& pQuery, quint16 pPort, const QHostAddress& pHost = QHostAddress::LocalHost, const QString& pPath = QStringLiteral("/eID-Client"));
private Q_SLOTS:
diff --git a/src/network/HttpServerStatusParser.cpp b/src/network/HttpServerStatusParser.cpp
index d8da8319d..6eaf1a332 100644
--- a/src/network/HttpServerStatusParser.cpp
+++ b/src/network/HttpServerStatusParser.cpp
@@ -37,7 +37,7 @@ bool HttpServerStatusParser::request()
mVersionInfo = VersionInfo();
mServerHeader.clear();
- QPointer reply = mRequestor.request(mUrl);
+ const auto reply = mRequestor.request(mUrl);
if (!reply.isNull())
{
return parseReply(reply);
@@ -59,7 +59,7 @@ const VersionInfo& HttpServerStatusParser::getVersionInfo() const
}
-bool HttpServerStatusParser::parseReply(const QPointer& pReply)
+bool HttpServerStatusParser::parseReply(const QSharedPointer& pReply)
{
mServerHeader = pReply->header(QNetworkRequest::KnownHeaders::ServerHeader).toString();
if (mServerHeader.isEmpty())
@@ -79,10 +79,7 @@ bool HttpServerStatusParser::parseReply(const QPointer& pReply)
qCDebug(network) << "Found version info" << mVersionInfo;
return !mVersionInfo.isNull();
}
- else
- {
- qCDebug(network) << "Cannot get status information! Got bad http status code.";
- }
+ qCDebug(network) << "Cannot get status information! Got bad http status code.";
return false;
}
diff --git a/src/network/HttpServerStatusParser.h b/src/network/HttpServerStatusParser.h
index 9690c72b3..937521af4 100644
--- a/src/network/HttpServerStatusParser.h
+++ b/src/network/HttpServerStatusParser.h
@@ -9,8 +9,10 @@
#include "EnumHelper.h"
#include "HttpServerRequestor.h"
#include "VersionInfo.h"
+
#include
#include
+#include
#include
namespace governikus
@@ -27,7 +29,7 @@ class HttpServerStatusParser
VersionInfo mVersionInfo;
HttpServerRequestor mRequestor;
- bool parseReply(const QPointer& pReply);
+ bool parseReply(const QSharedPointer& pReply);
public:
HttpServerStatusParser(quint16 pPort, const QHostAddress& pHost = QHostAddress::LocalHost);
diff --git a/src/network/NetworkManager.cpp b/src/network/NetworkManager.cpp
index fa6afed98..c778f52b6 100644
--- a/src/network/NetworkManager.cpp
+++ b/src/network/NetworkManager.cpp
@@ -136,11 +136,11 @@ QNetworkReply* NetworkManager::post(QNetworkRequest& pRequest,
}
-bool NetworkManager::checkUpdateServerCertificate(const QNetworkReply& pReply)
+bool NetworkManager::checkUpdateServerCertificate(const QSharedPointer& pReply)
{
const QVector& trustedCertificates = Env::getSingleton()->getUpdateCertificates();
- const auto& cert = pReply.sslConfiguration().peerCertificate();
+ const auto& cert = pReply->sslConfiguration().peerCertificate();
return !cert.isNull() && trustedCertificates.contains(cert);
}
@@ -166,7 +166,7 @@ void NetworkManager::onProxyChanged()
}
-NetworkManager::NetworkError NetworkManager::toNetworkError(const QNetworkReply* const pNetworkReply)
+NetworkManager::NetworkError NetworkManager::toNetworkError(const QSharedPointer& pNetworkReply)
{
qCDebug(network) << "Select error message for:" << pNetworkReply->error();
switch (pNetworkReply->error())
@@ -196,7 +196,7 @@ NetworkManager::NetworkError NetworkManager::toNetworkError(const QNetworkReply*
}
-GlobalStatus NetworkManager::toTrustedChannelStatus(const QNetworkReply* const pNetworkReply)
+GlobalStatus NetworkManager::toTrustedChannelStatus(const QSharedPointer& pNetworkReply)
{
const GlobalStatus::ExternalInfoMap infoMap {
{GlobalStatus::ExternalInformation::LAST_URL, pNetworkReply->url().toString()}
@@ -223,7 +223,7 @@ GlobalStatus NetworkManager::toTrustedChannelStatus(const QNetworkReply* const p
}
-GlobalStatus NetworkManager::toStatus(const QNetworkReply* const pNetworkReply)
+GlobalStatus NetworkManager::toStatus(const QSharedPointer& pNetworkReply)
{
const GlobalStatus::ExternalInfoMap infoMap {
{GlobalStatus::ExternalInformation::LAST_URL, pNetworkReply->url().toString()}
@@ -295,7 +295,7 @@ QByteArray NetworkManager::getStatusMessage(int pStatus)
}
-int NetworkManager::getLoggedStatusCode(const QNetworkReply* const pReply, const QMessageLogger& pLogger)
+int NetworkManager::getLoggedStatusCode(const QSharedPointer& pReply, const QMessageLogger& pLogger)
{
const int statusCode = pReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
pLogger.debug() << "Status Code:" << statusCode << getStatusMessage(statusCode);
diff --git a/src/network/NetworkManager.h b/src/network/NetworkManager.h
index 000e1a575..48beca0d5 100644
--- a/src/network/NetworkManager.h
+++ b/src/network/NetworkManager.h
@@ -68,10 +68,10 @@ class NetworkManager
}
- static int getLoggedStatusCode(const QNetworkReply* const pReply, const QMessageLogger& pLogger);
- static NetworkError toNetworkError(const QNetworkReply* const pNetworkReply);
- static GlobalStatus toTrustedChannelStatus(const QNetworkReply* const pNetworkReply);
- static GlobalStatus toStatus(const QNetworkReply* const pNetworkReply);
+ static int getLoggedStatusCode(const QSharedPointer& pReply, const QMessageLogger& pLogger);
+ static NetworkError toNetworkError(const QSharedPointer& pNetworkReply);
+ static GlobalStatus toTrustedChannelStatus(const QSharedPointer& pNetworkReply);
+ static GlobalStatus toStatus(const QSharedPointer& pNetworkReply);
static QString getTlsVersionString(QSsl::SslProtocol pProtocol);
static QByteArray getStatusMessage(int pStatus);
@@ -90,7 +90,7 @@ class NetworkManager
const QByteArray& pData,
int pTimeoutInMilliSeconds = 30000);
- virtual bool checkUpdateServerCertificate(const QNetworkReply& pReply);
+ virtual bool checkUpdateServerCertificate(const QSharedPointer& pReply);
int getOpenConnectionCount();
diff --git a/src/network/TlsChecker.cpp b/src/network/TlsChecker.cpp
index 2f96d49e0..6fb242d11 100644
--- a/src/network/TlsChecker.cpp
+++ b/src/network/TlsChecker.cpp
@@ -271,9 +271,9 @@ QStringList TlsChecker::getFatalErrors(const QList& pErrors)
}
-bool TlsChecker::containsFatalError(QNetworkReply* pReply, const QList& pErrors)
+bool TlsChecker::containsFatalError(const QSharedPointer& pReply, const QList& pErrors)
{
- if (pReply == nullptr)
+ if (pReply.isNull())
{
qCCritical(network) << "Reply should not be nullptr";
Q_ASSERT(pReply);
diff --git a/src/network/TlsChecker.h b/src/network/TlsChecker.h
index 4da4a9d9c..02c8cf33b 100644
--- a/src/network/TlsChecker.h
+++ b/src/network/TlsChecker.h
@@ -30,7 +30,7 @@ class TlsChecker
static QString toString(QSsl::KeyAlgorithm pKeyAlgorithm);
static QStringList getFatalErrors(const QList& pErrors);
- static bool containsFatalError(QNetworkReply* pReply, const QList& pErrors);
+ static bool containsFatalError(const QSharedPointer& pReply, const QList& pErrors);
/*!
* Checks, whether the certificate's hash is contained in a set of accepted certificate hashes.
diff --git a/src/services/Service.cpp b/src/services/Service.cpp
index b5b7fba3d..bf894777b 100644
--- a/src/services/Service.cpp
+++ b/src/services/Service.cpp
@@ -116,7 +116,9 @@ void Service::runUpdateIfNeeded()
if (mUpdateScheduled)
{
mUpdateScheduled = false;
- doAppUpdate(UpdateType::APP);
+ QMetaObject::invokeMethod(this, [this] {
+ doAppUpdate(UpdateType::APP);
+ }, Qt::QueuedConnection);
}
}
diff --git a/src/settings/HistorySettings.cpp b/src/settings/HistorySettings.cpp
index 1e22ae210..2e212769e 100644
--- a/src/settings/HistorySettings.cpp
+++ b/src/settings/HistorySettings.cpp
@@ -29,8 +29,10 @@ Q_DECLARE_LOGGING_CATEGORY(settings)
HistorySettings::HistorySettings()
: AbstractSettings()
, mStore(getStore())
+ , mHistoryInfos()
{
mStore->beginGroup(SETTINGS_GROUP_NAME_CHRONIC());
+ mHistoryInfos = getHistoryInfosFromStore();
}
@@ -61,7 +63,13 @@ void HistorySettings::setEnabled(bool pEnabled)
}
-QVector HistorySettings::getHistoryInfos() const
+const QVector& HistorySettings::getHistoryInfos() const
+{
+ return mHistoryInfos;
+}
+
+
+QVector HistorySettings::getHistoryInfosFromStore() const
{
const int itemCount = mStore->beginReadArray(SETTINGS_NAME_HISTORY_ITEMS());
@@ -105,6 +113,8 @@ void HistorySettings::setHistoryInfos(const QVector& pHistoryInfos)
}
mStore->endArray();
+ mHistoryInfos = pHistoryInfos;
+
Q_EMIT fireHistoryInfosChanged();
}
diff --git a/src/settings/HistorySettings.h b/src/settings/HistorySettings.h
index 46227b3b6..f495ad186 100644
--- a/src/settings/HistorySettings.h
+++ b/src/settings/HistorySettings.h
@@ -37,8 +37,10 @@ class HistorySettings
private:
QSharedPointer mStore;
+ QVector mHistoryInfos;
HistorySettings();
+ QVector getHistoryInfosFromStore() const;
public:
virtual ~HistorySettings() override;
@@ -47,7 +49,7 @@ class HistorySettings
bool isEnabled() const;
void setEnabled(bool pEnabled);
- QVector getHistoryInfos() const;
+ const QVector& getHistoryInfos() const;
void setHistoryInfos(const QVector& pHistoryInfos);
void addHistoryInfo(const HistoryInfo& pHistoryInfo);
int deleteSettings(const QDateTime& pLatestToKeep = QDateTime());
diff --git a/src/ui/base/UIPlugIn.h b/src/ui/base/UIPlugIn.h
index e44a1c9fc..030868751 100644
--- a/src/ui/base/UIPlugIn.h
+++ b/src/ui/base/UIPlugIn.h
@@ -50,7 +50,7 @@ class UIPlugIn
virtual void onUiDominationReleased();
Q_SIGNALS:
- void fireChangePinRequest();
+ void fireChangePinRequested();
void fireSelfAuthenticationRequested();
void fireRemoteServiceRequested();
void fireQuitApplicationRequest();
diff --git a/src/ui/qml/ApplicationModel.cpp b/src/ui/qml/ApplicationModel.cpp
index 4c87ff214..7f7d165e1 100644
--- a/src/ui/qml/ApplicationModel.cpp
+++ b/src/ui/qml/ApplicationModel.cpp
@@ -177,6 +177,7 @@ bool ApplicationModel::isNfcRunning() const
void ApplicationModel::setNfcRunning(bool pRunning)
{
+#if defined(Q_OS_IOS)
const auto& readerManager = Env::getSingleton();
if (pRunning)
{
@@ -185,6 +186,9 @@ void ApplicationModel::setNfcRunning(bool pRunning)
}
readerManager->stopScan(ReaderManagerPlugInType::NFC);
+#else
+ Q_UNUSED(pRunning);
+#endif
}
@@ -348,7 +352,7 @@ void ApplicationModel::showSettings(const ApplicationModel::Settings& pAction)
}
else
{
- showSettings(QStringLiteral("android.settings.WIRELESS_SETTINGS"));
+ showSettings(QStringLiteral("android.settings.WIFI_SETTINGS"));
}
break;
@@ -359,7 +363,7 @@ void ApplicationModel::showSettings(const ApplicationModel::Settings& pAction)
}
else
{
- showSettings(QStringLiteral("android.settings.WIRELESS_SETTINGS"));
+ showSettings(QStringLiteral("android.settings.WIFI_SETTINGS"));
}
break;
diff --git a/src/ui/qml/ChatModel.cpp b/src/ui/qml/ChatModel.cpp
index 36fc8d1ef..3acbf8172 100644
--- a/src/ui/qml/ChatModel.cpp
+++ b/src/ui/qml/ChatModel.cpp
@@ -49,52 +49,17 @@ void ChatModel::resetContext(const QSharedPointer& pContext)
{
mAuthContext = pContext;
- if (pContext.objectCast())
- {
- /* nothing to do, access rights are static */
- }
- else if (!pContext.isNull() /* it's an AuthContext */)
- {
- beginResetModel();
+ beginResetModel();
- mAllRights.clear();
- mOptionalRights.clear();
- mSelectedRights.clear();
+ mAllRights.clear();
+ mOptionalRights.clear();
+ mSelectedRights.clear();
- endResetModel();
+ endResetModel();
- connect(mAuthContext.data(), &AuthContext::fireAuthenticationDataChanged, this, &ChatModel::onAuthenticationDataChanged);
- }
- else
+ if (!pContext.isNull())
{
- /* set static access rights according to selfAuthentication*/
- Q_ASSERT(pContext.isNull());
-
- beginResetModel();
-
- mAllRights.clear();
- mAllRights += AccessRight::READ_DG05;
- mAllRights += AccessRight::READ_DG13;
- mAllRights += AccessRight::READ_DG04;
- mAllRights += AccessRight::READ_DG07;
- mAllRights += AccessRight::READ_DG08;
- mAllRights += AccessRight::READ_DG09;
- mAllRights += AccessRight::READ_DG17;
- mAllRights += AccessRight::READ_DG01;
- mAllRights += AccessRight::READ_DG10;
- mAllRights += AccessRight::READ_DG06;
- mAllRights += AccessRight::READ_DG02;
- mAllRights += AccessRight::READ_DG19;
-
- mOptionalRights.clear();
-
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
- mSelectedRights = QSet(mAllRights.constBegin(), mAllRights.constEnd());
-#else
- mSelectedRights = mAllRights.toSet();
-#endif
-
- endResetModel();
+ connect(pContext.data(), &AuthContext::fireAuthenticationDataChanged, this, &ChatModel::onAuthenticationDataChanged);
}
}
diff --git a/src/ui/qml/RemoteServiceModel.cpp b/src/ui/qml/RemoteServiceModel.cpp
index 33c5f61ca..1d43638f3 100644
--- a/src/ui/qml/RemoteServiceModel.cpp
+++ b/src/ui/qml/RemoteServiceModel.cpp
@@ -81,6 +81,7 @@ void RemoteServiceModel::onEnvironmentChanged()
if (!runnable && isRunning())
{
+ setPairing(false);
setRunning(false);
}
}
diff --git a/src/ui/qml/UIPlugInQml.cpp b/src/ui/qml/UIPlugInQml.cpp
index abf54dd95..32ed6eecf 100644
--- a/src/ui/qml/UIPlugInQml.cpp
+++ b/src/ui/qml/UIPlugInQml.cpp
@@ -34,6 +34,8 @@
#endif
#if defined(Q_OS_ANDROID)
+ #include "DeviceInfo.h"
+
#include
#include
#include
@@ -44,6 +46,7 @@
#include
#endif
+#include
#include
#include
#include
@@ -130,6 +133,23 @@ UIPlugInQml::UIPlugInQml()
#endif
{
#if defined(Q_OS_ANDROID)
+ // see QTBUG-69494
+ if (DeviceInfo::getFingerprint().contains(QLatin1String("OnePlus")))
+ {
+ const QDir dir(QStringLiteral("/system/fonts"));
+ const auto entries = dir.entryInfoList({QStringLiteral("Roboto-*.ttf")}, QDir::Files);
+ for (const auto& file : entries)
+ {
+ if (file.fileName().contains(QLatin1String("_subset")))
+ {
+ qCDebug(qml) << "Ignore font" << file;
+ continue;
+ }
+ qCDebug(qml) << "Add font" << file;
+ QFontDatabase::addApplicationFont(file.absoluteFilePath());
+ }
+ }
+
QGuiApplication::setFont(QFont(QStringLiteral("Roboto")));
#elif defined(Q_OS_LINUX) && QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
if (auto font = QGuiApplication::font(); QFontMetrics(font.family()).horizontalAdvance(QLatin1Char('m')) > 15)
@@ -151,7 +171,7 @@ UIPlugInQml::UIPlugInQml()
connect(&mTrayIcon, &TrayIcon::fireShow, this, &UIPlugInQml::show);
connect(&mTrayIcon, &TrayIcon::fireQuit, this, &UIPlugInQml::fireQuitApplicationRequest);
- connect(Env::getSingleton(), &ChangePinModel::fireStartWorkflow, this, &UIPlugIn::fireChangePinRequest);
+ connect(Env::getSingleton(), &ChangePinModel::fireStartWorkflow, this, &UIPlugIn::fireChangePinRequested);
connect(Env::getSingleton(), &SelfAuthModel::fireStartWorkflow, this, &UIPlugIn::fireSelfAuthenticationRequested);
connect(Env::getSingleton(), &RemoteServiceModel::fireStartWorkflow, this, &UIPlugIn::fireRemoteServiceRequested);
connect(Env::getSingleton(), &LogHandler::fireRawLog, this, &UIPlugInQml::onRawLog, Qt::QueuedConnection);
diff --git a/src/ui/widget/AppQtGui.cpp b/src/ui/widget/AppQtGui.cpp
index 2066c5e00..6b30f3029 100644
--- a/src/ui/widget/AppQtGui.cpp
+++ b/src/ui/widget/AppQtGui.cpp
@@ -264,7 +264,7 @@ void AppQtGui::onDiagnosisRequested()
{
if (mDiagnosisGui == nullptr)
{
- mDiagnosisGui = new DiagnosisGui(mMainWidget);
+ mDiagnosisGui = new DiagnosisGui(mMainWidget); // lgtm [cpp/resource-not-released-in-destructor]
}
mDiagnosisGui->activate();
}
diff --git a/src/ui/widget/AppQtMainWidget.cpp b/src/ui/widget/AppQtMainWidget.cpp
index 5b984b5ad..97ddf5372 100644
--- a/src/ui/widget/AppQtMainWidget.cpp
+++ b/src/ui/widget/AppQtMainWidget.cpp
@@ -26,7 +26,7 @@
#include
#ifdef Q_OS_WIN
-#include
+#include
#endif
using namespace governikus;
diff --git a/src/ui/widget/UIPlugInWidgets.cpp b/src/ui/widget/UIPlugInWidgets.cpp
index d524b873c..d3a1db28a 100644
--- a/src/ui/widget/UIPlugInWidgets.cpp
+++ b/src/ui/widget/UIPlugInWidgets.cpp
@@ -15,7 +15,7 @@ UIPlugInWidgets::UIPlugInWidgets()
, mGui()
{
connect(&mGui, &AppQtGui::quitApplicationRequested, this, &UIPlugIn::fireQuitApplicationRequest);
- connect(&mGui, &AppQtGui::fireChangePinRequested, this, &UIPlugIn::fireChangePinRequest);
+ connect(&mGui, &AppQtGui::fireChangePinRequested, this, &UIPlugIn::fireChangePinRequested);
connect(&mGui, &AppQtGui::selfAuthenticationRequested, this, &UIPlugIn::fireSelfAuthenticationRequested);
connect(&mGui, &AppQtGui::fireCloseReminderFinished, this, &UIPlugInWidgets::fireCloseReminderFinished);
connect(&mGui, &AppQtGui::fireRestartApplicationRequested, this, &UIPlugIn::fireRestartApplicationRequested);
diff --git a/src/ui/widget/workflow/WorkflowGui.h b/src/ui/widget/workflow/WorkflowGui.h
index 96cf38bfe..00ffe4450 100644
--- a/src/ui/widget/workflow/WorkflowGui.h
+++ b/src/ui/widget/workflow/WorkflowGui.h
@@ -62,7 +62,7 @@ class WorkflowGui
Q_SIGNALS:
void fireUserCancelled();
- void fireChangePinRequest();
+ void fireChangePinRequested();
void fireCloseActiveDialogs();
};
diff --git a/src/windows.rc b/src/windows.rc
index 69a06e87a..43804de0b 100644
--- a/src/windows.rc
+++ b/src/windows.rc
@@ -4,8 +4,8 @@
#define EXECUTABLE PRODUCT ".exe"
-IDR_MAINFRAME ICON "..\\resources\\images\\npa.ico"
-IDI_ICON1 ICON DISCARDABLE "..\\resources\\images\\npa.ico"
+IDR_MAINFRAME ICON "../resources/images/npa.ico"
+IDI_ICON1 ICON DISCARDABLE "../resources/images/npa.ico"
1 VERSIONINFO
FILEVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,VERSION_TWEAK
diff --git a/test/helper/MockNetworkManager.cpp b/test/helper/MockNetworkManager.cpp
index edfe45545..f24bc3185 100644
--- a/test/helper/MockNetworkManager.cpp
+++ b/test/helper/MockNetworkManager.cpp
@@ -99,7 +99,7 @@ QNetworkReply* MockNetworkManager::paos(QNetworkRequest& pRequest,
}
-bool MockNetworkManager::checkUpdateServerCertificate(const QNetworkReply& pReply)
+bool MockNetworkManager::checkUpdateServerCertificate(const QSharedPointer& pReply)
{
Q_UNUSED(pReply)
diff --git a/test/helper/MockNetworkManager.h b/test/helper/MockNetworkManager.h
index bb10ad931..f0a986b6d 100644
--- a/test/helper/MockNetworkManager.h
+++ b/test/helper/MockNetworkManager.h
@@ -42,7 +42,7 @@ class MockNetworkManager
const QByteArray& pData,
int pTimeoutInMilliSeconds = 30000) override;
- virtual bool checkUpdateServerCertificate(const QNetworkReply& pReply) override;
+ virtual bool checkUpdateServerCertificate(const QSharedPointer& pReply) override;
void setFilename(const QString& pFilename)
{
diff --git a/test/qt/configuration/test_ProviderConfigurationParser.cpp b/test/qt/configuration/test_ProviderConfigurationParser.cpp
index 921046e2b..ec145a533 100644
--- a/test/qt/configuration/test_ProviderConfigurationParser.cpp
+++ b/test/qt/configuration/test_ProviderConfigurationParser.cpp
@@ -252,12 +252,12 @@ class test_ProviderConfigurationParser
{
QTest::addColumn("count");
- const int desktop = 80;
+ const int desktop = 82;
QTest::newRow("win") << desktop;
QTest::newRow("mac") << desktop;
QTest::newRow("linux") << desktop;
QTest::newRow("android") << desktop;
- QTest::newRow("ios") << 41;
+ QTest::newRow("ios") << 44;
}
diff --git a/test/qt/core/states/test_StateCheckRefreshAddress.cpp b/test/qt/core/states/test_StateCheckRefreshAddress.cpp
index dfc562a37..678b203ce 100644
--- a/test/qt/core/states/test_StateCheckRefreshAddress.cpp
+++ b/test/qt/core/states/test_StateCheckRefreshAddress.cpp
@@ -281,7 +281,7 @@ class test_StateCheckRefreshAddress
Env::getSingleton()->getGeneralSettings().setDeveloperMode(developerMode);
- QPointer reply(new MockNetworkReply());
+ auto reply = QSharedPointer::create();
mState->mReply = reply;
const QByteArray headerName("name");
diff --git a/test/qt/core/states/test_StateGetSelfAuthenticationData.cpp b/test/qt/core/states/test_StateGetSelfAuthenticationData.cpp
index 76e12eb52..b620e8a56 100644
--- a/test/qt/core/states/test_StateGetSelfAuthenticationData.cpp
+++ b/test/qt/core/states/test_StateGetSelfAuthenticationData.cpp
@@ -42,8 +42,7 @@ class test_StateGetSelfAuthenticationData
void test_ReportCommunicationError()
{
- MockNetworkReply reply;
- mState->mReply = QPointer(&reply);
+ mState->mReply.reset(new MockNetworkReply(), &QObject::deleteLater);
QSignalSpy spy(mState.data(), &StateGetSelfAuthenticationData::fireAbort);
QSignalSpy logSpy(Env::getSingleton(), &LogHandler::fireLog);
@@ -66,15 +65,14 @@ class test_StateGetSelfAuthenticationData
void test_OnSslHandshakeDone()
{
- MockNetworkReply reply;
- mState->mReply = QPointer(&reply);
+ mState->mReply.reset(new MockNetworkReply(), &QObject::deleteLater);
QSignalSpy logSpy(Env::getSingleton(), &LogHandler::fireLog);
mState->onSslHandshakeDone();
QVERIFY(logSpy.takeLast().at(0).toString().contains("Operation aborted"));
- reply.setSslConfiguration(QSslConfiguration());
+ mState->mReply->setSslConfiguration(QSslConfiguration());
mState->onSslHandshakeDone();
const QString logMsg(logSpy.at(0).at(0).toString());
QVERIFY(logMsg.contains("Used session cipher"));
@@ -83,8 +81,7 @@ class test_StateGetSelfAuthenticationData
void test_OnSslErrors()
{
- MockNetworkReply reply;
- mState->mReply = QPointer(&reply);
+ mState->mReply.reset(new MockNetworkReply(), &QObject::deleteLater);
QSignalSpy spy(mState.data(), &StateGetSelfAuthenticationData::fireAbort);
mState->onSslErrors(QList());
@@ -98,8 +95,7 @@ class test_StateGetSelfAuthenticationData
void test_OnNetworkReplyNoValidData()
{
- MockNetworkReply emptyReply;
- mState->mReply = QPointer(&emptyReply);
+ mState->mReply.reset(new MockNetworkReply(), &QObject::deleteLater);
QSignalSpy logSpy(Env::getSingleton(), &LogHandler::fireLog);
QSignalSpy spyAbort(mState.data(), &StateGetSelfAuthenticationData::fireAbort);
@@ -115,8 +111,7 @@ class test_StateGetSelfAuthenticationData
void test_OnNetworkReplyValidData()
{
const auto& data = TestFileHelper::readFile(":/self/SelfAuthenticationData.json");
- MockNetworkReply reply(data);
- mState->mReply = QPointer(&reply);
+ mState->mReply.reset(new MockNetworkReply(data), &QObject::deleteLater);
QSignalSpy spyContinue(mState.data(), &StateGetSelfAuthenticationData::fireContinue);
mState->onNetworkReply();
@@ -126,9 +121,9 @@ class test_StateGetSelfAuthenticationData
void test_OnNetworkReplyWrongHttpStatus()
{
- MockNetworkReply reply;
- reply.setAttribute(QNetworkRequest::Attribute::HttpStatusCodeAttribute, 500);
- mState->mReply = QPointer(&reply);
+ auto reply = new MockNetworkReply();
+ mState->mReply.reset(reply, &QObject::deleteLater);
+ reply->setAttribute(QNetworkRequest::Attribute::HttpStatusCodeAttribute, 500);
QSignalSpy logSpy(Env::getSingleton(), &LogHandler::fireLog);
QSignalSpy spyAbort(mState.data(), &StateGetSelfAuthenticationData::fireAbort);
diff --git a/test/qt/core/states/test_StateGetTcToken.cpp b/test/qt/core/states/test_StateGetTcToken.cpp
index c8df1b595..c870870cd 100644
--- a/test/qt/core/states/test_StateGetTcToken.cpp
+++ b/test/qt/core/states/test_StateGetTcToken.cpp
@@ -70,10 +70,9 @@ class test_StateGetTcToken
void test_ParseTcTokenNoData()
{
- MockNetworkReply reply;
const QSharedPointer context(new AuthContext(nullptr));
StateGetTcToken state(context);
- state.mReply = QPointer(&reply);
+ state.mReply.reset(new MockNetworkReply(), &QObject::deleteLater);
QSignalSpy spyAbort(&state, &StateGetTcToken::fireAbort);
QTest::ignoreMessage(QtDebugMsg, "Received no data.");
@@ -96,10 +95,10 @@ class test_StateGetTcToken
" 4BC1A0B5 "
" "
"");
- MockNetworkReply reply(data);
+
const QSharedPointer context(new AuthContext(nullptr));
StateGetTcToken state(context);
- state.mReply = QPointer(&reply);
+ state.mReply.reset(new MockNetworkReply(data), &QObject::deleteLater);
QSignalSpy spyContinue(&state, &StateGetTcToken::fireContinue);
QVERIFY(!context->getTcToken());
@@ -113,10 +112,9 @@ class test_StateGetTcToken
void test_ParseTcTokenWithDataNoPsk()
{
const QByteArray data("invalid data");
- MockNetworkReply reply(data);
const QSharedPointer context(new AuthContext(nullptr));
StateGetTcToken state(context);
- state.mReply = QPointer(&reply);
+ state.mReply.reset(new MockNetworkReply(data), &QObject::deleteLater);
QSignalSpy spyAbort(&state, &StateGetTcToken::fireAbort);
QTest::ignoreMessage(QtCriticalMsg, "TCToken invalid");
diff --git a/test/qt/network/test_NetworkManager.cpp b/test/qt/network/test_NetworkManager.cpp
index 73c9fd8a9..8747b9462 100644
--- a/test/qt/network/test_NetworkManager.cpp
+++ b/test/qt/network/test_NetworkManager.cpp
@@ -75,12 +75,12 @@ class test_NetworkManager
void serviceUnavailableEnums()
{
- MockNetworkReply reply;
- reply.setNetworkError(QNetworkReply::ServiceUnavailableError, "dummy error msg");
+ auto reply = QSharedPointer::create();
+ reply->setNetworkError(QNetworkReply::ServiceUnavailableError, "dummy error msg");
- QCOMPARE(NetworkManager::toNetworkError(&reply), NetworkManager::NetworkError::ServiceUnavailable);
- QCOMPARE(NetworkManager::toTrustedChannelStatus(&reply), GlobalStatus(GlobalStatus::Code::Workflow_TrustedChannel_ServiceUnavailable, {GlobalStatus::ExternalInformation::LAST_URL, reply.url().toString()}));
- QCOMPARE(NetworkManager::toStatus(&reply), GlobalStatus(GlobalStatus::Code::Network_ServiceUnavailable, {GlobalStatus::ExternalInformation::LAST_URL, reply.url().toString()}));
+ QCOMPARE(NetworkManager::toNetworkError(reply), NetworkManager::NetworkError::ServiceUnavailable);
+ QCOMPARE(NetworkManager::toTrustedChannelStatus(reply), GlobalStatus(GlobalStatus::Code::Workflow_TrustedChannel_ServiceUnavailable, {GlobalStatus::ExternalInformation::LAST_URL, reply->url().toString()}));
+ QCOMPARE(NetworkManager::toStatus(reply), GlobalStatus(GlobalStatus::Code::Network_ServiceUnavailable, {GlobalStatus::ExternalInformation::LAST_URL, reply->url().toString()}));
}
diff --git a/test/qt/network/test_TlsChecker.cpp b/test/qt/network/test_TlsChecker.cpp
index a63885b9e..02dbbc2fe 100644
--- a/test/qt/network/test_TlsChecker.cpp
+++ b/test/qt/network/test_TlsChecker.cpp
@@ -243,16 +243,16 @@ class test_TlsChecker
void containsFatalError()
{
- MockNetworkReply reply;
+ const auto reply = QSharedPointer::create();
QList errors;
- QVERIFY(!TlsChecker::containsFatalError(&reply, errors));
+ QVERIFY(!TlsChecker::containsFatalError(reply, errors));
errors.append(QSslError(QSslError::SslError::SelfSignedCertificate));
- QVERIFY(!TlsChecker::containsFatalError(&reply, errors));
+ QVERIFY(!TlsChecker::containsFatalError(reply, errors));
errors.append(QSslError(QSslError::SslError::SubjectIssuerMismatch));
- QVERIFY(TlsChecker::containsFatalError(&reply, errors));
+ QVERIFY(TlsChecker::containsFatalError(reply, errors));
}
diff --git a/test/qt/ui/qml/test_ChatModel.cpp b/test/qt/ui/qml/test_ChatModel.cpp
index ac16ba2d9..7240dc1d6 100644
--- a/test/qt/ui/qml/test_ChatModel.cpp
+++ b/test/qt/ui/qml/test_ChatModel.cpp
@@ -47,50 +47,30 @@ class test_ChatModel
void test_ResetContext()
{
+ QVERIFY(mModel->mAllRights.isEmpty());
+ QVERIFY(mModel->mOptionalRights.isEmpty());
+ QVERIFY(mModel->mSelectedRights.isEmpty());
QSharedPointer selfAuthContext(new SelfAuthContext());
+ mModel->mAllRights = {AccessRight::READ_DG01, AccessRight::READ_DG02};
+ mModel->mOptionalRights = {AccessRight::READ_DG02};
+ mModel->mSelectedRights = {AccessRight::READ_DG01};
mModel->resetContext(nullptr);
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG05));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG13));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG04));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG07));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG08));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG09));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG17));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG10));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG06));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG02));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG19));
-
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
- auto uniqueRights = QSet(mModel->mAllRights.constBegin(), mModel->mAllRights.constEnd());
-#else
- auto uniqueRights = mModel->mAllRights.toSet();
-#endif
- QCOMPARE(mModel->mSelectedRights, uniqueRights);
+ QVERIFY(mModel->mAllRights.isEmpty());
+ QVERIFY(mModel->mOptionalRights.isEmpty());
+ QVERIFY(mModel->mSelectedRights.isEmpty());
+ mModel->mAllRights = {AccessRight::READ_DG01, AccessRight::READ_DG02};
+ mModel->mOptionalRights = {AccessRight::READ_DG02};
+ mModel->mSelectedRights = {AccessRight::READ_DG01};
mModel->resetContext(selfAuthContext);
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG05));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG13));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG04));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG07));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG08));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG09));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG17));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG10));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG06));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG02));
- QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG19));
-
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
- uniqueRights = QSet(mModel->mAllRights.constBegin(), mModel->mAllRights.constEnd());
-#else
- uniqueRights = mModel->mAllRights.toSet();
-#endif
- QCOMPARE(mModel->mSelectedRights, uniqueRights);
+ QVERIFY(mModel->mAllRights.isEmpty());
+ QVERIFY(mModel->mOptionalRights.isEmpty());
+ QVERIFY(mModel->mSelectedRights.isEmpty());
+ mModel->mAllRights = {AccessRight::READ_DG01, AccessRight::READ_DG02};
+ mModel->mOptionalRights = {AccessRight::READ_DG02};
+ mModel->mSelectedRights = {AccessRight::READ_DG01};
mModel->resetContext(mAuthContext);
QVERIFY(mModel->mAllRights.isEmpty());
QVERIFY(mModel->mOptionalRights.isEmpty());
@@ -100,27 +80,39 @@ class test_ChatModel
void test_OnAuthenticationDataChanged()
{
- mModel->mAuthContext = mAuthContext;
+ mModel->resetContext(mAuthContext);
- mModel->onAuthenticationDataChanged();
+ Q_EMIT mAuthContext->fireAuthenticationDataChanged();
QVERIFY(mModel->mAllRights.isEmpty());
QVERIFY(mModel->mOptionalRights.isEmpty());
QVERIFY(mModel->mSelectedRights.isEmpty());
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
+ auto uniqueRights = QSet(mModel->mAllRights.constBegin(), mModel->mAllRights.constEnd());
+#else
+ auto uniqueRights = mModel->mAllRights.toSet();
+#endif
+ QCOMPARE(mModel->mSelectedRights, uniqueRights);
mAuthContext->mRequiredAccessRights += AccessRight::READ_DG01;
mAuthContext->mRequiredAccessRights += AccessRight::READ_DG04;
- mModel->onAuthenticationDataChanged();
+ Q_EMIT mAuthContext->fireAuthenticationDataChanged();
QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01));
QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG04));
QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG01));
QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG04));
QVERIFY(mModel->mOptionalRights.isEmpty());
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
+ uniqueRights = QSet(mModel->mAllRights.constBegin(), mModel->mAllRights.constEnd());
+#else
+ uniqueRights = mModel->mAllRights.toSet();
+#endif
+ QCOMPARE(mModel->mSelectedRights, uniqueRights);
mAuthContext->mOptionalAccessRights += AccessRight::READ_DG10;
mAuthContext->mOptionalAccessRights += AccessRight::READ_DG17;
- mModel->onAuthenticationDataChanged();
+ Q_EMIT mAuthContext->fireAuthenticationDataChanged();
QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01));
QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG04));
QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG10));
@@ -129,8 +121,12 @@ class test_ChatModel
QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG04));
QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG10));
QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG17));
- QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG10));
- QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG17));
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
+ uniqueRights = QSet(mModel->mAllRights.constBegin(), mModel->mAllRights.constEnd());
+#else
+ uniqueRights = mModel->mAllRights.toSet();
+#endif
+ QCOMPARE(mModel->mSelectedRights, uniqueRights);
}