diff --git a/CMakeLists.txt b/CMakeLists.txt
index 62c7b5f..13178ef 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.3.0)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
IF(POLICY CMP0020)
CMAKE_POLICY(SET CMP0020 NEW)
@@ -33,7 +33,7 @@ ELSE()
ENDIF()
-PROJECT(AusweisApp2 VERSION 1.12.4 LANGUAGES ${LANGUAGES})
+PROJECT(AusweisApp2 VERSION 1.14.0 LANGUAGES ${LANGUAGES})
# Set TWEAK if not defined in PROJECT_VERSION above to
# have a valid tweak version without propagating it
@@ -67,6 +67,7 @@ MESSAGE(STATUS "VENDOR: ${VENDOR}")
MESSAGE(STATUS "VERSION: ${PROJECT_VERSION}")
IF(ANDROID)
+ GET_ANDROID_TOOLCHAIN_VARS(ANDROID_TOOLCHAIN_PREFIX ANDROID_TOOLCHAIN_MACHINE_NAME)
IF(NOT BUILD_PREVIEW)
SET(BUILD_PREVIEW false)
ENDIF()
@@ -78,6 +79,13 @@ IF(ANDROID)
MESSAGE(STATUS "ANDROID_VERSION_CODE: ${ANDROID_VERSION_CODE}")
ENDIF()
+IF(IOS)
+ IF(NOT USE_DISTRIBUTION_PROFILE)
+ SET(USE_DISTRIBUTION_PROFILE false)
+ ENDIF()
+ MESSAGE(STATUS "USE_DISTRIBUTION_PROFILE: ${USE_DISTRIBUTION_PROFILE}")
+ENDIF()
+
IF("${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
MESSAGE(FATAL_ERROR "in tree building is not supported!")
ENDIF()
diff --git a/LICENSE.officially.txt b/LICENSE.officially.txt
index 4790228..0990aa8 100644
--- a/LICENSE.officially.txt
+++ b/LICENSE.officially.txt
@@ -466,7 +466,7 @@ Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbeding
Qt
Lizenz: LGPL v3
- Version: 5.8.0
+ Version: 5.9.3
Adresse: https://www.qt.io/
http_parser
@@ -661,11 +661,7 @@ permanent authorization for you to choose that version for the Library.
-http_parser.c is based on src/http/ngx_http_parse.c from NGINX copyright
-Igor Sysoev.
-
-Additional changes are licensed under the same terms as NGINX and
-copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Copyright Joyent, Inc. and other Node contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
diff --git a/LICENSE.txt b/LICENSE.txt
index ff3dee9..e43986d 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -416,7 +416,7 @@ Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbeding
Qt
Lizenz: LGPL v3
- Version: 5.8.0
+ Version: 5.9.3
Adresse: https://www.qt.io/
http_parser
@@ -611,11 +611,7 @@ permanent authorization for you to choose that version for the Library.
-http_parser.c is based on src/http/ngx_http_parse.c from NGINX copyright
-Igor Sysoev.
-
-Additional changes are licensed under the same terms as NGINX and
-copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Copyright Joyent, Inc. and other Node contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
diff --git a/README.rst b/README.rst
index 6857986..3927a6e 100644
--- a/README.rst
+++ b/README.rst
@@ -170,3 +170,23 @@ Nachdem die Build-Umgebung eingerichtet ist, kann je nach System ein Package ers
$ make install
$ make apk
+
+
+
+Reproduzierbarer Build
+----------------------
+Wir sind stets bemüht den Build des offiziellen Binaries der AusweisApp2 nachvollziehbar zu gestalten.
+Daher haben wir unter anderem eine README in dem Unterordner ``./libs`` hinterlegt, die den Aufbau
+der Buildumgebung und den Build der externen Bibliotheken beschreibt.
+Anhand dieser Anleitung können Sie nachvollziehen, wie unser internes Buildsystem aufgebaut ist und
+welche Compiler bzw. Compiler-Versionen wir verwenden.
+
+Im Unterordner ``./resources/jenkins/`` ist es möglich, unsere Konfiguration des CI-Servers einzusehen.
+Die Konfiguration besteht aus mehreren Dockerfiles und JobDSL-Dateien.
+
+Anhand dieser Skripte ist es möglich, den Build der AusweisApp2 zu reproduzieren.
+Ein Unterschied zum offiziellen Binary sollte lediglich in eventuellen Pfaden,
+einem Datum bzw. Zeitstempel und Signaturen bestehen.
+
+.. seealso::
+ https://reproducible-builds.org/
diff --git a/cmake/Appcast.cmake b/cmake/Appcast.cmake
index 59b75ea..32e089a 100644
--- a/cmake/Appcast.cmake
+++ b/cmake/Appcast.cmake
@@ -47,15 +47,15 @@ IF(MAC OR LINUX OR WIN32)
FILE(GLOB TAR_GZ_FILES ${PROJECT_BINARY_DIR}/*.tar.gz)
IF(DMG_FILES)
- ADD_APPCAST_FILE("${DMG_FILES}" "Q_OS_MAC")
+ ADD_APPCAST_FILE("${DMG_FILES}" "mac")
ENDIF()
IF(MSI_FILES)
- ADD_APPCAST_FILE("${MSI_FILES}" "Q_OS_WIN32")
+ ADD_APPCAST_FILE("${MSI_FILES}" "win")
ENDIF()
IF(TAR_GZ_FILES)
- ADD_APPCAST_FILE("${TAR_GZ_FILES}" "SOURCES")
+ ADD_APPCAST_FILE("${TAR_GZ_FILES}" "src")
ENDIF()
IF(APPCAST_ITEMS)
diff --git a/cmake/CompilerFlags.cmake b/cmake/CompilerFlags.cmake
index 0694de2..5c30804 100644
--- a/cmake/CompilerFlags.cmake
+++ b/cmake/CompilerFlags.cmake
@@ -9,14 +9,12 @@ ADD_DEFINITIONS(-DQT_NO_EXCEPTIONS)
IF(QT_VENDOR STREQUAL "Governikus")
ADD_DEFINITIONS(-DGOVERNIKUS_QT)
+ ADD_DEFINITIONS(-DQT_DEPRECATED_WARNINGS)
ENDIF()
-IF(CMAKE_VERSION VERSION_LESS 3.2)
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-ELSE()
- SET(CMAKE_CXX_STANDARD 11)
- SET(CMAKE_CXX_STANDARD_REQUIRED ON)
-ENDIF()
+SET(CMAKE_CXX_STANDARD 11)
+SET(CMAKE_CXX_STANDARD_REQUIRED ON)
+SET(CMAKE_CXX_EXTENSIONS OFF)
IF(NOT DEFINED WARNINGS_ARE_ERRORS AND VENDOR_GOVERNIKUS)
SET(WARNINGS_ARE_ERRORS ON)
@@ -32,11 +30,17 @@ ELSE()
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
STRING(REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Wcast-qual -Wshadow -Wvla")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-qual -Wshadow")
+
+ ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE LINK -flto)
ADD_FLAG(-fno-exceptions)
ADD_FLAG(-fstack-protector-strong -fstack-protector)
ADD_FLAG(-fuse-ld=gold VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -fuse-ld=gold)
+ ADD_FLAG(-Wold-style-cast)
+ ADD_FLAG(-Wmost)
+ ADD_FLAG(-Wpedantic)
+ ADD_FLAG(-Wvla)
ADD_FLAG(-Wconversion)
ADD_FLAG(-Wloop-analysis)
ADD_FLAG(-Wlogical-op)
@@ -44,20 +48,28 @@ ELSE()
ADD_FLAG(-Wduplicated-cond)
ADD_FLAG(-Wweak-vtables)
ADD_FLAG(-Wcovered-switch-default)
+ ADD_FLAG(-Wduplicated-branches)
+ ADD_FLAG(-Wdocumentation)
+ ADD_FLAG(-Wsuggest-override)
+ ADD_FLAG(-Winconsistent-missing-override)
+ ADD_FLAG(-Winconsistent-missing-destructor-override)
+ ADD_FLAG(-Wnon-virtual-dtor)
+ ADD_FLAG(-Winitializer-overrides)
+ ADD_FLAG(-Wunreachable-code-aggressive)
+ ADD_FLAG(-Wnewline-eof)
ADD_FLAG(-Wno-gnu-zero-variadic-macro-arguments) # Qt (qDebug) is not compatible
+
IF(ANDROID)
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
+ IF(CMAKE_COMPILER_IS_GNUCXX)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64 -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
+ ENDIF()
SET(CMAKE_CXX_VISIBILITY_PRESET hidden)
ENDIF()
- IF("${CMAKE_BUILD_TYPE}" STREQUAL "RELEASE")
- ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -flto)
- ENDIF()
-
- IF(WARNINGS_ARE_ERRORS AND NOT CMAKE_GENERATOR STREQUAL Xcode)
+ IF(WARNINGS_ARE_ERRORS)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
ENDIF()
@@ -73,17 +85,21 @@ ELSE()
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
IF(SANITIZER)
- IF(CMAKE_COMPILER_IS_GNUCXX)
- ADD_FLAG("-fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls" LINK -fsanitize=address -fsanitize=undefined)
- ELSE()
- ADD_FLAG("-fsanitize=address -fsanitize=undefined -fsanitize=unsigned-integer-overflow -fsanitize-address-use-after-scope -fno-omit-frame-pointer -fno-optimize-sibling-calls" LINK -fsanitize=address -fsanitize=undefined)
+ IF(NOT SANITIZER_SKIP_ASAN)
+ SET(SANITIZER_FLAGS "-fsanitize=address")
+ SET(SANITIZER_LINK_FLAGS "-fsanitize=address")
ENDIF()
+ SET(SANITIZER_FLAGS "${SANITIZER_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls")
+ ADD_FLAG("${SANITIZER_FLAGS} -fsanitize=unsigned-integer-overflow -fsanitize-address-use-after-scope" "${SANITIZER_FLAGS}" LINK "${SANITIZER_LINK_FLAGS} -fsanitize=undefined")
+ ENDIF()
+
+ IF(CMAKE_CXX_COMPILER_ID STREQUAL Intel)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd1875,1682,2259,654,177")
ENDIF()
ENDIF()
-# enable Objective-C support on MacOS X
-IF(APPLE)
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++")
+IF(APPLE AND NOT IOS)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++ -mmacosx-version-min=10.9")
ENDIF()
diff --git a/cmake/DVCS.cmake b/cmake/DVCS.cmake
index 11b40c8..ce7e3f6 100644
--- a/cmake/DVCS.cmake
+++ b/cmake/DVCS.cmake
@@ -93,12 +93,6 @@ MACRO(GET_DVCS_INFO)
DVCS_CALL("revision" "-" id -i)
ELSEIF(GIT_FOUND)
DVCS_CALL("revision" "-" rev-parse --verify --short HEAD)
- DVCS_EXECUTE(dvcs_clean_wc diff-index --quiet HEAD)
- IF(NOT DEFINED dvcs_clean_wc)
- MESSAGE(STATUS "DVCS: dirty working copy")
- SET(dvcs_revision ${dvcs_revision}+)
- SET(VERSION_DVCS ${VERSION_DVCS}+)
- ENDIF()
ENDIF()
ENDMACRO()
diff --git a/cmake/DefaultFiles.cmake b/cmake/DefaultFiles.cmake
index 90eaef5..7737992 100644
--- a/cmake/DefaultFiles.cmake
+++ b/cmake/DefaultFiles.cmake
@@ -1,38 +1,27 @@
+SET(REMOTE_CONFIG_URL_PROD https://appl.governikus-asp.de/ausweisapp2)
IF(JENKINS_APPCAST)
- SET(REMOTE_CONFIG_URL https://buildautentapp/job/${JENKINS_APPCAST}/lastSuccessfulBuild/artifact CACHE STRING "Remote config download URL" FORCE)
+ SET(REMOTE_CONFIG_URL https://vtf-aajenkins.tf.bos-test.de/job/${JENKINS_APPCAST}/lastSuccessfulBuild/artifact CACHE STRING "Remote config download URL" FORCE)
ELSE()
- SET(REMOTE_CONFIG_URL https://appl.governikus-asp.de/ausweisapp2 CACHE STRING "Remote config download URL" FORCE)
+ SET(REMOTE_CONFIG_URL ${REMOTE_CONFIG_URL_PROD} CACHE STRING "Remote config download URL" FORCE)
ENDIF()
FUNCTION(CONFIGURE_DEFAULT_FILES _destination)
- # Set DEFAULT_PROVIDER_FILE to replace this in config.json.in.
- IF(IOS)
- SET(DEFAULT_PROVIDER_FILE default-providers-ios.json)
- ELSE()
- SET(DEFAULT_PROVIDER_FILE default-providers.json)
- ENDIF()
-
IF(JENKINS_APPCAST)
SET(REMOTE_CONFIG_PATH_APPCAST /build)
SET(REMOTE_CONFIG_PATH_APPCAST_BETA /build)
SET(REMOTE_CONFIG_PATH_PROVIDERS /source/resources)
- SET(REMOTE_CONFIG_PATH_DRIVERS /source/resources)
+ SET(REMOTE_CONFIG_PATH_READERS /source/resources)
ELSE()
SET(REMOTE_CONFIG_PATH_APPCAST )
SET(REMOTE_CONFIG_PATH_APPCAST_BETA /beta)
SET(REMOTE_CONFIG_PATH_PROVIDERS )
- SET(REMOTE_CONFIG_PATH_DRIVERS /driver)
+ SET(REMOTE_CONFIG_PATH_READERS /reader)
ENDIF()
+ SET(REMOTE_CONFIG_URL_READER_IMAGES ${REMOTE_CONFIG_URL_PROD}/reader)
# Copy secure storage file, so that the AusweisApp2 can be started from the build directory.
CONFIGURE_FILE(${RESOURCES_DIR}/config.json.in ${_destination}/config.json @ONLY)
- # The same with default providers
- CONFIGURE_FILE(${RESOURCES_DIR}/${DEFAULT_PROVIDER_FILE} ${_destination}/default-providers.json COPYONLY)
-
- # The same with default supported devices
- CONFIGURE_FILE(${RESOURCES_DIR}/default-supported-devices.json ${_destination}/default-supported-devices.json COPYONLY)
-
# Copy qtlogging.ini file
CONFIGURE_FILE(${RESOURCES_DIR}/qtlogging.ini ${_destination}/qtlogging.ini COPYONLY)
ENDFUNCTION()
diff --git a/cmake/Helper.cmake b/cmake/Helper.cmake
index 44d3945..64534f8 100644
--- a/cmake/Helper.cmake
+++ b/cmake/Helper.cmake
@@ -1,9 +1,22 @@
INCLUDE(CheckCXXCompilerFlag)
-INCLUDE(CMakeParseArguments)
+# Check if a compiler flag is supported by current compiler.
+#
+# Options
+# NOQUOTES: Do not add quotes to the variable (not used if it is a TARGET)
+#
+# Parameter
+# NAME: Add a human readable name. This is for configure output only to
+# group multiple flags or to indicate the usage.
+# LINK: Use these linker flags to try the compiler flag. The linker
+# flags won't be added. They are for testing only.
+# VAR: Checked compiler flags will be added to these variables. (default: CMAKE_CXX_FLAGS)
+# It is possible to add multiple VAR parameter.
+# If VAR parameter is a cmake TARGET the compiler flag will be added
+# to the COMPILE_FLAGS property of this TARGET only.
FUNCTION(ADD_FLAG)
SET(options NOQUOTES)
- SET(oneValueArgs)
+ SET(oneValueArgs NAME)
SET(multiValueArgs LINK VAR)
cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
@@ -16,13 +29,19 @@ FUNCTION(ADD_FLAG)
ENDIF()
FOREACH(flag ${_PARAM_UNPARSED_ARGUMENTS})
- STRING(REPLACE "-" "_" flagname ${flag})
+ SET(flagname ${flag})
+ IF(_PARAM_NAME)
+ SET(flagname "${flagname}_${_PARAM_NAME}")
+ ENDIF()
+ STRING(REPLACE "-" "_" flagname ${flagname})
STRING(REPLACE " " "_" flagname ${flagname})
CHECK_CXX_COMPILER_FLAG(${flag} ${flagname})
IF(${flagname})
FOREACH(var ${_PARAM_VAR})
- IF(_PARAM_NOQUOTES)
+ IF (${var} MATCHES "^AusweisApp")
+ SET_PROPERTY(TARGET ${var} APPEND_STRING PROPERTY COMPILE_FLAGS " ${flag}")
+ ELSEIF(_PARAM_NOQUOTES)
SET(${var} ${${var}} ${flag} PARENT_SCOPE)
ELSE()
SET(${var} "${${var}} ${flag}" PARENT_SCOPE)
@@ -36,10 +55,6 @@ ENDFUNCTION()
FUNCTION(GET_FILE_MATCHER _result_remove _result_keep)
- IF(NOT ${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
- LIST(APPEND matcher_remove "_debug")
- ENDIF()
-
IF(NOT ANDROID)
LIST(APPEND matcher_remove "_android")
ELSE()
@@ -115,9 +130,11 @@ FUNCTION(ADD_PLATFORM_LIBRARY _name)
GET_FILE_MATCHER(matcher_remove matcher_keep)
FOREACH(file ${FILES})
+ STRING(REPLACE "${CMAKE_SOURCE_DIR}" "" file_stripped "${file}")
+
SET(keep FALSE)
FOREACH(match ${matcher_keep})
- IF("${file}" MATCHES ${match})
+ IF("${file_stripped}" MATCHES ${match})
SET(keep TRUE)
BREAK()
ENDIF()
@@ -125,10 +142,10 @@ FUNCTION(ADD_PLATFORM_LIBRARY _name)
IF(NOT keep)
FOREACH(match ${matcher_remove})
- IF("${file}" MATCHES ${match})
+ IF("${file_stripped}" MATCHES ${match})
LIST(REMOVE_ITEM FILES "${file}")
BREAK()
- ELSEIF("${file}" MATCHES "_generic")
+ ELSEIF("${file_stripped}" MATCHES "_generic")
LIST(REMOVE_ITEM FILES "${file}")
LIST(APPEND GENERICS "${file}")
BREAK()
@@ -144,7 +161,8 @@ FUNCTION(ADD_PLATFORM_LIBRARY _name)
SET(found FALSE)
FOREACH(file ${FILES})
- IF("${file}" MATCHES "${generic_basename}" AND NOT "${file}" MATCHES ".h$")
+ STRING(REPLACE "${CMAKE_SOURCE_DIR}" "" file_stripped "${file}")
+ IF("${file_stripped}" MATCHES "${generic_basename}" AND NOT "${file_stripped}" MATCHES ".h$")
SET(found TRUE)
BREAK()
ENDIF()
@@ -160,61 +178,22 @@ FUNCTION(ADD_PLATFORM_LIBRARY _name)
ENDFUNCTION()
-# This FUNCTION is a workaround for a "bug" in cmake to use OBJECT LIBRARIES with IMPORTED TARGETS like Qt
-# http://www.cmake.org/Bug/view.php?id=14778
FUNCTION(ADD_OBJECT_LIBRARY TargetName Files)
- ADD_LIBRARY(${TargetName} OBJECT ${Files})
+ SET(_name ${TargetName}_ObjectLib)
+ ADD_LIBRARY(${_name} OBJECT ${Files})
FOREACH(MODULE ${ARGN})
- TARGET_INCLUDE_DIRECTORIES(${TargetName} PRIVATE $)
- TARGET_COMPILE_DEFINITIONS(${TargetName} PRIVATE $)
+ TARGET_INCLUDE_DIRECTORIES(${_name} SYSTEM PRIVATE $)
+ TARGET_COMPILE_DEFINITIONS(${_name} PRIVATE $)
ENDFOREACH()
IF(Qt5_POSITION_INDEPENDENT_CODE)
- SET_TARGET_PROPERTIES(${TargetName} PROPERTIES POSITION_INDEPENDENT_CODE ON)
- ENDIF()
-ENDFUNCTION()
-
-
-FUNCTION(GET_QUOTED_STRING _dest _str _filename)
- IF(CMAKE_GENERATOR STREQUAL Xcode AND CMAKE_VERSION VERSION_LESS "3.5")
- SET(tmp_var \\\\"${_str}\\\\")
- ELSEIF(NOT "${_filename}" MATCHES ".rc$")
- SET(tmp_var \\"${_str}\\")
- ELSE()
- SET(tmp_var ${_str})
+ SET_TARGET_PROPERTIES(${_name} PROPERTIES POSITION_INDEPENDENT_CODE ON)
ENDIF()
- SET(${_dest} ${tmp_var} PARENT_SCOPE)
-ENDFUNCTION()
-
-FUNCTION(ADD_STRING_DEFINITION _str _def)
- IF(ARGN)
- FOREACH(arg ${ARGN})
- IF (${arg} MATCHES "^AusweisApp")
- SET(ARG_TYPE TARGET)
- ELSE()
- SET(ARG_TYPE SOURCE)
- ENDIF()
-
- IF(NOT "${_str}" STREQUAL "")
- GET_QUOTED_STRING(tmp_var ${_str} ${arg})
- SET(tmp_var =\"${tmp_var}\")
- ENDIF()
-
- SET_PROPERTY(${ARG_TYPE} ${arg} APPEND_STRING PROPERTY COMPILE_FLAGS " -D${_def}${tmp_var}")
- ENDFOREACH()
- ELSE()
- IF(NOT "${_str}" STREQUAL "")
- GET_QUOTED_STRING(tmp_var ${_str} ${arg})
- SET(tmp_var =${tmp_var})
- ENDIF()
- ADD_DEFINITIONS(-D${_def}${tmp_var})
- ENDIF()
-ENDFUNCTION()
-
-FUNCTION(ADD_DEFINITION _def)
- ADD_STRING_DEFINITION("" ${_def} ${ARGN})
+ ADD_LIBRARY(${TargetName} INTERFACE)
+ TARGET_SOURCES(${TargetName} INTERFACE $)
+ TARGET_INCLUDE_DIRECTORIES(${TargetName} INTERFACE "$")
ENDFUNCTION()
@@ -241,6 +220,17 @@ FUNCTION(DIRLIST_OF_FILES _result _files)
SET(${_result} ${dirlist} PARENT_SCOPE)
ENDFUNCTION()
+
+FUNCTION(GET_ANDROID_TOOLCHAIN_VARS _prefix _machine)
+ GET_FILENAME_COMPONENT(ANDROID_TOOLCHAIN_MACHINE_NAME "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}" NAME)
+ STRING(REGEX REPLACE "-$" "" ANDROID_TOOLCHAIN_MACHINE_NAME "${ANDROID_TOOLCHAIN_MACHINE_NAME}")
+ STRING(REGEX MATCH "/toolchains/(.*)/prebuilt/" _unused "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}")
+ STRING(REGEX REPLACE "-${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}$" "" ANDROID_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
+ SET(${_prefix} ${ANDROID_TOOLCHAIN_PREFIX} PARENT_SCOPE)
+ SET(${_machine} ${ANDROID_TOOLCHAIN_MACHINE_NAME} PARENT_SCOPE)
+ENDFUNCTION()
+
+
IF("${CMAKE_SYSTEM_NAME}" MATCHES "BSD")
SET(BSD true)
ENDIF()
@@ -285,6 +275,11 @@ IF(NOT COMMAND FIND_HOST_PACKAGE)
ENDIF()
FUNCTION(FETCH_TARGET_LOCATION _destination _target)
+ SET(options NAME)
+ SET(oneValueArgs)
+ SET(multiValueArgs)
+ cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
GET_TARGET_PROPERTY(tmp "${_target}" IMPORTED_LOCATION_${CMAKE_BUILD_TYPE})
IF(NOT tmp)
@@ -299,6 +294,11 @@ FUNCTION(FETCH_TARGET_LOCATION _destination _target)
GET_TARGET_PROPERTY(tmp "${_target}" IMPORTED_LOCATION)
ENDIF()
+ IF(_PARAM_NAME)
+ GET_FILENAME_COMPONENT(realpath "${tmp}" REALPATH)
+ GET_FILENAME_COMPONENT(tmp "${realpath}" NAME)
+ ENDIF()
+
SET(${_destination} ${tmp} PARENT_SCOPE)
ENDFUNCTION()
@@ -326,6 +326,7 @@ IF(WIN32)
SET(SIGNTOOL_PARAMS ${SIGNTOOL_PARAMS} /n ${WIN_SIGN_SUBJECT_NAME})
MESSAGE(STATUS "Files will be signed using: ${WIN_SIGN_SUBJECT_NAME}")
ELSE()
+ STRING(REPLACE "\\" "/" WIN_SIGN_KEYSTORE "${WIN_SIGN_KEYSTORE}")
SET(SIGNTOOL_PARAMS ${SIGNTOOL_PARAMS} /f ${WIN_SIGN_KEYSTORE} /p ${WIN_SIGN_KEYSTORE_PSW})
MESSAGE(STATUS "Files will be signed using: ${WIN_SIGN_KEYSTORE}")
ENDIF()
diff --git a/cmake/Install.cmake b/cmake/Install.cmake
index eb8e9c5..b0729e3 100644
--- a/cmake/Install.cmake
+++ b/cmake/Install.cmake
@@ -80,19 +80,6 @@ ELSEIF(APPLE AND NOT IOS)
ENDFOREACH()
ENDFOREACH()
- FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
- SET(_dir "${QT_HOST_PREFIX}/qml")
- 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
- GET_FILENAME_COMPONENT(_lib_dest_dir ${_lib_dest} DIRECTORY)
- INSTALL(FILES ${_lib} DESTINATION ${MACOS_BUNDLE_RESOURCES_DIR}/qml_stationary/${_lib_dest_dir} COMPONENT Runtime)
- LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Resources/qml_stationary/${_lib_dest}")
- ENDIF()
- ENDFOREACH()
- ENDFOREACH()
-
INSTALL(TARGETS AusweisApp DESTINATION . COMPONENT Application)
INSTALL(FILES ${platformMac} DESTINATION ${MACOS_BUNDLE_PLUGINS_DIR}/platforms COMPONENT Runtime)
@@ -100,9 +87,8 @@ ELSEIF(APPLE AND NOT IOS)
"
${SEARCH_ADDITIONAL_DIRS}
file(GLOB_RECURSE QTPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_PLUGINS_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
- file(GLOB_RECURSE QtQuickPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_RESOURCES_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
INCLUDE(BundleUtilities)
- FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}\" \"\${QTPLUGINS};\${QtQuickPLUGINS}\" \"${TOOLCHAIN_LIB_PATH};\${ADDITIONAL_DIRS}\")
+ FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}\" \"\${QTPLUGINS}\" \"${TOOLCHAIN_LIB_PATH};\${ADDITIONAL_DIRS}\")
" COMPONENT Runtime)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtCore.framework")
@@ -111,18 +97,13 @@ ELSEIF(APPLE AND NOT IOS)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtNetwork.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtSvg.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWidgets.framework")
- LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework")
- LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQml.framework")
- LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework")
- LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickControls2.framework")
- LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickTemplates2.framework")
- LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickWidgets.framework")
+ LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework") # remove if disabled in Qt
+ LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWebSockets.framework")
- FOREACH (OPENSSL_LIBRARY ${OPENSSL_LIBRARIES})
- GET_FILENAME_COMPONENT(OPENSSL_LIBRARY_REAL ${OPENSSL_LIBRARY} REALPATH)
- GET_FILENAME_COMPONENT(OPENSSL_LIBRARY_NAME ${OPENSSL_LIBRARY_REAL} NAME)
- LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${OPENSSL_LIBRARY_NAME}")
- ENDFOREACH()
+ FETCH_TARGET_LOCATION(opensslCryptoName "OpenSSL::Crypto" NAME)
+ FETCH_TARGET_LOCATION(opensslSslName "OpenSSL::SSL" NAME)
+ LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${opensslCryptoName}")
+ LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${opensslSslName}")
# set it to parent scope to be able to access it from Packaging.cmake
SET(ADDITIONAL_BUNDLE_FILES_TO_SIGN ${ADDITIONAL_BUNDLE_FILES_TO_SIGN} PARENT_SCOPE)
@@ -154,7 +135,6 @@ ELSEIF(ANDROID)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/drawable-${entry} COMPONENT Runtime RENAME npa.png)
ENDFOREACH()
- INSTALL(FILES ${PACKAGING_DIR}/android/nfc_tech_filter.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/xml COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/styles.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime)
FILE(GLOB_RECURSE JAVA_FILES "${SRC_DIR}/*.java")
@@ -169,11 +149,6 @@ ELSEIF(ANDROID)
ENDIF()
CONFIGURE_FILE(${PACKAGING_DIR}/android/AndroidManifest.xml.in ${ANDROID_PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY)
- GET_FILENAME_COMPONENT(ANDROID_TOOLCHAIN_MACHINE_NAME "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}" NAME)
- STRING(REGEX REPLACE "-$" "" ANDROID_TOOLCHAIN_MACHINE_NAME "${ANDROID_TOOLCHAIN_MACHINE_NAME}")
- STRING(REGEX MATCH "/toolchains/(.*)/prebuilt/" _unused "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}")
- STRING(REGEX REPLACE "-${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}$" "" ANDROID_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
-
SET(ANDROID_DEPLOYMENT_SETTINGS ${PROJECT_BINARY_DIR}/libAusweisApp2.so-deployment-settings.json CACHE INTERNAL "apk deployment" FORCE)
SET(ANDROID_APP_BINARY "${CMAKE_INSTALL_PREFIX}/${ANDROID_DEST}/libAusweisApp2.so")
CONFIGURE_FILE(${PACKAGING_DIR}/android/libAusweisApp2.so-deployment-settings.json.in ${ANDROID_DEPLOYMENT_SETTINGS} @ONLY)
@@ -248,18 +223,3 @@ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.json DESTINATION ${DEFAULT_FILE
# qtlogging.ini
INSTALL(FILES ${RESOURCES_DIR}/qtlogging.ini DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
-# qml directories
-IF(DESKTOP)
- INSTALL(DIRECTORY ${RESOURCES_DIR}/qml_stationary DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
- FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
- INSTALL(DIRECTORY ${QT_HOST_PREFIX}/qml/${entry} DESTINATION ${DEFAULT_FILE_DESTINATION}/qml_stationary COMPONENT Runtime PATTERN "*.dylib" EXCLUDE)
- ENDFOREACH()
-ELSE()
- INSTALL(DIRECTORY ${RESOURCES_DIR}/qml DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
-ENDIF()
-
-# default-providers.json
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/default-providers.json DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
-
-# default-supported-devices.json
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/default-supported-devices.json DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
diff --git a/cmake/Libraries.cmake b/cmake/Libraries.cmake
index 8c2e307..f042776 100644
--- a/cmake/Libraries.cmake
+++ b/cmake/Libraries.cmake
@@ -1,30 +1,34 @@
# Set CMAKE_PREFIX_PATH with toolchain directory
-IF(MINGW)# AND CMAKE_VERSION VERSION_LESS 3.3.0) # see https://public.kitware.com/Bug/view.php?id=15409
+# see https://public.kitware.com/Bug/view.php?id=15409
+IF(MINGW)
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")
ENDIF()
-SET(MIN_QT_VERSION 5.8)
+SET(MIN_QT_VERSION 5.9)
FIND_PACKAGE(Qt5Core ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Network ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Xml ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Svg ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5LinguistTools ${MIN_QT_VERSION} REQUIRED)
-FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
-FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
-FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5WebSockets ${MIN_QT_VERSION} REQUIRED)
IF(DESKTOP)
FIND_PACKAGE(Qt5Widgets ${MIN_QT_VERSION} REQUIRED)
- FIND_PACKAGE(Qt5QuickWidgets ${MIN_QT_VERSION} REQUIRED)
- FIND_PACKAGE(Qt5PrintSupport ${MIN_QT_VERSION} REQUIRED)
IF(WIN32)
FIND_PACKAGE(Qt5WinExtras ${MIN_QT_VERSION} REQUIRED)
ENDIF()
ENDIF()
+IF(ANDROID OR IOS OR WINDOWS_STORE OR "${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
+ FIND_PACKAGE(Qt5Nfc ${MIN_QT_VERSION} REQUIRED)
+ FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
+ FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
+ FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
+ENDIF()
+
+
IF(LINUX OR ANDROID OR IOS)
FIND_PACKAGE(Qt5Bluetooth ${MIN_QT_VERSION} REQUIRED)
ENDIF()
@@ -58,19 +62,20 @@ IF(MINGW AND NOT CMAKE_CROSSCOMPILING)
SET(tmp_crosscompile_enabled TRUE)
SET(CMAKE_CROSSCOMPILING ON)
ENDIF()
-FIND_PACKAGE(OpenSSL 1.0.2 REQUIRED)
+IF(QT_VENDOR STREQUAL "Governikus")
+ FIND_PACKAGE(OpenSSL 1.0.2 REQUIRED) # see openssl_rsa_psk.patch
+ELSE()
+ FIND_PACKAGE(OpenSSL 1.1 REQUIRED)
+ENDIF()
IF(tmp_crosscompile_enabled)
SET(CMAKE_CROSSCOMPILING OFF)
ENDIF()
IF(ANDROID)
- STRING(REPLACE "libssl.so" "libgovssl.so" OPENSSL_LIBRARIES "${OPENSSL_LIBRARIES}")
- STRING(REPLACE "libcrypto.so" "libgovcrypto.so" OPENSSL_LIBRARIES "${OPENSSL_LIBRARIES}")
-
- STRING(REPLACE "libssl.so" "libgovssl.so" OPENSSL_SSL_LIBRARY "${OPENSSL_SSL_LIBRARY}")
- STRING(REPLACE "libcrypto.so" "libgovcrypto.so" OPENSSL_CRYPTO_LIBRARY "${OPENSSL_CRYPTO_LIBRARY}")
-
- MESSAGE(STATUS "Rewrite OPENSSL_LIBRARIES: ${OPENSSL_LIBRARIES}")
+ GET_TARGET_PROPERTY(CryptoLib OpenSSL::Crypto IMPORTED_LOCATION)
+ STRING(REPLACE "libcrypto.so" "libgovcrypto.so" CryptoLib "${CryptoLib}")
+ MESSAGE(STATUS "Rewrite OpenSSL::Crypto: ${CryptoLib}")
+ SET_TARGET_PROPERTIES(OpenSSL::Crypto PROPERTIES IMPORTED_LOCATION "${CryptoLib}")
ENDIF()
@@ -117,4 +122,8 @@ ENDIF()
IF("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
FIND_PACKAGE(Qt5Test ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickTest ${MIN_QT_VERSION} REQUIRED)
+
+ IF(DESKTOP AND NOT APPLE)
+ FIND_PACKAGE(Qt5UiPlugin ${MIN_QT_VERSION})
+ ENDIF()
ENDIF()
diff --git a/cmake/Messages.cmake b/cmake/Messages.cmake
index 302c577..c149e3c 100644
--- a/cmake/Messages.cmake
+++ b/cmake/Messages.cmake
@@ -7,17 +7,36 @@ MESSAGE(STATUS "CMAKE_SYSTEM_PREFIX_PATH: ${CMAKE_SYSTEM_PREFIX_PATH}")
MESSAGE(STATUS "CMAKE_SYSTEM_INCLUDE_PATH: ${CMAKE_SYSTEM_INCLUDE_PATH}")
MESSAGE(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}")
MESSAGE(STATUS "CMAKE_SYSROOT: ${CMAKE_SYSROOT}")
+MESSAGE(STATUS "CMAKE_SYSROOT_LINK: ${CMAKE_SYSROOT_LINK}")
+MESSAGE(STATUS "CMAKE_SYSROOT_COMPILE: ${CMAKE_SYSROOT_COMPILE}")
+MESSAGE(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
IF(ANDROID)
+ 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()
+ ENDFUNCTION()
+
MESSAGE(STATUS "CMAKE_ANDROID_NDK: ${CMAKE_ANDROID_NDK}")
MESSAGE(STATUS "CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG: ${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}")
MESSAGE(STATUS "CMAKE_ANDROID_ARCH_ABI: ${CMAKE_ANDROID_ARCH_ABI}")
MESSAGE(STATUS "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}")
MESSAGE(STATUS "CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION: ${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}")
+ MESSAGE(STATUS "ANDROID_TOOLCHAIN_PREFIX: ${ANDROID_TOOLCHAIN_PREFIX}")
+ MESSAGE(STATUS "ANDROID_TOOLCHAIN_MACHINE_NAME: ${ANDROID_TOOLCHAIN_MACHINE_NAME}")
MESSAGE(STATUS "ANDROID_SDK: ${ANDROID_SDK}")
MESSAGE(STATUS "ANDROID_BUILD_TOOLS_REVISION: ${ANDROID_BUILD_TOOLS_REVISION}")
+ READ_REVISION(ANDROID_NDK_REVISION ".*Revision = ([0-9|\\.]+)" "${CMAKE_ANDROID_NDK}/source.properties")
+ MESSAGE(STATUS "ANDROID_NDK_REVISION: ${ANDROID_NDK_REVISION}")
+
+ READ_REVISION(ANDROID_SDK_REVISION ".*Revision=([0-9|\\.]+)" "${ANDROID_SDK}/tools/source.properties")
+ MESSAGE(STATUS "ANDROID_SDK_REVISION: ${ANDROID_SDK_REVISION}")
+
ELSEIF(IOS)
MESSAGE(STATUS "CMAKE_IOS_SDK_ROOT: ${CMAKE_IOS_SDK_ROOT}")
MESSAGE(STATUS "CMAKE_IOS_DEVELOPER_ROOT: ${CMAKE_IOS_DEVELOPER_ROOT}")
diff --git a/cmake/Packaging.cmake b/cmake/Packaging.cmake
index ecaa56a..817cde3 100644
--- a/cmake/Packaging.cmake
+++ b/cmake/Packaging.cmake
@@ -71,6 +71,7 @@ LIST(APPEND CPACK_SOURCE_IGNORE_FILES "\\\\.cproject")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "\\\\.reviewboardrc")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "utils/tlscheck")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "utils/testbedtool")
+LIST(APPEND CPACK_SOURCE_IGNORE_FILES "utils/fuzzing")
SET(CPACK_MONOLITHIC_INSTALL true)
@@ -97,7 +98,7 @@ IF(WIN32)
ELSEIF(IOS)
FILE(WRITE ${PROJECT_BINARY_DIR}/ipa.cmake "
- SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;UninstalledProducts;UninstalledProducts/iphoneos\")
+ SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;\${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos\")
FOREACH(dir \${BUNDLE_DIRS})
SET(tmpBundleDir ${PROJECT_BINARY_DIR}/src/\${dir}/${PROJECT_NAME}.app)
diff --git a/cmake/Tools.cmake b/cmake/Tools.cmake
index a6df4de..05db2eb 100644
--- a/cmake/Tools.cmake
+++ b/cmake/Tools.cmake
@@ -175,66 +175,143 @@ ENDFUNCTION()
FIND_PROGRAM(CONVERT convert CMAKE_FIND_ROOT_PATH_BOTH)
IF(CONVERT)
- SET(CONVERT_CMD convert -background transparent)
- ADD_CUSTOM_TARGET(npaicons
- COMMAND ${CONVERT_CMD} npa.svg -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.ico
- COMMAND ${CONVERT_CMD} npa.svg -resize 16x16 autentapp2.iconset/icon_16x16.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 32x32 autentapp2.iconset/icon_16x16@2x.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 32x32 autentapp2.iconset/icon_32x32.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 64x64 autentapp2.iconset/icon_32x32@2x.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 128x128 autentapp2.iconset/icon_128x128.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 256x256 autentapp2.iconset/icon_128x128@2x.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 256x256 autentapp2.iconset/icon_256x256.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 512x512 autentapp2.iconset/icon_256x256@2x.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 512x512 autentapp2.iconset/icon_512x512.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 1024x1024 autentapp2.iconset/icon_512x512@2x.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 36x36 android/ldpi/npa.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 48x48 android/mdpi/npa.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 72x72 android/hdpi/npa.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 96x96 android/xhdpi/npa.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 144x144 android/xxhdpi/npa.png
- COMMAND ${CONVERT_CMD} npa.svg -resize 192x192 android/xxxhdpi/npa.png
- COMMAND ${CONVERT_CMD} npa_beta.svg -resize 36x36 android/ldpi/npa_beta.png
- COMMAND ${CONVERT_CMD} npa_beta.svg -resize 48x48 android/mdpi/npa_beta.png
- COMMAND ${CONVERT_CMD} npa_beta.svg -resize 72x72 android/hdpi/npa_beta.png
- COMMAND ${CONVERT_CMD} npa_beta.svg -resize 96x96 android/xhdpi/npa_beta.png
- COMMAND ${CONVERT_CMD} npa_beta.svg -resize 144x144 android/xxhdpi/npa_beta.png
- COMMAND ${CONVERT_CMD} npa_beta.svg -resize 192x192 android/xxxhdpi/npa_beta.png
- COMMAND ${CONVERT_CMD} npa_preview.svg -resize 36x36 android/ldpi/npa_preview.png
- COMMAND ${CONVERT_CMD} npa_preview.svg -resize 48x48 android/mdpi/npa_preview.png
- COMMAND ${CONVERT_CMD} npa_preview.svg -resize 72x72 android/hdpi/npa_preview.png
- COMMAND ${CONVERT_CMD} npa_preview.svg -resize 96x96 android/xhdpi/npa_preview.png
- COMMAND ${CONVERT_CMD} npa_preview.svg -resize 144x144 android/xxhdpi/npa_preview.png
- COMMAND ${CONVERT_CMD} npa_preview.svg -resize 192x192 android/xxxhdpi/npa_preview.png
+ SET(CONVERT_CMD convert)
+ SET(BACKGROUND_COLOR "transparent")
+
+ ADD_CUSTOM_TARGET(npaicons.win
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.svg npa.ico
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(npaicons.android.preview
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_preview.svg android/ldpi/npa_preview.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 48x48 npa_preview.svg android/mdpi/npa_preview.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 72x72 npa_preview.svg android/hdpi/npa_preview.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 96x96 npa_preview.svg android/xhdpi/npa_preview.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 144x144 npa_preview.svg android/xxhdpi/npa_preview.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 192x192 npa_preview.svg android/xxxhdpi/npa_preview.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(npaicons.android.beta
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_beta.svg android/ldpi/npa_beta.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 48x48 npa_beta.svg android/mdpi/npa_beta.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 72x72 npa_beta.svg android/hdpi/npa_beta.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 96x96 npa_beta.svg android/xhdpi/npa_beta.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 144x144 npa_beta.svg android/xxhdpi/npa_beta.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 192x192 npa_beta.svg android/xxxhdpi/npa_beta.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(npaicons.android
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa.svg android/ldpi/npa.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 48x48 npa.svg android/mdpi/npa.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 72x72 npa.svg android/hdpi/npa.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 96x96 npa.svg android/xhdpi/npa.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 144x144 npa.svg android/xxhdpi/npa.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 192x192 npa.svg android/xxxhdpi/npa.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(npaicons.ios.beta
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa_beta.svg iOS/appIcons/beta/iconSmall.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa_beta.svg iOS/appIcons/beta/iconSmall@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa_beta.svg iOS/appIcons/beta/iconSmall@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa_beta.svg iOS/appIcons/beta/iconSmall40.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa_beta.svg iOS/appIcons/beta/iconSmall40@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/iconSmall40@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/icon60@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa_beta.svg iOS/appIcons/beta/icon60@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa_beta.svg iOS/appIcons/beta/icon76.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa_beta.svg iOS/appIcons/beta/icon76@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa_beta.svg iOS/appIcons/beta/icon83.5@2x.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(npaicons.ios
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa.svg iOS/appIcons/iconSmall.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa.svg iOS/appIcons/iconSmall@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa.svg iOS/appIcons/iconSmall@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa.svg iOS/appIcons/iconSmall40.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa.svg iOS/appIcons/iconSmall40@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/iconSmall40@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/icon60@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa.svg iOS/appIcons/icon60@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa.svg iOS/appIcons/icon76.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa.svg iOS/appIcons/icon76@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa.svg iOS/appIcons/icon83.5@2x.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ SET(BACKGROUND_COLOR "rgb\(220,235,246\)")
+
+ ADD_CUSTOM_TARGET(npaicons.iphone
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/Default-568h@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/launchImage568@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 480x480 -gravity center -extent 960x1704 npa.svg iOS/launchImages/launchImage568@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 353x353 -gravity center -extent 705x1334 npa.svg iOS/launchImages/launchImage667@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 563x563 -gravity center -extent 1125x2001 npa.svg iOS/launchImages/launchImage667@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 414x414 -gravity center -extent 828x1472 npa.svg iOS/launchImages/launchImage736@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 621x621 -gravity center -extent 1242x2208 npa.svg iOS/launchImages/launchImage736@3x.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(npaicons.ipad
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 768x768 -gravity center -extent 2048x1536 npa.svg iOS/launchImages/launchImage1024@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1152x1152 -gravity center -extent 3072x2304 npa.svg iOS/launchImages/launchImage1024@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 834x834 -gravity center -extent 2224x1668 npa.svg iOS/launchImages/launchImage1112@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1251x1251 -gravity center -extent 3336x2502 npa.svg iOS/launchImages/launchImage1112@3x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 -gravity center -extent 2732x2048 npa.svg iOS/launchImages/launchImage1366@2x.png
+ COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1536x1536 -gravity center -extent 4098x3072 npa.svg iOS/launchImages/launchImage1366@3x.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(npaicons DEPENDS npaicons.win npaicons.ios npaicons.ios.beta npaicons.iphone npaicons.ipad npaicons.android npaicons.android.beta npaicons.android.preview)
ENDIF()
FIND_PROGRAM(PNGQUANT pngquant CMAKE_FIND_ROOT_PATH_BOTH)
IF(PNGQUANT)
SET(PNGQUANT_CMD pngquant -f -o)
- ADD_CUSTOM_TARGET(pngquant
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_16x16.png -- autentapp2.iconset/icon_16x16.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_16x16@2x.png -- autentapp2.iconset/icon_16x16@2x.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_32x32.png -- autentapp2.iconset/icon_32x32.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_32x32@2x.png -- autentapp2.iconset/icon_32x32@2x.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_128x128.png -- autentapp2.iconset/icon_128x128.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_128x128@2x.png -- autentapp2.iconset/icon_128x128@2x.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_256x256.png -- autentapp2.iconset/icon_256x256.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_256x256@2x.png -- autentapp2.iconset/icon_256x256@2x.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_512x512.png -- autentapp2.iconset/icon_512x512.png
- COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_512x512@2x.png -- autentapp2.iconset/icon_512x512@2x.png
- COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png
- COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png
- COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png
- COMMAND ${PNGQUANT_CMD} android/xhdpi/npa.png -- android/xhdpi/npa.png
- COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa.png -- android/xxhdpi/npa.png
- COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png
- COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png
- COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png
- COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png
- COMMAND ${PNGQUANT_CMD} android/xhdpi/npa_beta.png -- android/xhdpi/npa_beta.png
- COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa_beta.png -- android/xxhdpi/npa_beta.png
- COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png
+ ADD_CUSTOM_TARGET(pngquant.ios.beta
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall.png -- iOS/appIcons/beta/iconSmall.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall@2x.png -- iOS/appIcons/beta/iconSmall@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall@3x.png -- iOS/appIcons/beta/iconSmall@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall40.png -- iOS/appIcons/beta/iconSmall40.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall40@2x.png -- iOS/appIcons/beta/iconSmall40@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall40@3x.png -- iOS/appIcons/beta/iconSmall40@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon60@2x.png -- iOS/appIcons/beta/icon60@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon60@3x.png -- iOS/appIcons/beta/icon60@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon76.png -- iOS/appIcons/beta/icon76.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon76@2x.png -- iOS/appIcons/beta/icon76@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon83.5@2x.png -- iOS/appIcons/beta/icon83.5@2x.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(pngquant.ios
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall.png -- iOS/appIcons/iconSmall.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall@2x.png -- iOS/appIcons/iconSmall@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall@3x.png -- iOS/appIcons/iconSmall@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall40.png -- iOS/appIcons/iconSmall40.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall40@2x.png -- iOS/appIcons/iconSmall40@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall40@3x.png -- iOS/appIcons/iconSmall40@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon60@2x.png -- iOS/appIcons/icon60@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon60@3x.png -- iOS/appIcons/icon60@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon76.png -- iOS/appIcons/icon76.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon76@2x.png -- iOS/appIcons/icon76@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon83.5@2x.png -- iOS/appIcons/icon83.5@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/Default-568h@2x.png -- iOS/launchImages/Default-568h@2x.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(pngquant.iphone
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@2x.png -- iOS/launchImages/launchImage568@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@3x.png -- iOS/launchImages/launchImage568@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@2x.png -- iOS/launchImages/launchImage667@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@3x.png -- iOS/launchImages/launchImage667@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@2x.png -- iOS/launchImages/launchImage736@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@3x.png -- iOS/launchImages/launchImage736@3x.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(pngquant.ipad
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@2x.png -- iOS/launchImages/launchImage1024@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@3x.png -- iOS/launchImages/launchImage1024@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@2x.png -- iOS/launchImages/launchImage1112@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@3x.png -- iOS/launchImages/launchImage1112@3x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@2x.png -- iOS/launchImages/launchImage1366@2x.png
+ COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@3x.png -- iOS/launchImages/launchImage1366@3x.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(pngquant.android.preview
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_preview.png -- android/ldpi/npa_preview.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_preview.png -- android/mdpi/npa_preview.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_preview.png -- android/hdpi/npa_preview.png
@@ -242,6 +319,41 @@ SET(PNGQUANT_CMD pngquant -f -o)
COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa_preview.png -- android/xxhdpi/npa_preview.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_preview.png -- android/xxxhdpi/npa_preview.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(pngquant.android.beta
+ COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png
+ COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png
+ COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png
+ COMMAND ${PNGQUANT_CMD} android/xhdpi/npa_beta.png -- android/xhdpi/npa_beta.png
+ COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa_beta.png -- android/xxhdpi/npa_beta.png
+ COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(pngquant.android
+ COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png
+ COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png
+ COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png
+ COMMAND ${PNGQUANT_CMD} android/xhdpi/npa.png -- android/xhdpi/npa.png
+ COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa.png -- android/xxhdpi/npa.png
+ COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png
+ WORKING_DIRECTORY ${RESOURCES_DIR}/images)
+
+ ADD_CUSTOM_TARGET(pngquant DEPENDS pngquant.ios pngquant.ios.beta pngquant.iphone pngquant.ipad pngquant.android pngquant.android.beta pngquant.android.preview)
+ENDIF()
+
+IF(NOT JAVA_EXECUTABLE)
+ FIND_PACKAGE(Java COMPONENTS Runtime)
+ IF(Java_JAVA_EXECUTABLE)
+ SET(JAVA_EXECUTABLE "${Java_JAVA_EXECUTABLE}")
+ ENDIF()
+ENDIF()
+IF(JAVA_EXECUTABLE)
+ FIND_FILE(PLANTUML plantuml.jar PATHS ENV HOME NO_DEFAULT_PATH)
+ IF(PLANTUML)
+ MESSAGE(STATUS "Target uml.statemachines is available using: ${PLANTUML}")
+ CONFIGURE_FILE(${RESOURCES_DIR}/statemachine.sh.in ${PROJECT_BINARY_DIR}/statemachine.sh @ONLY)
+ ADD_CUSTOM_TARGET(uml.statemachines COMMAND ./statemachine.sh WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
+ ENDIF()
ENDIF()
INCLUDE(Sphinx)
diff --git a/cmake/android.toolchain.cmake b/cmake/android.toolchain.cmake
index ce73809..afb1d11 100644
--- a/cmake/android.toolchain.cmake
+++ b/cmake/android.toolchain.cmake
@@ -15,3 +15,7 @@ IF(CMAKE_ANDROID_ARCH_ABI MATCHES "arm64-v8a")
ELSE()
SET(CMAKE_SYSTEM_VERSION 18)
ENDIF()
+
+SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE string "android find search path root")
+SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
diff --git a/cmake/cmd.cmake b/cmake/cmd.cmake
new file mode 100644
index 0000000..935cf71
--- /dev/null
+++ b/cmake/cmd.cmake
@@ -0,0 +1,52 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0)
+
+###########################################
+#### Usage: cmake -DCMD= -P cmake/cmd.cmake
+###########################################
+
+FUNCTION(MESSAGE type)
+ IF(ARGV0 STREQUAL "STDOUT")
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E echo "${ARGN}")
+ ELSE()
+ _MESSAGE(${type} "${ARGN}")
+ ENDIF()
+ENDFUNCTION()
+
+
+FUNCTION(CREATE_HASH)
+ IF(NOT FILES)
+ MESSAGE(FATAL_ERROR "You need to specify 'FILES'")
+ ENDIF()
+
+ IF(NOT ALGORITHM)
+ SET(ALGORITHM SHA256)
+ ENDIF()
+ STRING(TOLOWER "${ALGORITHM}" HASHFILE_ENDING)
+
+ FILE(GLOB GLOBBED_FILES RELATIVE "${CMAKE_CURRENT_BINARY_DIR}" "${FILES}")
+
+ FOREACH(f ${GLOBBED_FILES})
+ FILE(${ALGORITHM} ${f} fHash)
+ SET(OUTPUT "${fHash} ${f}")
+ MESSAGE(STDOUT ${OUTPUT})
+ IF(CREATE_FILE)
+ FILE(WRITE ${f}.${HASHFILE_ENDING} "${OUTPUT}\n")
+ ENDIF()
+ ENDFOREACH()
+ENDFUNCTION()
+
+
+
+
+
+
+
+IF(NOT CMD)
+ MESSAGE(FATAL_ERROR "You need to specify 'CMD'")
+ENDIF()
+
+IF(CMD STREQUAL "HASH")
+ CREATE_HASH()
+ELSE()
+ MESSAGE(FATAL_ERROR "Unknown CMD: ${CMD}")
+ENDIF()
diff --git a/cmake/iOS.toolchain.cmake b/cmake/iOS.toolchain.cmake
index 887f15e..e1968f1 100644
--- a/cmake/iOS.toolchain.cmake
+++ b/cmake/iOS.toolchain.cmake
@@ -166,7 +166,7 @@ set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS su
# set the architecture for iOS
if (${IOS_PLATFORM} STREQUAL "OS")
- set (IOS_ARCH armv7 arm64)
+ set (IOS_ARCH arm64)
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
set (IOS_ARCH i386)
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
diff --git a/docs/releasenotes/1.14.0.rst b/docs/releasenotes/1.14.0.rst
new file mode 100644
index 0000000..683b160
--- /dev/null
+++ b/docs/releasenotes/1.14.0.rst
@@ -0,0 +1,42 @@
+AusweisApp2 1.14.0
+^^^^^^^^^^^^^^^^^^
+
+**Releasedatum:** 20. Dezember 2017
+
+
+
+Anwender
+""""""""
+ - Eine neue Funktion ermöglicht die Verwendung eines
+ geeigneten Smartphones als Kartenlesegerät über WLAN.
+
+ - Umstellmöglichkeit der Sprache zur Laufzeit ermöglicht.
+
+ - Fortschrittsanzeige unter Windows im Taskbar-Button.
+
+ - Verbesserungen bei der Erstellung von PDFs.
+
+ - Speicherung der Protokolldateien verbessert.
+
+ - Einstellungsbereich für das Verwalten von
+ Kartenlesegeräten hinzugefügt.
+
+ - Grafiken der Kartenlesegeräte erneuert und erweitert.
+
+ - Unter macOS wird die Bandbreite im WLAN nicht mehr
+ beeinträchtigt.
+
+ - 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.
+
+
+Entwickler
+""""""""""
+ - Aktualisierung von OpenSSL auf die Version 1.0.2n.
+
+ - Aktualisierung von Qt auf die Version 5.9.3.
+
+ - Unterstützung von OpenSSL 1.1.0.
diff --git a/docs/releasenotes/appcast.rst b/docs/releasenotes/appcast.rst
index 46d29c7..a81a1ae 100644
--- a/docs/releasenotes/appcast.rst
+++ b/docs/releasenotes/appcast.rst
@@ -4,10 +4,6 @@ Release Notes
.. toctree::
:maxdepth: 1
- 1.12.4
- 1.12.3
- 1.12.2
- 1.12.1
- 1.12.0
+ 1.14.0
announce
issues
diff --git a/docs/releasenotes/general.rst b/docs/releasenotes/general.rst
index fb51694..b656bf6 100644
--- a/docs/releasenotes/general.rst
+++ b/docs/releasenotes/general.rst
@@ -5,7 +5,7 @@ Die AusweisApp2 ist eine Software, die Sie auf Ihrem Computer installieren, um s
Ihrem Personalausweis bzw. Ihrem elektronischen Aufenthaltstitel online auszuweisen.
Für die Nutzung der Online-Ausweisfunktion benötigen die Nutzerinnen und Nutzer eine
-Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenlesegerät,
+Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenlesegerät oder Smartphone,
Personalausweis und eID-Diensteanbieter hergestellt werden kann. Sie ermöglicht den
verschlüsselten Datenaustausch zwischen Personalausweis und eID-Dienst.
diff --git a/docs/releasenotes/issues.rst b/docs/releasenotes/issues.rst
index 9cda8b6..3f80fb1 100644
--- a/docs/releasenotes/issues.rst
+++ b/docs/releasenotes/issues.rst
@@ -7,14 +7,7 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
es bei Benutzern mit eingeschränkten Berechtigungen zu Problemen mit der
Online-Ausweisfunktion kommen.
- - Bei Erhöhung der Schriftgröße über 175% kommt es zu Darstellungsfehlern.
-
- - Wenn unter OS X ein Kartenleser mit aufliegendem Ausweisdokument
- angeschlossen wird und eine Selbstauskunft angestartet wurde, kann unter
- Umständen die AusweisApp2 einfrieren.
-
- - Beim Ausweisen ohne aktivierte Online-Ausweisfunktion wird derzeit
- fälschlicherweise nach der PUK gefragt.
+ - Bei Erhöhung der Schriftgröße über 175% kommt es zur Nutzungseinschränkung.
- Derzeit kommt es noch zu leichten Schwierigkeiten bei der Bedienbarkeit
mit der Tastatur.
@@ -25,8 +18,12 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
- Bei Verwendung des Screenreaders JAWS unter Windows, kann es zu
leichten Irritationen bei der angegebenen Bedienung kommen.
- - Unter Mac OS im WLAN kann die Bandbreite beeinträchtigt werden, wenn die
- AusweisApp2 im Hintergrund läuft.
+ - Wenn die AusweisApp2 heruntergefahren wird, während eine Authentisierung
+ oder eine PIN-Änderung mit Komfort-Kartenlesegerät durchgeführt wird,
+ kann es unter Windows und macOS zu einem Absturz kommen.
- - Unter Mac OS kommt es vereinzelt zu Problemen bei der Verwendung des Kobil
- ID Token.
+ - Die PIN-Änderung über ein Smartphone als Kartenlesegerät wird nicht
+ unterstützt.
+
+ - Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
+ auf Android.
diff --git a/docs/releasenotes/support.rst b/docs/releasenotes/support.rst
index 7ffc2f0..a234ca3 100644
--- a/docs/releasenotes/support.rst
+++ b/docs/releasenotes/support.rst
@@ -8,14 +8,14 @@ der AusweisApp2 unterstützt.
Betriebssysteme
"""""""""""""""
- - OS X 10.9
-
- OS X 10.10
- OS X 10.11
- macOS 10.12
+ - macOS 10.13
+
- Windows 7 SP1 (32bit / 64bit)
- Windows 8.1 (64bit)
@@ -48,13 +48,13 @@ und sollte daher mit allen marktüblichen Browsern verwendet werden können.
Im Rahmen der Qualitätssicherung werden die folgenden Browserversionen
getestet.
- - Firefox 55
+ - Firefox 57
- - Chrome 61
+ - Chrome 62
- Internet Explorer 11
- - Safari 10
+ - Safari 11
@@ -90,6 +90,13 @@ Zusätzlich werden folgende nicht zertifizierte Kartenleser getestet.
Aktuelle Informationen zu Kartenlesern finden Sie auf unserer Webseite:
https://www.ausweisapp.bund.de/fragen-und-antworten/voraussetzungen/
+Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
+unterstützen, können als Kartenlesegerät verwendet werden.
+Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone
+zu installieren und zu starten.
+
+Details hierzu befinden sich auf der Homepage:
+https://www.ausweisapp.bund.de/mobile-geraete/
Android
@@ -105,9 +112,9 @@ Im mobilen Umfeld ist die Funktionalität jedoch abhängig von der vom
Diensteanbieter umgesetzten Aktivierung. Daher empfehlen wir einen der
folgenden Browser zu verwenden.
- - Firefox Klar 1.3
+ - Firefox Klar 2.5
- - Chrome 61
+ - Chrome 63
- Android System WebView 60
@@ -119,6 +126,10 @@ Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
unterstützen. Details hierzu befinden sich auf der Homepage:
https://www.ausweisapp.bund.de/mobile-geraete/
+Ebenfalls ist es möglich ein weiteres Smartphone als Kartenlesegerät zu
+verwenden. Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen
+Smartphone zu installieren und zu starten.
+
Darüber hinaus ist die Verwendung eines Bluetooth-Kartenlesegeräts möglich.
Folgendes Bluetooth-Kartenlesegerät wird von der AusweiApp2 unterstützt:
diff --git a/docs/releasenotes/versions.rst b/docs/releasenotes/versions.rst
index 4c6b8a7..99a38d4 100644
--- a/docs/releasenotes/versions.rst
+++ b/docs/releasenotes/versions.rst
@@ -1,6 +1,14 @@
Versionen
=========
+Versionszweig 1.14
+------------------
+.. toctree::
+ :maxdepth: 1
+
+ 1.14.0
+
+
Versionszweig 1.12
------------------
.. toctree::
diff --git a/docs/sdk/android.rst b/docs/sdk/android.rst
index 22e5b9f..997c897 100644
--- a/docs/sdk/android.rst
+++ b/docs/sdk/android.rst
@@ -65,6 +65,11 @@ JSON messages from the SDK. Furthermore it has a function which is called
when an existing connection with the SDK is dropped by the SDK. Both interfaces
are listed below and you need to import them into your build environment.
+.. important::
+ It is required that you place the AIDL files under subdirectory
+ "aidl/com.governikus.ausweisapp2". Also the interface methods
+ names must be exactly the same.
+
.. seealso::
https://developer.android.com/guide/components/aidl.html
@@ -125,7 +130,7 @@ fingerprint of the authentic SDK certificate is the following:
.. code-block:: text
- B0 2A C7 6B 50 A4 97 AE 81 0A EA C2 25 98 18 7B 3D 42 90 27 7D 08 51 A7 FA 8E 1A EA 5A 97 98 70
+ B0:2A:C7:6B:50:A4:97:AE:81:0A:EA:C2:25:98:18:7B:3D:42:90:27:7D:08:51:A7:FA:8E:1A:EA:5A:97:98:70
@@ -143,7 +148,7 @@ hash value of a signed application on Android can be verified.
public class AusweisApp2Validator
{
private static final String PACKAGE = "com.governikus.ausweisapp2";
- private static final String FINGERPRINT = "..." // see above;
+ private static final String FINGERPRINT = "..."; // see above
public boolean isValid()
{
@@ -188,17 +193,15 @@ To differentiate between different connected clients, virtual sessions are used
once the binding is completed. These sessions are discussed in a separate
section, section :ref:`android_create_session`.
-.. seealso::
- :ref:`android_disconnect_sdk`
-
Create connection
^^^^^^^^^^^^^^^^^
-First of all, in order to bind to the service, one needs to instantiate
-an Android ServiceConnection. Subsequently, the object is passed to the
-Android API and the contained methods are invoked by Android on service
-connection and disconnection.
+First of all, in order to bind to the service, one needs to instantiate an
+Android ServiceConnection.
+Subsequently, the object is passed to the Android API and the contained
+methods are invoked
+by Android on service connection and disconnection.
.. code-block:: java
@@ -226,12 +229,13 @@ connection and disconnection.
Bind service to raw connection
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-In order to perform the actual binding a directed Intent, which
-identifies the AusweisApp2 SDK, is created. This Intent is send
-to the Android API along with the ServiceConnection created above.
+In order to perform the actual binding a directed Intent, which identifies
+the AusweisApp2 SDK, is created.
+This Intent is send to
+the Android API along with the ServiceConnection created above.
This API call either starts up the SDK if it is the first client,
-or connects to the running SDK instance if there is already
-another client bound.
+or connects to the running SDK instance
+if there is already another client bound.
.. code-block:: java
@@ -472,14 +476,15 @@ The **receive** method is called each time the SDK sends a message.
:ref:`android_create_session`
-
.. _android_disconnect_sdk:
Disconnect from SDK
-------------------
In order to disconnect from the AusweisApp2 SDK you need to invalidate your
-instance of **IBinder**. You can unbind from the SDK Android service to undo
-your binding, like shown in the code listing below.
+instance of **IBinder**. There are two possibilities to do this. The first
+one is to unbind from the SDK Android service to undo your binding, like
+shown in the code listing below. The second one is to return false in the
+**pingBinder** function of your IBinder instance.
.. code-block:: java
@@ -670,10 +675,7 @@ are shown in code listing below.
}
}
-
-This class must now be added to the activity:
-
-.. code-block:: java
+ // [...]
ForegroundDispatcher mDispatcher = new ForegroundDispatcher(this);
diff --git a/docs/sdk/workflow.rst b/docs/sdk/workflow.rst
index 00c8980..1ef2145 100644
--- a/docs/sdk/workflow.rst
+++ b/docs/sdk/workflow.rst
@@ -104,7 +104,7 @@ We assume that the user did not connect the card reader.
{"cmd": "CANCEL"}
- {"msg": "AUTH", "result": {"description":"The operation was aborted due to cancellation by user.","language":"en","major":"http://www.bsi.bund.de/ecard/api/1.1/resultmajor#error","message":"The process was cancelled by the user.","minor":"http://www.bsi.bund.de/ecard/api/1.1/resultminor/sal#cancellationByUser"},"url":"https://test.governikus-eid.de/DEMO/?errID=123456"}
+ {"msg": "AUTH", "result": {"description":"The process was cancelled by the user.","language":"en","major":"http://www.bsi.bund.de/ecard/api/1.1/resultmajor#error","message":"The process was cancelled by the user.","minor":"http://www.bsi.bund.de/ecard/api/1.1/resultminor/sal#cancellationByUser"},"url":"https://test.governikus-eid.de/DEMO/?errID=123456"}
@@ -134,5 +134,5 @@ We assume that the user did not connect the card reader.
{"cmd": "CANCEL"}
- {"msg": "AUTH", "result": {"description":"The operation was aborted due to cancellation by user.","language":"en","major":"http://www.bsi.bund.de/ecard/api/1.1/resultmajor#error","message":"The process was cancelled by the user.","minor":"http://www.bsi.bund.de/ecard/api/1.1/resultminor/sal#cancellationByUser"},"url":"https://test.governikus-eid.de/DEMO/?errID=123456"}
+ {"msg": "AUTH", "result": {"description":"The process was cancelled by the user.","language":"en","major":"http://www.bsi.bund.de/ecard/api/1.1/resultmajor#error","message":"The process was cancelled by the user.","minor":"http://www.bsi.bund.de/ecard/api/1.1/resultminor/sal#cancellationByUser"},"url":"https://test.governikus-eid.de/DEMO/?errID=123456"}
diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt
index df6f39c..84f81c5 100644
--- a/libs/CMakeLists.txt
+++ b/libs/CMakeLists.txt
@@ -1,4 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.3.0)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
IF(POLICY CMP0010)
CMAKE_POLICY(SET CMP0010 NEW)
@@ -19,6 +19,13 @@ INCLUDE(ExternalProject)
INCLUDE(Helper)
INCLUDE(DVCS)
+IF(ANDROID)
+ GET_ANDROID_TOOLCHAIN_VARS(ANDROID_TOOLCHAIN_PREFIX ANDROID_TOOLCHAIN_MACHINE_NAME)
+ IF(CMAKE_SYSROOT_COMPILE)
+ SET(UNIFIED_INCLUDE ${CMAKE_SYSROOT_COMPILE}/usr/include)
+ ENDIF()
+ENDIF()
+
ADD_FLAG(-fstack-protector-strong -fstack-protector NOQUOTES VAR COMPILER_FLAGS)
@@ -97,11 +104,11 @@ INCLUDE(Messages)
################################## Versionen
-SET(QT 5.8.0)
-SET(QT_HASH 0f4c54386d3dbac0606a936a7145cebb7b94b0ca2d29bc001ea49642984824b6)
+SET(QT 5.9.3)
+SET(QT_HASH 57acd8f03f830c2d7dc29fbe28aaa96781b2b9bdddce94196e6761a0f88c6046)
-SET(OPENSSL 1.0.2k)
-SET(OPENSSL_HASH 6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0)
+SET(OPENSSL 1.0.2n)
+SET(OPENSSL_HASH 370babb75f278c39e0c50e8c4e7493bc0f18db6867478341a832a982fd15a8fe)
################################## Files
SET(QT_FILE qt-everywhere-opensource-src-${QT}.tar.xz)
@@ -115,7 +122,7 @@ ELSE()
ENDIF()
STRING(SUBSTRING ${QT} 0 3 QT_SUBVERSION)
-SET(QT_URL http://download.qt.io/${QT_DEST_DIR}/qt/${QT_SUBVERSION}/${QT}/single)
+SET(QT_URL https://download.qt.io/${QT_DEST_DIR}/qt/${QT_SUBVERSION}/${QT}/single)
SET(OPENSSL_URL https://www.openssl.org/source)
IF(ANDROID OR APPLE)
@@ -127,24 +134,6 @@ IF(ANDROID OR APPLE)
ENDIF()
ENDIF()
-################################## Android NDK /SDK
-#########################################################################
-
-IF(ANDROID)
- FIND_PROGRAM(SED_CMD sed CMAKE_FIND_ROOT_PATH_BOTH)
- IF(SED_CMD)
- MESSAGE(STATUS "Using 'sed' command... ${SED_CMD}")
- ELSE()
- MESSAGE(FATAL_ERROR "Cannot find 'sed' command")
- ENDIF()
-ENDIF()
-
-IF(IOS)
- SET(HOST --host=arm-apple-darwin7)
- SET(HOST64 --host=aarch64-apple-darwin)
- SET(IOS_ARCH armv7)
- SET(IOS_ARCH64 arm64)
-ENDIF()
SET(ENABLED_TARGETS)
@@ -157,10 +146,11 @@ SET(OPENSSL_CONFIGURE_FLAGS no-ssl2 no-ssl3 no-ssl3-method no-dtls no-srp no-ide
IF(IOS)
SET(OPENSSL_PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_iOS.patch && )
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} iphoneos-cross)
- SET(OPENSSL_PATCH_AFTER_CONFIGURE ${SH_CMD} ${PATCHES_DIR}/openssl_iOS_perl.sh ${CMAKE_IOS_SDK_ROOT} &&)
+ SET(OPENSSL_ENV export CROSS_TOP=${CMAKE_IOS_DEVELOPER_ROOT} && export CROSS_SDK=iPhoneOS.sdk &&)
+ SET(OPENSSL_COMPILER_FLAGS "-arch arm64")
ELSEIF(APPLE)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} darwin64-x86_64-cc)
- #SET(OPENSSL_PATCH_AFTER_CONFIGURE ${SH_CMD} ${PATCHES_DIR}/openssl_MacOS_perl.sh &&)
+ SET(COMPILER_FLAGS "${COMPILER_FLAGS} -mmacosx-version-min=10.9")
ELSEIF(MINGW)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} mingw)
ELSEIF(MSVC)
@@ -181,19 +171,25 @@ ELSEIF(ANDROID)
ENDIF()
SET(OPENSSL_ENV export ANDROID_DEV=${CMAKE_SYSROOT}/usr &&)
+ IF(UNIFIED_INCLUDE)
+ SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} -D__ANDROID_API__=${CMAKE_SYSTEM_VERSION} -isystem${UNIFIED_INCLUDE} -isystem${UNIFIED_INCLUDE}/${ANDROID_TOOLCHAIN_MACHINE_NAME})
+ ENDIF()
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} --cross-compile-prefix=${CMAKE_C_ANDROID_TOOLCHAIN_PREFIX} ${OPENSSL_ARCH})
- SET(OPENSSL_PATCH_COMMAND ${PATCH_CMD} -p0 ${PATCH_OPTIONS} ${PATCHES_DIR}/soname/openssl_makefile.shared.patch && ${SH_CMD} ${PATCHES_DIR}/soname/openssl_sed.sh && )
-
ELSEIF(BSD)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} BSD-x86_64)
ELSEIF(LINUX)
- SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} linux-x86_64)
+ IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686")
+ SET(OPENSSL_ARCH linux-generic32)
+ ELSE()
+ SET(OPENSSL_ARCH linux-x86_64)
+ ENDIF()
+ SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ${OPENSSL_ARCH})
ELSE()
MESSAGE(FATAL_ERROR "Unsupported system")
ENDIF()
IF(NOT OPENSSL_PREBUILD)
- SET(OPENSSL_PREBUILD ${OPENSSL_PATCH_AFTER_CONFIGURE} ${MAKE} depend)
+ SET(OPENSSL_PREBUILD ${MAKE} depend)
ENDIF()
IF(NOT OPENSSL_INSTALL_TARGET)
@@ -201,42 +197,6 @@ IF(NOT OPENSSL_INSTALL_TARGET)
ENDIF()
# OpenSSL does not support multiple make jobs!
-IF(IOS)
- ExternalProject_Add(openssl64
- URL ${OPENSSL_URL}/${OPENSSL_FILE}
- URL_HASH SHA256=${OPENSSL_HASH}
- DOWNLOAD_DIR ${PACKAGES_DIR}
-
- PATCH_COMMAND
- ${OPENSSL_PATCH_COMMAND}
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-fix-no-engine-build.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_rsa_psk.patch
-
- CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure --prefix=${PROJECT_BINARY_DIR}/openssl64-prefix/tmp ${OPENSSL_CONFIGURE_FLAGS} "-arch ${IOS_ARCH64}" "${COMPILER_FLAGS}"
- BUILD_COMMAND ${OPENSSL_PATCH_AFTER_CONFIGURE} ${MAKE} depend && ${MAKE}
- BUILD_IN_SOURCE 1
- INSTALL_COMMAND ${MAKE} install_sw
- )
-
- ExternalProject_Add(openssl
- DEPENDS openssl64
- URL ${OPENSSL_URL}/${OPENSSL_FILE}
- URL_HASH SHA256=${OPENSSL_HASH}
- DOWNLOAD_DIR ${PACKAGES_DIR}
-
- PATCH_COMMAND
- ${OPENSSL_PATCH_COMMAND}
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-fix-no-engine-build.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_rsa_psk.patch
-
- CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure --prefix=${PROJECT_BINARY_DIR}/openssl-prefix/tmp ${OPENSSL_CONFIGURE_FLAGS} "-arch ${IOS_ARCH}" "${COMPILER_FLAGS}"
- BUILD_COMMAND ${OPENSSL_PATCH_AFTER_CONFIGURE} ${MAKE} depend && ${MAKE}
- BUILD_IN_SOURCE 1
- INSTALL_COMMAND ${MAKE} install_sw
- )
-
- ADD_CUSTOM_COMMAND(TARGET openssl POST_BUILD COMMAND ${SH_CMD} ${PATCHES_DIR}/create_multi_architecture_build.sh ${PROJECT_BINARY_DIR}/openssl-prefix/tmp ${PROJECT_BINARY_DIR}/openssl64-prefix/tmp ${DESTINATION_DIR})
-ELSE()
ExternalProject_Add(openssl
URL ${OPENSSL_URL}/${OPENSSL_FILE}
URL_HASH SHA256=${OPENSSL_HASH}
@@ -258,7 +218,6 @@ ExternalProject_Add_Step(openssl prebuild
DEPENDEES configure
DEPENDERS build
WORKING_DIRECTORY )
-ENDIF()
IF(UNIX)
ADD_CUSTOM_COMMAND(TARGET openssl POST_BUILD COMMAND chmod 755 ${DESTINATION_DIR}/lib/libssl*${CMAKE_SHARED_LIBRARY_SUFFIX} ${DESTINATION_DIR}/lib/libcrypto*${CMAKE_SHARED_LIBRARY_SUFFIX})
@@ -287,9 +246,18 @@ ELSE()
SET(QT_CONFIGURE_FLAGS -release -no-qml-debug)
ENDIF()
+
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license -qt-zlib -no-mtdev -qt-libpng -qt-libjpeg -no-harfbuzz -qt-pcre -system-proxies -no-compile-examples -nomake examples -nomake tests -no-sql-sqlite -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib)
+
+LIST(APPEND NO_FEATURES bearermanagement ftp paint_debug)
+LIST(APPEND NO_FEATURES imageformat_bmp imageformat_ppm imageformat_xbm)
+LIST(APPEND NO_FEATURES sharedmemory textodfwriter)
+FOREACH(feature ${NO_FEATURES})
+ SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -no-feature-${feature})
+ENDFOREACH()
+
SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-dbus -no-directfb -no-linuxfb)
-SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtscxml -skip qtxmlpatterns -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing)
+SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtscxml -skip qtxmlpatterns -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing -skip qtwayland -skip qtremoteobjects -skip qtspeech -skip qtwebview)
SET(QT_CONFIGURE ./configure)
IF(IOS)
@@ -339,17 +307,12 @@ ExternalProject_Add(qt
PATCH_COMMAND ${QT_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Make-server-side-signature-algorithms-configurable.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-apksigner-by-default-if-available-to-sign-the-AP.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-Add-support-for-sendCommand-to-QNearFieldTarget.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-QNearfieldTarget-Introduce-maxCommandLength.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QNearfieldTarget-Introduce-set-keepConnection-and-disconnect.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-defaultSize-according-to-svg-standard-in-svg-plugin.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Do-not-request-an-unnessessary-dangerous-right.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-QNetworkAccessManager-clearConnectionCache.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-QNetworkAccessManager-useAuthenticationManagerFrom.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Make-variant-selection-possible-if-base-is-missing.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-debug-stream-operator-for-QNetworkProxyQuery.patch &&
- ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Allow-using-nfc-when-running-as-a-service.patch &&
+ ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Register-additional-meta-types.patch &&
+ ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Change-build-configuration-for-Qt-on-iOS.patch &&
+ ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Disable-unused-imageformats.patch &&
+ ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Avoid-using-deprecated-APIs-on-iOS-10.0.patch &&
+ ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-IsoDep-to-the-techList-on-Android.patch &&
+ ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-macOS-iOS-Fix-garbled-text-under-some-conditions.patch &&
${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 664a75a..aa4d77a 100644
--- a/libs/README.rst
+++ b/libs/README.rst
@@ -17,7 +17,7 @@ Unterstützte Compiler:
Notwendige Bibliotheken:
-- Qt >= 5.8
+- Qt >= 5.9
- http://www.qt.io/download/
@@ -31,12 +31,12 @@ Notwendige Bibliotheken:
- openssl_rsa_psk.patch
-- pcsclite >= 1.8 (nur Linux)
+- pcsclite >= 1.8 (nur Linux/FreeBSD)
Notwendige Tools:
-- CMake >= 3.3.0 (>= 3.7.1 für Android)
+- CMake >= 3.5.0 (>= 3.7.1 für Android)
- http://www.cmake.org
@@ -221,7 +221,7 @@ Komponenten vorhanden sein:
wird. Dies kann mittels der Umgebungsvariable ANDROID_BUILD_TOOLS_REVISION behoben werden.
Die genaue Version ist im Android Manager vom Android SDK (./tools/android) hinterlegt.
- - Getestet: 26.0.1
+ - Getestet: 27.0.1
- Um Qt erfolgreich zu bauen, sind verschiedene API Level von Android notwendig.
Diese sollten mindestens Level 18 und 21 sein. Nähere Informationen dazu
diff --git a/patches/create_multi_architecture_build.sh b/patches/create_multi_architecture_build.sh
deleted file mode 100755
index b4d2aa9..0000000
--- a/patches/create_multi_architecture_build.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/bash
-
-DIR=$1
-DIR64=$2
-PREFIX_PATH=$3
-
-#
-# Copy content of all folders except the library files
-#
-echo "Copy content to ${PREFIX_PATH}:"
-for dir in ${DIR}/* ; do
- if [ -d $dir ]
- then
- dirname=$(basename "$dir")
- if [ "$dirname" != "lib" ]
- then
- echo "* Copy content of ${dir}"
- mkdir -p ${PREFIX_PATH}/${dirname}
- cp -R ${dir}/* ${PREFIX_PATH}/${dirname}
- fi
- fi
-done
-
-#
-# Make multi-architecture libraries
-#
-echo "Create multi-architecture libraries in ${PREFIX_PATH}/lib:"
-mkdir -p ${PREFIX_PATH}/lib
-cd ${PREFIX_PATH}/lib
-for file in ${DIR}/lib/* ; do
- filename=$(basename "$file")
-
- if [[ ( $filename == *.dylib ) || ( $filename == *.a ) ]]
- then
- if [ -h $file ]
- then
- # create symbolic links for multi-architecture library
-
- resolvedfilename=$(readlink "$file")
- echo "* Create sym link ${filename}"
- ln -s ${resolvedfilename} ${filename}
- else
- # create multi-architecture library
-
- file64=${DIR64}/lib/${filename}
- if [ -f $file64 ]
- then
- echo "* Create lib ${filename}"
- lipo $file $file64 -create -output ${filename}
- else
- echo "* 64bit library not found ${file64}"
- fi
- fi
- elif [[ ( $filename == pkgconfig ) ]]
- then
-
- mkdir -p ${PREFIX_PATH}/lib/pkgconfig
- for configfile in ${DIR}/lib/pkgconfig/* ; do
- configfilename=$(basename "$configfile")
- sed "s:${DIR}:${PREFIX_PATH}:g" "$configfile" > pkgconfig/${configfilename}
- echo "* Copy adapted package config file ${configfilename}"
- done
- elif [ -f $file ]
- then
- echo "* Skip file ${filename}"
- else
- echo "* Skip directory ${filename}"
- fi
-done
-
diff --git a/patches/openssl-fix-no-engine-build.patch b/patches/openssl-fix-no-engine-build.patch
index 0d574f8..c7b24ea 100644
--- a/patches/openssl-fix-no-engine-build.patch
+++ b/patches/openssl-fix-no-engine-build.patch
@@ -1,4 +1,4 @@
-From 08b250d56592b8e385cfc37c2d938b839653c264 Mon Sep 17 00:00:00 2001
+From aeae7469061c1675d651224789fc664d6809b0d9 Mon Sep 17 00:00:00 2001
From: "Dr. Stephen Henson"
Date: Sat, 16 Jan 2016 16:11:34 +0000
Subject: [PATCH] fix no-engine build
@@ -11,10 +11,10 @@ Reviewed-by: Richard Levitte
util/mk1mf.pl | 3 +--
3 files changed, 5 insertions(+), 4 deletions(-)
-diff --git a/crypto/ts/ts.h b/crypto/ts/ts.h
-index 2daa1b2fb..fc8c14b2d 100644
---- a/crypto/ts/ts.h
-+++ b/crypto/ts/ts.h
+diff --git x/crypto/ts/ts.h y/crypto/ts/ts.h
+index 2daa1b2fb5..fc8c14b2d0 100644
+--- x/crypto/ts/ts.h
++++ y/crypto/ts/ts.h
@@ -737,9 +737,11 @@ EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass);
const char *TS_CONF_get_tsa_section(CONF *conf, const char *section);
int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb,
@@ -27,10 +27,10 @@ index 2daa1b2fb..fc8c14b2d 100644
int TS_CONF_set_signer_cert(CONF *conf, const char *section,
const char *cert, TS_RESP_CTX *ctx);
int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs,
-diff --git a/util/libeay.num b/util/libeay.num
-index 2094ab364..23ade08e2 100755
---- a/util/libeay.num
-+++ b/util/libeay.num
+diff --git x/util/libeay.num y/util/libeay.num
+index fddfe1cbb2..a76424ceab 100755
+--- x/util/libeay.num
++++ y/util/libeay.num
@@ -3874,7 +3874,7 @@ b2i_PVK_bio 4250 EXIST::FUNCTION:RC4
ASN1_UTCTIME_adj 4251 EXIST::FUNCTION:
TS_TST_INFO_new 4252 EXIST::FUNCTION:
@@ -49,15 +49,15 @@ index 2094ab364..23ade08e2 100755
EVP_PKEY_verify_init 4474 EXIST::FUNCTION:
TS_CONF_set_policies 4475 EXIST::FUNCTION:
ASN1_PCTX_new 4476 EXIST::FUNCTION:
-diff --git a/util/mk1mf.pl b/util/mk1mf.pl
-index 7a3ae11f7..6ada6fa62 100755
---- a/util/mk1mf.pl
-+++ b/util/mk1mf.pl
+diff --git x/util/mk1mf.pl y/util/mk1mf.pl
+index 6b31496ed1..ccfb24ca55 100755
+--- x/util/mk1mf.pl
++++ y/util/mk1mf.pl
@@ -428,7 +428,6 @@ EOF
{
$extra_install .= <<"EOF"
\$(MKDIR) \"\$(INSTALLTOP)${o}lib${o}engines\"
-- \$(CP) \"\$(E_SHLIB)\" \"\$(INSTALLTOP)${o}lib${o}engines\"
+- \$(CP) \$(E_SHLIB) \"\$(INSTALLTOP)${o}lib${o}engines\"
EOF
}
}
@@ -71,5 +71,5 @@ index 7a3ae11f7..6ada6fa62 100755
exe: \$(T_EXE) \$(BIN_D)$o\$(E_EXE)$exep
--
-2.11.0
+2.15.0
diff --git a/patches/openssl_MacOS_perl.sh b/patches/openssl_MacOS_perl.sh
deleted file mode 100755
index 9e875b2..0000000
--- a/patches/openssl_MacOS_perl.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-echo "Patching..."
-
-perl -i -pe "s|^MAKEDEPPROG=makedepend|MAKEDEPPROG= \\\$(CC) -M|g" Makefile
diff --git a/patches/openssl_iOS_perl.sh b/patches/openssl_iOS_perl.sh
deleted file mode 100755
index 4d75e45..0000000
--- a/patches/openssl_iOS_perl.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-echo "Patching..."
-
-SDK=$1
-echo "SDK: ${SDK}"
-
-perl -i -pe "s|^CC= (.*)|CC= \$1 -miphoneos-version-min=7.1|g" Makefile
-perl -i -pe "s|^MAKEDEPPROG=makedepend|MAKEDEPPROG= \\\$(CC) -M|g" Makefile
-perl -i -pe "s|isysroot\s\S+\s|isysroot ${SDK} |g" Makefile
diff --git a/patches/openssl_rsa_psk.patch b/patches/openssl_rsa_psk.patch
index 05c2f66..80d3cad 100644
--- a/patches/openssl_rsa_psk.patch
+++ b/patches/openssl_rsa_psk.patch
@@ -1,4 +1,4 @@
-From 496ac24b811593df82490643d574a037aa47d80e Mon Sep 17 00:00:00 2001
+From e681bc2125a396ff34aab4c3f629683dd0ce28bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?=
Date: Thu, 23 Apr 2015 20:59:30 +0200
Subject: [PATCH] Introduce TLS-RSA-PSK support
@@ -12,21 +12,21 @@ This work has been sponsored by Governikus GmbH & Co. KG.
PR: 2464
---
doc/apps/ciphers.pod | 12 +++
- ssl/s3_clnt.c | 122 ++++++++++++++++++++++-----
+ ssl/s3_clnt.c | 106 ++++++++++++++++++++----
ssl/s3_lib.c | 206 +++++++++++++++++++++++++++++++++++++++++++++-
- ssl/s3_srvr.c | 227 ++++++++++++++++++++++++++++++++++++++++++++++++---
+ ssl/s3_srvr.c | 226 ++++++++++++++++++++++++++++++++++++++++++++++++---
ssl/ssl.h | 2 +
ssl/ssl_ciph.c | 9 +-
ssl/ssl_lib.c | 6 ++
ssl/ssl_locl.h | 2 +
ssl/tls1.h | 36 ++++++++
- 9 files changed, 587 insertions(+), 35 deletions(-)
+ 9 files changed, 572 insertions(+), 33 deletions(-)
diff --git x/doc/apps/ciphers.pod y/doc/apps/ciphers.pod
-index 922455725..234350faa 100644
+index fa16124d08..45db06c168 100644
--- x/doc/apps/ciphers.pod
+++ y/doc/apps/ciphers.pod
-@@ -583,10 +583,22 @@ Note: these ciphers can also be used in SSL v3.
+@@ -585,10 +585,22 @@ Note: these ciphers can also be used in SSL v3.
=head2 Pre shared keying (PSK) cipheruites
@@ -50,10 +50,10 @@ index 922455725..234350faa 100644
=head2 Deprecated SSL v2.0 cipher suites.
diff --git x/ssl/s3_clnt.c y/ssl/s3_clnt.c
-index 32f2f1aee..cd05f4d52 100644
+index 5b8b2da59f..ae0d4d840c 100644
--- x/ssl/s3_clnt.c
+++ y/ssl/s3_clnt.c
-@@ -337,7 +337,7 @@ int ssl3_connect(SSL *s)
+@@ -342,7 +342,7 @@ int ssl3_connect(SSL *s)
}
#endif
/* Check if it is anon DH/ECDH, SRP auth */
@@ -62,7 +62,7 @@ index 32f2f1aee..cd05f4d52 100644
if (!
(s->s3->tmp.
new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
-@@ -1419,9 +1419,9 @@ int ssl3_get_key_exchange(SSL *s)
+@@ -1424,9 +1424,9 @@ int ssl3_get_key_exchange(SSL *s)
}
#ifndef OPENSSL_NO_PSK
/*
@@ -75,53 +75,30 @@ index 32f2f1aee..cd05f4d52 100644
*/
if (alg_k & SSL_kPSK) {
s->session->sess_cert = ssl_sess_cert_new();
-@@ -1466,7 +1466,12 @@ int ssl3_get_key_exchange(SSL *s)
+@@ -1471,7 +1471,12 @@ int ssl3_get_key_exchange(SSL *s)
al = SSL_AD_DECODE_ERROR;
#ifndef OPENSSL_NO_PSK
- if (alg_k & SSL_kPSK) {
+ /* handle PSK identity hint */
-+ if (alg_k & (SSL_kPSK
++ if (alg_k & SSL_kPSK
+#ifndef OPENSSL_NO_RSA
-+ | SSL_kRSAPSK
++ || alg_k & SSL_kRSAPSK
+#endif
-+ )) {
++ ) {
param_len = 2;
if (param_len > n) {
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT);
-@@ -1610,7 +1615,11 @@ int ssl3_get_key_exchange(SSL *s)
- } else
- #endif /* !OPENSSL_NO_SRP */
- #ifndef OPENSSL_NO_RSA
-- if (alg_k & SSL_kRSA) {
-+ if (alg_k & (SSL_kRSA
-+#ifndef OPENSSL_NO_PSK
-+ | SSL_kRSAPSK
-+#endif
-+ )) {
- /* Temporary RSA keys only allowed in export ciphersuites */
- if (!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher)) {
- al = SSL_AD_UNEXPECTED_MESSAGE;
-@@ -2034,8 +2043,16 @@ int ssl3_get_key_exchange(SSL *s)
- }
+@@ -2041,7 +2046,7 @@ int ssl3_get_key_exchange(SSL *s)
}
} else {
-- /* aNULL, aSRP or kPSK do not need public keys */
+ /* aNULL, aSRP or kPSK do not need public keys */
- if (!(alg_a & (SSL_aNULL | SSL_aSRP)) && !(alg_k & SSL_kPSK)) {
-+ /* aNULL, aSRP, kPSK or kRSAPSK do not need public keys */
-+ if (!(alg_a & (SSL_aNULL | SSL_aSRP))
-+#ifndef OPENSSL_NO_PSK
-+ && !(alg_k & (SSL_kPSK
-+#ifndef OPENSSL_NO_RSA
-+ | SSL_kRSAPSK
-+#endif
-+ ))
-+#endif
-+ ) {
++ if (!(alg_a & (SSL_aNULL | SSL_aSRP)) && !(alg_k & SSL_kPSK) && !(alg_k & SSL_kRSAPSK)) {
/* Might be wrong key type, check it */
if (ssl3_check_cert_and_algorithm(s))
/* Otherwise this shouldn't happen */
-@@ -3124,7 +3141,11 @@ int ssl3_send_client_key_exchange(SSL *s)
+@@ -3130,7 +3135,11 @@ int ssl3_send_client_key_exchange(SSL *s)
}
#endif
#ifndef OPENSSL_NO_PSK
@@ -134,7 +111,7 @@ index 32f2f1aee..cd05f4d52 100644
/*
* The callback needs PSK_MAX_IDENTITY_LEN + 1 bytes to return a
* \0-terminated identity. The last byte is for us for simulating
-@@ -3132,8 +3153,8 @@ int ssl3_send_client_key_exchange(SSL *s)
+@@ -3138,8 +3147,8 @@ int ssl3_send_client_key_exchange(SSL *s)
*/
char identity[PSK_MAX_IDENTITY_LEN + 2];
size_t identity_len;
@@ -144,7 +121,7 @@ index 32f2f1aee..cd05f4d52 100644
unsigned int pre_ms_len = 0, psk_len = 0;
int psk_err = 1;
-@@ -3165,14 +3186,34 @@ int ssl3_send_client_key_exchange(SSL *s)
+@@ -3171,14 +3180,34 @@ int ssl3_send_client_key_exchange(SSL *s)
ERR_R_INTERNAL_ERROR);
goto psk_err;
}
@@ -187,7 +164,7 @@ index 32f2f1aee..cd05f4d52 100644
if (s->session->psk_identity_hint != NULL)
OPENSSL_free(s->session->psk_identity_hint);
-@@ -3202,8 +3243,41 @@ int ssl3_send_client_key_exchange(SSL *s)
+@@ -3208,8 +3237,41 @@ int ssl3_send_client_key_exchange(SSL *s)
pre_ms_len);
s2n(identity_len, p);
memcpy(p, identity, identity_len);
@@ -229,34 +206,34 @@ index 32f2f1aee..cd05f4d52 100644
psk_err:
OPENSSL_cleanse(identity, sizeof(identity));
OPENSSL_cleanse(psk_or_pre_ms, sizeof(psk_or_pre_ms));
-@@ -3574,7 +3648,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
+@@ -3580,7 +3642,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
}
#endif
#ifndef OPENSSL_NO_RSA
- if (alg_k & SSL_kRSA) {
-+ if (alg_k & (SSL_kRSA
++ if (alg_k & SSL_kRSA
+#ifndef OPENSSL_NO_PSK
-+ | SSL_kRSAPSK
++ || alg_k & SSL_kRSAPSK
+#endif
-+ )) {
++ ) {
if (!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
!has_bits(i, EVP_PK_RSA | EVP_PKT_ENC)) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
-@@ -3641,7 +3719,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
+@@ -3647,7 +3713,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
pkey_bits > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
#ifndef OPENSSL_NO_RSA
- if (alg_k & SSL_kRSA) {
-+ if (alg_k & (SSL_kRSA
++ if (alg_k & SSL_kRSA
+#ifndef OPENSSL_NO_PSK
-+ | SSL_kRSAPSK
++ || alg_k & SSL_kRSAPSK
+#endif
-+ )) {
++ ) {
if (rsa == NULL) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_EXPORT_TMP_RSA_KEY);
diff --git x/ssl/s3_lib.c y/ssl/s3_lib.c
-index 0385e039c..ce69ec470 100644
+index 1014a3fce1..0187d508a1 100644
--- x/ssl/s3_lib.c
+++ y/ssl/s3_lib.c
@@ -1765,6 +1765,74 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
@@ -482,15 +459,15 @@ index 0385e039c..ce69ec470 100644
#ifndef OPENSSL_NO_PSK
/* with PSK there must be server callback set */
- if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)
-+ if ((alg_k & (SSL_kPSK | SSL_kRSAPSK)) && s->psk_server_callback == NULL)
++ if ((alg_k & SSL_kPSK || alg_k & SSL_kRSAPSK) && s->psk_server_callback == NULL)
continue;
#endif /* OPENSSL_NO_PSK */
diff --git x/ssl/s3_srvr.c y/ssl/s3_srvr.c
-index ea56f9ca8..2b1797cc8 100644
+index 0fb4845d44..3498836e7d 100644
--- x/ssl/s3_srvr.c
+++ y/ssl/s3_srvr.c
-@@ -458,19 +458,23 @@ int ssl3_accept(SSL *s)
+@@ -467,19 +467,22 @@ int ssl3_accept(SSL *s)
/*
* only send if a DH key exchange, fortezza or RSA but we have a
@@ -513,15 +490,14 @@ index ea56f9ca8..2b1797cc8 100644
- */
#ifndef OPENSSL_NO_PSK
- || ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint)
-+ || ((alg_k & (SSL_kPSK
++ || (alg_k & SSL_kPSK && s->ctx->psk_identity_hint)
+#ifndef OPENSSL_NO_RSA
-+ | SSL_kRSAPSK
++ || (alg_k & SSL_kRSAPSK && s->ctx->psk_identity_hint)
+#endif
-+ )) && s->ctx->psk_identity_hint)
#endif
#ifndef OPENSSL_NO_SRP
/* SRP: send ServerKeyExchange */
-@@ -526,11 +530,14 @@ int ssl3_accept(SSL *s)
+@@ -535,11 +538,14 @@ int ssl3_accept(SSL *s)
(s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5) ||
/* don't request certificate for SRP auth */
(s->s3->tmp.new_cipher->algorithm_auth & SSL_aSRP)
@@ -538,49 +514,56 @@ index ea56f9ca8..2b1797cc8 100644
/* no cert request */
skip = 1;
s->s3->tmp.cert_request = 0;
-@@ -1830,7 +1837,11 @@ int ssl3_send_server_key_exchange(SSL *s)
+@@ -1835,7 +1841,11 @@ int ssl3_send_server_key_exchange(SSL *s)
} else
#endif /* !OPENSSL_NO_ECDH */
#ifndef OPENSSL_NO_PSK
- if (type & SSL_kPSK) {
-+ if (type & (SSL_kPSK
++ if (type & SSL_kPSK
+#ifndef OPENSSL_NO_RSA
-+ | SSL_kRSAPSK
++ || type & SSL_kRSAPSK
+#endif
-+ )) {
++ ) {
/*
* reserve size for record length and PSK identity hint
*/
-@@ -1879,7 +1890,14 @@ int ssl3_send_server_key_exchange(SSL *s)
+@@ -1884,7 +1894,8 @@ int ssl3_send_server_key_exchange(SSL *s)
}
if (!(s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
- && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
-+#ifndef OPENSSL_NO_PSK
-+ && !(s->s3->tmp.new_cipher->algorithm_mkey & (SSL_kPSK
-+#ifndef OPENSSL_NO_RSA
-+ | SSL_kRSAPSK
-+#endif
-+ ))
-+#endif
-+ ) {
++ && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)
++ && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kRSAPSK)) {
if ((pkey = ssl_get_sign_pkey(s, s->s3->tmp.new_cipher, &md))
== NULL) {
al = SSL_AD_DECODE_ERROR;
-@@ -1953,7 +1971,11 @@ int ssl3_send_server_key_exchange(SSL *s)
+@@ -1899,6 +1910,12 @@ int ssl3_send_server_key_exchange(SSL *s)
+ } else {
+ pkey = NULL;
+ kn = 0;
++ /* Allow space for signature algorithm */
++ if (SSL_USE_SIGALGS(s)) {
++ kn += 4;
++ const unsigned char *sig;
++ kn += tls12_get_psigalgs(s, 1, &sig);
++ }
+ }
+
+ if (!BUF_MEM_grow_clean(buf, n + SSL_HM_HEADER_LENGTH(s) + kn)) {
+@@ -1958,7 +1975,11 @@ int ssl3_send_server_key_exchange(SSL *s)
#endif
#ifndef OPENSSL_NO_PSK
- if (type & SSL_kPSK) {
-+ if (type & (SSL_kPSK
++ if (type & SSL_kPSK
+#ifndef OPENSSL_NO_RSA
-+ | SSL_kRSAPSK
++ || type & SSL_kRSAPSK
+#endif
-+ )) {
++ ) {
/* copy PSK identity hint */
s2n(strlen(s->ctx->psk_identity_hint), p);
strncpy((char *)p, s->ctx->psk_identity_hint,
-@@ -1969,7 +1991,11 @@ int ssl3_send_server_key_exchange(SSL *s)
+@@ -1974,7 +1995,11 @@ int ssl3_send_server_key_exchange(SSL *s)
* points to the space at the end.
*/
#ifndef OPENSSL_NO_RSA
@@ -593,7 +576,7 @@ index ea56f9ca8..2b1797cc8 100644
q = md_buf;
j = 0;
for (num = 2; num > 0; num--) {
-@@ -2843,6 +2869,181 @@ int ssl3_get_client_key_exchange(SSL *s)
+@@ -2870,6 +2895,181 @@ int ssl3_get_client_key_exchange(SSL *s)
goto f_err;
} else
#endif
@@ -776,7 +759,7 @@ index ea56f9ca8..2b1797cc8 100644
if (alg_k & SSL_kSRP) {
int param_len;
diff --git x/ssl/ssl.h y/ssl/ssl.h
-index 90aeb0ce4..78cf2212e 100644
+index 90aeb0ce4e..78cf2212ed 100644
--- x/ssl/ssl.h
+++ y/ssl/ssl.h
@@ -254,6 +254,7 @@ extern "C" {
@@ -796,7 +779,7 @@ index 90aeb0ce4..78cf2212e 100644
# define SSL_TXT_DES "DES"
diff --git x/ssl/ssl_ciph.c y/ssl/ssl_ciph.c
-index 2ad8f4392..33f6da1be 100644
+index ccdf00fa1b..19c4ac0656 100644
--- x/ssl/ssl_ciph.c
+++ y/ssl/ssl_ciph.c
@@ -263,6 +263,7 @@ static const SSL_CIPHER cipher_aliases[] = {
@@ -844,10 +827,10 @@ index 2ad8f4392..33f6da1be 100644
kx = "SRP";
break;
diff --git x/ssl/ssl_lib.c y/ssl/ssl_lib.c
-index f8054dae6..b835f1fa5 100644
+index 3539f4b8d2..df6a45bdc4 100644
--- x/ssl/ssl_lib.c
+++ y/ssl/ssl_lib.c
-@@ -2434,8 +2434,14 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
+@@ -2442,8 +2442,14 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
#ifndef OPENSSL_NO_PSK
mask_k |= SSL_kPSK;
@@ -863,7 +846,7 @@ index f8054dae6..b835f1fa5 100644
#endif
diff --git x/ssl/ssl_locl.h y/ssl/ssl_locl.h
-index d50edd18c..3c59fff1b 100644
+index aeffc00634..25b9f1d5b1 100644
--- x/ssl/ssl_locl.h
+++ y/ssl/ssl_locl.h
@@ -314,6 +314,8 @@
@@ -876,7 +859,7 @@ index d50edd18c..3c59fff1b 100644
/* Bits for algorithm_auth (server authentication) */
/* RSA auth */
diff --git x/ssl/tls1.h y/ssl/tls1.h
-index 7e237d063..173be499f 100644
+index dd1d8c109e..e04e7ddabc 100644
--- x/ssl/tls1.h
+++ y/ssl/tls1.h
@@ -410,6 +410,24 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb)
@@ -930,5 +913,5 @@ index 7e237d063..173be499f 100644
# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA"
# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA"
--
-2.11.0
+2.15.0
diff --git a/patches/qt-Add-IsoDep-to-the-techList-on-Android.patch b/patches/qt-Add-IsoDep-to-the-techList-on-Android.patch
new file mode 100644
index 0000000..04b5938
--- /dev/null
+++ b/patches/qt-Add-IsoDep-to-the-techList-on-Android.patch
@@ -0,0 +1,25 @@
+From e06d2d0d163501fdb0926175d7c539c7bb413d70 Mon Sep 17 00:00:00 2001
+From: Lars Schmertmann
+Date: Wed, 22 Nov 2017 07:35:56 +0100
+Subject: Add IsoDep to the techList on Android
+
+Change-Id: I26c183c1344cd0d9323fcedde82347487eebdffb
+---
+ src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
+index 345b87d3..a1ae5c37 100644
+--- x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
++++ y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
+@@ -127,6 +127,7 @@ public class QtNfc
+ filters[2] = new IntentFilter();
+ filters[2].addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
+ String[][] techList = new String[][]{
++ {"android.nfc.tech.IsoDep"},
+ {"android.nfc.tech.Ndef"},
+ {"android.nfc.tech.NdefFormatable"}
+ };
+--
+2.14.2
+
diff --git a/patches/qt-Add-debug-stream-operator-for-QNetworkProxyQuery.patch b/patches/qt-Add-debug-stream-operator-for-QNetworkProxyQuery.patch
deleted file mode 100644
index 4538465..0000000
--- a/patches/qt-Add-debug-stream-operator-for-QNetworkProxyQuery.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From a65c1ef2833757f49024f13900645abf62d6eb22 Mon Sep 17 00:00:00 2001
-From: Lars Schmertmann
-Date: Tue, 10 Jan 2017 08:52:35 +0100
-Subject: Add debug stream operator for QNetworkProxyQuery
-
-Change-Id: Iae215827350e47a8ce31e5828d3ad1ed54564e84
----
- src/network/kernel/qnetworkproxy.cpp | 19 +++++++++++++++----
- src/network/kernel/qnetworkproxy.h | 4 ++++
- 2 files changed, 19 insertions(+), 4 deletions(-)
-
-diff --git x/qtbase/src/network/kernel/qnetworkproxy.cpp y/qtbase/src/network/kernel/qnetworkproxy.cpp
-index 94719e9c2d..6bd6fa2658 100644
---- x/qtbase/src/network/kernel/qnetworkproxy.cpp
-+++ y/qtbase/src/network/kernel/qnetworkproxy.cpp
-@@ -1634,10 +1634,6 @@ QList QNetworkProxyFactory::proxyForQuery(const QNetworkProxyQuer
- }
-
- #ifndef QT_NO_DEBUG_STREAM
--/*!
-- \since 5.0
-- Outputs a QNetworkProxy details to a debug stream
--*/
- QDebug operator<<(QDebug debug, const QNetworkProxy &proxy)
- {
- QDebugStateSaver saver(debug);
-@@ -1686,6 +1682,21 @@ QDebug operator<<(QDebug debug, const QNetworkProxy &proxy)
- debug << '[' << scaps.join(QLatin1Char(' ')) << ']';
- return debug;
- }
-+
-+QDebug operator<<(QDebug debug, const QNetworkProxyQuery &proxyQuery)
-+{
-+ QDebugStateSaver saver(debug);
-+ debug.resetFormat().nospace()
-+ << "ProxyQuery("
-+ << "type: " << proxyQuery.queryType()
-+ << ", protocol: " << proxyQuery.protocolTag()
-+ << ", peerPort: " << proxyQuery.peerPort()
-+ << ", peerHostName: " << proxyQuery.peerHostName()
-+ << ", localPort: " << proxyQuery.localPort()
-+ << ", url: " << proxyQuery.url()
-+ << ')';
-+ return debug;
-+}
- #endif
-
- QT_END_NAMESPACE
-diff --git x/qtbase/src/network/kernel/qnetworkproxy.h y/qtbase/src/network/kernel/qnetworkproxy.h
-index 8fcb7e33cf..8699c313e9 100644
---- x/qtbase/src/network/kernel/qnetworkproxy.h
-+++ y/qtbase/src/network/kernel/qnetworkproxy.h
-@@ -56,6 +56,8 @@ class QNetworkConfiguration;
- class QNetworkProxyQueryPrivate;
- class Q_NETWORK_EXPORT QNetworkProxyQuery
- {
-+ Q_GADGET
-+
- public:
- enum QueryType {
- TcpSocket,
-@@ -65,6 +67,7 @@ public:
- UrlRequest,
- SctpServer
- };
-+ Q_ENUM(QueryType)
-
- QNetworkProxyQuery();
- explicit QNetworkProxyQuery(const QUrl &requestUrl, QueryType queryType = UrlRequest);
-@@ -222,6 +225,7 @@ public:
-
- #ifndef QT_NO_DEBUG_STREAM
- Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkProxy &proxy);
-+Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkProxyQuery &proxyQuery);
- #endif
-
- QT_END_NAMESPACE
---
-2.11.0
-
diff --git a/patches/qt-Allow-using-nfc-when-running-as-a-service.patch b/patches/qt-Allow-using-nfc-when-running-as-a-service.patch
deleted file mode 100644
index 309c334..0000000
--- a/patches/qt-Allow-using-nfc-when-running-as-a-service.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From b42f7623ee75b651f6e756a73d0f8f385f337220 Mon Sep 17 00:00:00 2001
-From: Lars Schmertmann
-Date: Thu, 26 Jan 2017 15:02:37 +0100
-Subject: Allow using nfc when running as a service
-
-With this change it will be possible to use a tag
-injected from outside when running as a service.
-
- Intent newIntent = new Intent();
- newIntent.putExtra(NfcAdapter.EXTRA_TAG, tag);
- QtNative.onNewIntent(newIntent);
-
-Task-number: QTBUG-57646
-Change-Id: I628d4357f023a0926e7d61914b39278342ac7161
----
- .../src/org/qtproject/qt5/android/nfc/QtNfc.java | 24 ++++++++++++++--------
- 1 file changed, 15 insertions(+), 9 deletions(-)
-
-diff --git x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
-index 47dcf1bf..25c560f8 100644
---- x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
-+++ y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
-@@ -62,22 +62,25 @@ public class QtNfc
- static public NfcAdapter m_adapter = null;
- static public PendingIntent m_pendingIntent = null;
- static public IntentFilter[] m_filters;
-- static public Activity m_activity;
-+ static public Context m_context = null;
-+ static public Activity m_activity = null;
-
- static public void setContext(Context context)
- {
-- if (!(context instanceof Activity)) {
-- Log.w(TAG, "NFC only works with Android activities and not in Android services. " +
-- "NFC has been disabled.");
-+ m_context = context;
-+ if (context instanceof Activity) m_activity = (Activity) context;
-+ m_adapter = NfcAdapter.getDefaultAdapter(context);
-+
-+ if (m_activity == null) {
-+ Log.w(TAG, "New NFC tags will only be recognized with Android activities and not with Android services.");
- return;
- }
-
-- m_activity = (Activity)context;
-- m_adapter = NfcAdapter.getDefaultAdapter(m_activity);
- if (m_adapter == null) {
- //Log.e(TAG, "No NFC available");
- return;
- }
-+
- m_pendingIntent = PendingIntent.getActivity(
- m_activity,
- 0,
-@@ -103,7 +106,8 @@ public class QtNfc
-
- static public boolean start()
- {
-- if (m_adapter == null) return false;
-+ if (m_adapter == null || m_activity == null) return false;
-+
- m_activity.runOnUiThread(new Runnable() {
- public void run() {
- //Log.d(TAG, "Enabling NFC");
-@@ -136,7 +140,8 @@ public class QtNfc
-
- static public boolean stop()
- {
-- if (m_adapter == null) return false;
-+ if (m_adapter == null || m_activity == null) return false;
-+
- m_activity.runOnUiThread(new Runnable() {
- public void run() {
- //Log.d(TAG, "Disabling NFC");
-@@ -153,11 +158,11 @@ public class QtNfc
-
- static public boolean isAvailable()
- {
-- m_adapter = NfcAdapter.getDefaultAdapter(m_activity);
- if (m_adapter == null) {
- //Log.e(TAG, "No NFC available (Adapter is null)");
- return false;
- }
-+
- return m_adapter.isEnabled();
- }
-
-@@ -165,6 +170,7 @@ public class QtNfc
- {
- Log.d(TAG, "getStartIntent");
- if (m_activity == null) return null;
-+
- Intent intent = m_activity.getIntent();
- if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()) ||
- NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) ||
---
-2.11.0
-
diff --git a/patches/qt-Android-Add-support-for-sendCommand-to-QNearFieldTarget.patch b/patches/qt-Android-Add-support-for-sendCommand-to-QNearFieldTarget.patch
deleted file mode 100644
index a049d99..0000000
--- a/patches/qt-Android-Add-support-for-sendCommand-to-QNearFieldTarget.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-From 6483796d9c117a7dee7c2ffcef090600b04bd21c Mon Sep 17 00:00:00 2001
-From: Lars Schmertmann
-Date: Tue, 13 Dec 2016 15:34:32 +0100
-Subject: Android: Add support for sendCommand to QNearFieldTarget
-
-For the communication with a German ID card its required to execute
-commands. This change enables support for sendCommand.
-
-Change-Id: I95773c047953b244cd5c3e22bfc7abf7f7eb656e
----
- src/nfc/qnearfieldtarget.cpp | 3 +-
- src/nfc/qnearfieldtarget.h | 3 +-
- src/nfc/qnearfieldtarget_android.cpp | 81 +++++++++++++++++++++++-------------
- 3 files changed, 56 insertions(+), 31 deletions(-)
-
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-index 509160c1..a65b4be2 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-@@ -111,7 +111,7 @@ QT_BEGIN_NAMESPACE
- /*!
- \enum QNearFieldTarget::Error
-
-- This enum describes the error codes that that a near field target reports.
-+ This enum describes the error codes that a near field target reports.
-
- \value NoError No error has occurred.
- \value UnknownError An unidentified error occurred.
-@@ -123,6 +123,7 @@ QT_BEGIN_NAMESPACE
- \value InvalidParametersError Invalid parameters were passed to a tag type specific function.
- \value NdefReadError Failed to read NDEF messages from the target.
- \value NdefWriteError Failed to write NDEF messages to the target.
-+ \value CommandError Failed to send a command to the target.
- */
-
- // Copied from qbytearray.cpp
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
-index dc081f5e..dfb474f6 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget.h
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
-@@ -91,7 +91,8 @@ public:
- ChecksumMismatchError,
- InvalidParametersError,
- NdefReadError,
-- NdefWriteError
-+ NdefWriteError,
-+ CommandError
- };
- Q_ENUM(Error)
-
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-index e0c1616d..478f4d8c 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-@@ -43,6 +43,7 @@
-
- #define NDEFTECHNOLOGY "android.nfc.tech.Ndef"
- #define NDEFFORMATABLETECHNOLOGY "android.nfc.tech.NdefFormatable"
-+#define ISODEPTECHNOLOGY "android.nfc.tech.IsoDep"
- #define NFCATECHNOLOGY "android.nfc.tech.NfcA"
- #define NFCBTECHNOLOGY "android.nfc.tech.NfcB"
- #define NFCFTECHNOLOGY "android.nfc.tech.NfcF"
-@@ -84,7 +85,19 @@ QNearFieldTarget::Type NearFieldTarget::type() const
-
- QNearFieldTarget::AccessMethods NearFieldTarget::accessMethods() const
- {
-- AccessMethods result = NdefAccess;
-+ AccessMethods result = UnknownAccess;
-+
-+ if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))
-+ || m_techList.contains(QStringLiteral(NDEFFORMATABLETECHNOLOGY)))
-+ result |= NdefAccess;
-+
-+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))
-+ || m_techList.contains(QStringLiteral(NFCATECHNOLOGY))
-+ || m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))
-+ || m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))
-+ || m_techList.contains(QStringLiteral(NFCVTECHNOLOGY)))
-+ result |= TagTypeSpecificAccess;
-+
- return result;
- }
-
-@@ -157,24 +170,23 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
- return requestId;
- }
-
--
- QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &command)
- {
-- Q_UNUSED(command);
-- Q_EMIT QNearFieldTarget::error(QNearFieldTarget::UnsupportedError, QNearFieldTarget::RequestId());
-- return QNearFieldTarget::RequestId();
--
-- //Not supported for now
-- /*if (command.size() == 0) {
-+ if (command.size() == 0) {
- Q_EMIT QNearFieldTarget::error(QNearFieldTarget::InvalidParametersError, QNearFieldTarget::RequestId());
- return QNearFieldTarget::RequestId();
- }
-
-- AndroidNfc::AttachedJNIEnv aenv;
-- JNIEnv *env = aenv.jniEnv;
-+ // Making sure that target has commands
-+ if (!(accessMethods() & TagTypeSpecificAccess))
-+ return QNearFieldTarget::RequestId();
-+
-+ QAndroidJniEnvironment env;
-
-- jobject tagTech;
-- if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
-+ QAndroidJniObject tagTech;
-+ if (m_techList.contains(ISODEPTECHNOLOGY)) {
-+ tagTech = getTagTechnology(ISODEPTECHNOLOGY);
-+ } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
-@@ -187,30 +199,41 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
- return QNearFieldTarget::RequestId();
- }
-
-- QByteArray ba(ba);
--
-- jclass techClass = env->GetObjectClass(tagTech);
-- jmethodID tranceiveMID = env->GetMethodID(techClass, "tranceive", "([B)[B");
-- Q_ASSERT_X(tranceiveMID != 0, "sendCommand", "could not find tranceive method");
-+ // Connecting
-+ QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
-+ tagTech.callMethod("connect");
-+ if (catchJavaExceptions()) {
-+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
-+ Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
-+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
-+ return requestId;
-+ }
-
-+ // Making QByteArray
-+ QByteArray ba(command);
- jbyteArray jba = env->NewByteArray(ba.size());
- env->SetByteArrayRegion(jba, 0, ba.size(), reinterpret_cast(ba.data()));
-
-- jbyteArray rsp = reinterpret_cast(env->CallObjectMethod(tagTech, tranceiveMID, jba));
--
-- jsize len = env->GetArrayLength(rsp);
-- QByteArray rspQBA;
-- rspQBA.resize(len);
--
-- env->GetByteArrayRegion(rsp, 0, len, reinterpret_cast(rspQBA.data()));
--
-- qDebug() << "Send command returned QBA size: " << rspQBA.size();
--
--
-+ // Writing
-+ QAndroidJniObject myNewVal = tagTech.callObjectMethod("transceive", "([B)[B", jba);
-+ if (catchJavaExceptions()) {
-+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
-+ Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
-+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
-+ return requestId;
-+ }
-+ QByteArray result = jbyteArrayToQByteArray(myNewVal.object());
- env->DeleteLocalRef(jba);
-
-+ handleResponse(requestId, result);
-
-- return QNearFieldTarget::RequestId();*/
-+ // Closing connection, sending signal and exit
-+ tagTech.callMethod("close");
-+ catchJavaExceptions(); // IOException at this point does not matter anymore.
-+ QMetaObject::invokeMethod(this, "requestCompleted", Qt::QueuedConnection,
-+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
-+
-+ return requestId;
- }
-
- QNearFieldTarget::RequestId NearFieldTarget::sendCommands(const QList &commands)
---
-2.11.0
-
diff --git a/patches/qt-Android-QNearfieldTarget-Introduce-maxCommandLength.patch b/patches/qt-Android-QNearfieldTarget-Introduce-maxCommandLength.patch
deleted file mode 100644
index ec910c9..0000000
--- a/patches/qt-Android-QNearfieldTarget-Introduce-maxCommandLength.patch
+++ /dev/null
@@ -1,374 +0,0 @@
-From f4f7f906ed1c9763c8e79f0882d25caaa00eb264 Mon Sep 17 00:00:00 2001
-From: Lars Schmertmann
-Date: Tue, 29 Nov 2016 16:34:37 +0100
-Subject: Android: QNearfieldTarget: Introduce maxCommandLength()
-
-For the communication with a German ID card its required to execute
-commands with a length up to 500 byte. With this change it is
-possible to check if the required length is supported.
-
-[ChangeLog][QNearfieldTarget] Introduce maxCommandLength() to
-make it possible to check the maximum supported length for commands.
-
-Change-Id: I7e655f419765d8ad728f6d6005a85a01d5aa03e9
----
- src/nfc/nfc.pro | 7 +++--
- src/nfc/qnearfieldtarget.cpp | 15 +++++++++-
- src/nfc/qnearfieldtarget.h | 1 +
- src/nfc/qnearfieldtarget_android.cpp | 31 ++++++++++++++++++--
- src/nfc/qnearfieldtarget_android_p.cpp | 53 ++++++++++++++++++++++++++++++++++
- src/nfc/qnearfieldtarget_android_p.h | 1 +
- src/nfc/qnearfieldtarget_neard_p.cpp | 52 +++++++++++++++++++++++++++++++++
- src/nfc/qnearfieldtarget_p.cpp | 52 +++++++++++++++++++++++++++++++++
- src/nfc/qnearfieldtarget_p.h | 8 +++++
- 9 files changed, 214 insertions(+), 6 deletions(-)
- create mode 100644 src/nfc/qnearfieldtarget_android_p.cpp
- create mode 100644 src/nfc/qnearfieldtarget_neard_p.cpp
- create mode 100644 src/nfc/qnearfieldtarget_p.cpp
-
-diff --git x/qtconnectivity/src/nfc/nfc.pro y/qtconnectivity/src/nfc/nfc.pro
-index 0819cc4f..ce193efa 100644
---- x/qtconnectivity/src/nfc/nfc.pro
-+++ y/qtconnectivity/src/nfc/nfc.pro
-@@ -74,7 +74,8 @@ linux:!android:qtHaveModule(dbus) {
- qllcpserver_p.cpp \
- qnearfieldsharemanagerimpl_p.cpp \
- qnearfieldsharetargetimpl_p.cpp \
-- qnearfieldmanager_neard.cpp
-+ qnearfieldmanager_neard.cpp \
-+ qnearfieldtarget_neard_p.cpp
-
- include(neard/neard.pri)
-
-@@ -107,6 +108,7 @@ linux:!android:qtHaveModule(dbus) {
- android/androidjninfc.cpp \
- qnearfieldmanager_android.cpp \
- qnearfieldtarget_android.cpp \
-+ qnearfieldtarget_android_p.cpp \
- qnearfieldsharemanagerimpl_p.cpp \
- qnearfieldsharetargetimpl_p.cpp \
- android/androidmainnewintentlistener.cpp
-@@ -127,7 +129,8 @@ isEmpty(NFC_BACKEND_AVAILABLE) {
- qllcpserver_p.cpp \
- qnearfieldmanagerimpl_p.cpp \
- qnearfieldsharemanagerimpl_p.cpp \
-- qnearfieldsharetargetimpl_p.cpp
-+ qnearfieldsharetargetimpl_p.cpp \
-+ qnearfieldtarget_p.cpp
- }
-
- HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-index a65b4be2..274ef175 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-@@ -277,7 +277,7 @@ QNearFieldTarget::RequestId &QNearFieldTarget::RequestId::operator=(const Reques
- Constructs a new near field target with \a parent.
- */
- QNearFieldTarget::QNearFieldTarget(QObject *parent)
--: QObject(parent), d_ptr(new QNearFieldTargetPrivate)
-+: QObject(parent), d_ptr(new QNearFieldTargetPrivate(this))
- {
- qRegisterMetaType();
- qRegisterMetaType();
-@@ -365,6 +365,19 @@ QNearFieldTarget::RequestId QNearFieldTarget::writeNdefMessages(const QListmaxCommandLength();
-+}
-+
-+/*!
- Sends \a command to the near field target. Returns a request id which can be used to track the
- completion status of the request. An invalid request id will be returned if the target does not
- support sending tag type specific commands.
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
-index dfb474f6..620ea813 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget.h
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
-@@ -134,6 +134,7 @@ public:
- virtual RequestId writeNdefMessages(const QList &messages);
-
- // TagTypeSpecificAccess
-+ int maxCommandLength() const;
- virtual RequestId sendCommand(const QByteArray &command);
- virtual RequestId sendCommands(const QList &commands);
-
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-index 478f4d8c..f41b0b2e 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-@@ -170,9 +170,34 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
- return requestId;
- }
-
-+int NearFieldTarget::maxCommandLength() const
-+{
-+ QAndroidJniObject tagTech;
-+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
-+ tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
-+ } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
-+ tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
-+ } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
-+ tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
-+ } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
-+ tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
-+ } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
-+ tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
-+ } else {
-+ return 0;
-+ }
-+
-+ int returnVal = tagTech.callMethod("getMaxTransceiveLength");
-+ if (catchJavaExceptions()) {
-+ return 0;
-+ }
-+
-+ return returnVal;
-+}
-+
- QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &command)
- {
-- if (command.size() == 0) {
-+ if (command.size() == 0 || command.size() > maxCommandLength()) {
- Q_EMIT QNearFieldTarget::error(QNearFieldTarget::InvalidParametersError, QNearFieldTarget::RequestId());
- return QNearFieldTarget::RequestId();
- }
-@@ -184,8 +209,8 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
- QAndroidJniEnvironment env;
-
- QAndroidJniObject tagTech;
-- if (m_techList.contains(ISODEPTECHNOLOGY)) {
-- tagTech = getTagTechnology(ISODEPTECHNOLOGY);
-+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
-+ tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
-new file mode 100644
-index 00000000..da2d8f2d
---- /dev/null
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
-@@ -0,0 +1,53 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2017 Governikus GmbH & Co. KG
-+** Contact: https://www.qt.io/licensing/
-+**
-+** This file is part of the QtNfc module of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and The Qt Company. For licensing terms
-+** and conditions see https://www.qt.io/terms-conditions. For further
-+** information use the contact form at https://www.qt.io/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 3 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL3 included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 3 requirements
-+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 2.0 or (at your option) the GNU General
-+** Public license version 3 or any later version approved by the KDE Free
-+** Qt Foundation. The licenses are as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-+** included in the packaging of this file. Please review the following
-+** information to ensure the GNU General Public License requirements will
-+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-+** https://www.gnu.org/licenses/gpl-3.0.html.
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#include
-+
-+#include "qnearfieldtarget_p.h"
-+#include "qnearfieldtarget_android_p.h"
-+
-+QT_BEGIN_NAMESPACE
-+
-+int QNearFieldTargetPrivate::maxCommandLength() const
-+{
-+ NearFieldTarget * const q = reinterpret_cast(q_ptr);
-+ return q->maxCommandLength();
-+}
-+
-+QT_END_NAMESPACE
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
-index 94bb394d..f2e2ee7f 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
-@@ -77,6 +77,7 @@ public:
- virtual AccessMethods accessMethods() const;
- virtual bool hasNdefMessage();
- virtual RequestId readNdefMessages();
-+ int maxCommandLength() const;
- virtual RequestId sendCommand(const QByteArray &command);
- virtual RequestId sendCommands(const QList &commands);
- virtual RequestId writeNdefMessages(const QList &messages);
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
-new file mode 100644
-index 00000000..3d1bfa6c
---- /dev/null
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
-@@ -0,0 +1,52 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2017 Governikus GmbH & Co. K
-+** Contact: https://www.qt.io/licensing/
-+**
-+** This file is part of the QtNfc module of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and The Qt Company. For licensing terms
-+** and conditions see https://www.qt.io/terms-conditions. For further
-+** information use the contact form at https://www.qt.io/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 3 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL3 included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 3 requirements
-+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 2.0 or (at your option) the GNU General
-+** Public license version 3 or any later version approved by the KDE Free
-+** Qt Foundation. The licenses are as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-+** included in the packaging of this file. Please review the following
-+** information to ensure the GNU General Public License requirements will
-+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-+** https://www.gnu.org/licenses/gpl-3.0.html.
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#include
-+
-+#include "qnearfieldtarget.h"
-+#include "qnearfieldtarget_p.h"
-+
-+QT_BEGIN_NAMESPACE
-+
-+int QNearFieldTargetPrivate::maxCommandLength() const
-+{
-+ return 0;
-+}
-+
-+QT_END_NAMESPACE
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
-new file mode 100644
-index 00000000..3d1bfa6c
---- /dev/null
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
-@@ -0,0 +1,52 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2017 Governikus GmbH & Co. K
-+** Contact: https://www.qt.io/licensing/
-+**
-+** This file is part of the QtNfc module of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and The Qt Company. For licensing terms
-+** and conditions see https://www.qt.io/terms-conditions. For further
-+** information use the contact form at https://www.qt.io/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 3 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL3 included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 3 requirements
-+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 2.0 or (at your option) the GNU General
-+** Public license version 3 or any later version approved by the KDE Free
-+** Qt Foundation. The licenses are as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-+** included in the packaging of this file. Please review the following
-+** information to ensure the GNU General Public License requirements will
-+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-+** https://www.gnu.org/licenses/gpl-3.0.html.
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#include
-+
-+#include "qnearfieldtarget.h"
-+#include "qnearfieldtarget_p.h"
-+
-+QT_BEGIN_NAMESPACE
-+
-+int QNearFieldTargetPrivate::maxCommandLength() const
-+{
-+ return 0;
-+}
-+
-+QT_END_NAMESPACE
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
-index 7a787ace..9b2ed480 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_p.h
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
-@@ -57,6 +57,7 @@
-
- #include
- #include
-+#include
-
- QT_BEGIN_NAMESPACE
-
-@@ -66,8 +67,15 @@ class QNearFieldTarget::RequestIdPrivate : public QSharedData
-
- class QNearFieldTargetPrivate
- {
-+ QNearFieldTarget *q_ptr;
-+ Q_DECLARE_PUBLIC(QNearFieldTarget)
-+
- public:
-+ QNearFieldTargetPrivate(QNearFieldTarget *q) : q_ptr(q) {}
-+
- QMap m_decodedResponses;
-+
-+ int maxCommandLength() const;
- };
-
- QT_END_NAMESPACE
---
-2.11.0
-
diff --git a/patches/qt-Avoid-using-deprecated-APIs-on-iOS-10.0.patch b/patches/qt-Avoid-using-deprecated-APIs-on-iOS-10.0.patch
new file mode 100644
index 0000000..5a5d405
--- /dev/null
+++ b/patches/qt-Avoid-using-deprecated-APIs-on-iOS-10.0.patch
@@ -0,0 +1,73 @@
+From 26383dba15ceed74b36dd71e5b1837c63aade927 Mon Sep 17 00:00:00 2001
+From: Lars Schmertmann
+Date: Thu, 14 Sep 2017 12:47:11 +0200
+Subject: Avoid using deprecated APIs on iOS 10.0+
+
+Change-Id: Ic9dc6a24ef793a29c2652ad37bc11120e2e6ceef
+---
+ src/gui/util/qdesktopservices.cpp | 13 +++++++++++++
+ src/plugins/platforms/ios/qiosservices.mm | 14 ++++++++++++--
+ 2 files changed, 25 insertions(+), 2 deletions(-)
+
+diff --git x/qtbase/src/gui/util/qdesktopservices.cpp y/qtbase/src/gui/util/qdesktopservices.cpp
+index c9747877f7..77ccc02aa5 100644
+--- x/qtbase/src/gui/util/qdesktopservices.cpp
++++ y/qtbase/src/gui/util/qdesktopservices.cpp
+@@ -177,6 +177,19 @@ void QOpenUrlHandlerRegistry::handlerDestroyed(QObject *handler)
+ still fail to launch or fail to open the requested URL. This result will not be reported back
+ to the application.
+
++ \warning URLs passed to this function on iOS will not load unless their schemes are
++ listed in the \c LSApplicationQueriesSchemes key of the application's Info.plist file.
++ For more information, see the Apple Developer Documentation for
++ \l{https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl}{canOpenURL(_:)}.
++ For example, the following lines enable URLs with the HTTPS scheme:
++
++ \code
++ LSApplicationQueriesSchemes
++
++ https
++
++ \endcode
++
+ \sa setUrlHandler()
+ */
+ bool QDesktopServices::openUrl(const QUrl &url)
+diff --git x/qtbase/src/plugins/platforms/ios/qiosservices.mm y/qtbase/src/plugins/platforms/ios/qiosservices.mm
+index 0ecc8e123f..a963a5c05d 100644
+--- x/qtbase/src/plugins/platforms/ios/qiosservices.mm
++++ y/qtbase/src/plugins/platforms/ios/qiosservices.mm
+@@ -41,6 +41,7 @@
+
+ #include
+ #include
++#include
+
+ #import
+
+@@ -55,11 +56,20 @@ bool QIOSServices::openUrl(const QUrl &url)
+ return openDocument(url);
+
+ NSURL *nsUrl = url.toNSURL();
++ UIApplication *application = [UIApplication sharedApplication];
+
+- if (![[UIApplication sharedApplication] canOpenURL:nsUrl])
++ if (![application canOpenURL:nsUrl])
+ return false;
+
+- return [[UIApplication sharedApplication] openURL:nsUrl];
++#if QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_NA, 100000, 100000, __WATCHOS_NA)
++ if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::IOS, 10)) {
++ [application openURL:nsUrl options:@{} completionHandler:nil];
++ return true;
++ } else
++#endif
++ {
++ return [application openURL:nsUrl];
++ }
+ }
+
+ bool QIOSServices::openDocument(const QUrl &url)
+--
+2.14.1
+
diff --git a/patches/qt-Change-build-configuration-for-Qt-on-iOS.patch b/patches/qt-Change-build-configuration-for-Qt-on-iOS.patch
new file mode 100644
index 0000000..18a0870
--- /dev/null
+++ b/patches/qt-Change-build-configuration-for-Qt-on-iOS.patch
@@ -0,0 +1,32 @@
+From 1f505127d1dba4b755fc00360a5bffff8163acb7 Mon Sep 17 00:00:00 2001
+From: Lars Schmertmann
+Date: Wed, 19 Jul 2017 09:44:01 +0200
+Subject: Change build configuration for Qt on iOS
+---
+ mkspecs/macx-ios-clang/qmake.conf | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git x/qtbase/mkspecs/macx-ios-clang/qmake.conf y/qtbase/mkspecs/macx-ios-clang/qmake.conf
+index 825e03aa85..fe783faee3 100644
+--- x/qtbase/mkspecs/macx-ios-clang/qmake.conf
++++ y/qtbase/mkspecs/macx-ios-clang/qmake.conf
+@@ -2,13 +2,13 @@
+ # qmake configuration for macx-ios-clang
+ #
+
+-QMAKE_IOS_DEPLOYMENT_TARGET = 8.0
++QMAKE_IOS_DEPLOYMENT_TARGET = 10.0
+
+ # Universal target (iPhone and iPad)
+ QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1,2
+
+-QMAKE_APPLE_DEVICE_ARCHS = armv7 arm64
+-QMAKE_APPLE_SIMULATOR_ARCHS = i386 x86_64
++QMAKE_APPLE_DEVICE_ARCHS = arm64
++QMAKE_APPLE_SIMULATOR_ARCHS = x86_64
+
+ include(../common/ios.conf)
+ include(../common/gcc-base-mac.conf)
+--
+2.13.2
+
diff --git a/patches/qt-Disable-unused-imageformats.patch b/patches/qt-Disable-unused-imageformats.patch
new file mode 100644
index 0000000..a1f3496
--- /dev/null
+++ b/patches/qt-Disable-unused-imageformats.patch
@@ -0,0 +1,26 @@
+From 978caa044d4e1c52c90a87490defbac387db58d6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Klitzing?=
+Date: Mon, 25 Sep 2017 14:10:56 +0200
+Subject: [PATCH] Disable unused imageformats
+
+---
+ src/plugins/imageformats/imageformats.pro | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git x/qtimageformats/src/plugins/imageformats/imageformats.pro y/qtimageformats/src/plugins/imageformats/imageformats.pro
+index 8c79379..2aa80f5 100644
+--- x/qtimageformats/src/plugins/imageformats/imageformats.pro
++++ y/qtimageformats/src/plugins/imageformats/imageformats.pro
+@@ -16,8 +16,7 @@ config_jasper {
+ SUBDIRS += macjp2
+ }
+
+-winrt {
+ SUBDIRS -= tiff \
+ tga \
++ wbmp \
+ webp
+-}
+--
+2.14.1
+
diff --git a/patches/qt-Do-not-request-an-unnessessary-dangerous-right.patch b/patches/qt-Do-not-request-an-unnessessary-dangerous-right.patch
deleted file mode 100644
index d0c7a92..0000000
--- a/patches/qt-Do-not-request-an-unnessessary-dangerous-right.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 1e9d5b22fbd18cfcf56f5c6ced19c0d9ba55a4f1 Mon Sep 17 00:00:00 2001
-From: Lars Schmertmann
-Date: Wed, 11 Jan 2017 17:29:40 +0100
-Subject: [PATCH] Do not request an unnessessary dangerous right
-
-Bluetooth LE discovery needs ACCESS_COARSE_LOCATION permission
-since android 6.0. In the manifest file it is possible use it by
-""
-in general. But the bluetooth LE discovery requests it for every
-android version. This change enables the request for android > 6.0
-only (API-Level >=23).
-
-Task-number: QTBUG-58085
-Change-Id: I78ad2fe83eb16eaf45813137335f85c7b3930992
----
- src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
-index 2d6e64be..e76ddff7 100644
---- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
-+++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
-@@ -45,6 +45,7 @@
- #include
- #include "android/devicediscoverybroadcastreceiver_p.h"
- #include
-+#include
-
- QT_BEGIN_NAMESPACE
-
-@@ -147,7 +148,9 @@ void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent
-
- // check Android v23+ permissions
- // -> BTLE search requires android.permission.ACCESS_COARSE_LOCATION
-- if (requestedMethods && QBluetoothDeviceDiscoveryAgent::LowEnergyMethod) {
-+ if (requestedMethods & QBluetoothDeviceDiscoveryAgent::LowEnergyMethod
-+ && QtAndroid::androidSdkVersion() >= 23)
-+ {
- QString permission(QLatin1String("android.permission.ACCESS_COARSE_LOCATION"));
-
- // do we have required permission already, if so nothing to do
---
-2.11.0
-
diff --git a/patches/qt-Introduce-QNetworkAccessManager-clearConnectionCache.patch b/patches/qt-Introduce-QNetworkAccessManager-clearConnectionCache.patch
deleted file mode 100644
index da571dd..0000000
--- a/patches/qt-Introduce-QNetworkAccessManager-clearConnectionCache.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-From 523c61571e234865e411d823366dc87d62fe50ab Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Sebastian=20L=C3=B6sch?=
-Date: Wed, 10 Aug 2016 16:51:34 +0200
-Subject: Introduce QNetworkAccessManager::clearConnectionCache()
-
-Sometimes it is desirable to use a new connection but keep already
-entered user credentials for usability reasons. This is now possible by
-clearing the connection cache (but keeping the authentication cache).
-
-Change-Id: I2f5f64836ce19f81c8525701783a3da823dd468e
----
- src/network/access/qnetworkaccessmanager.cpp | 25 +++++++++++++++++++---
- src/network/access/qnetworkaccessmanager.h | 2 ++
- src/network/access/qnetworkaccessmanager_p.h | 3 ++-
- .../access/qnetworkreply/tst_qnetworkreply.cpp | 3 ++-
- .../tst_network_remote_stresstest.cpp | 3 ++-
- .../network_stresstest/tst_network_stresstest.cpp | 3 ++-
- 6 files changed, 32 insertions(+), 7 deletions(-)
-
-diff --git x/qtbase/src/network/access/qnetworkaccessmanager.cpp y/qtbase/src/network/access/qnetworkaccessmanager.cpp
-index 6d5b2400f1..b763547a15 100644
---- x/qtbase/src/network/access/qnetworkaccessmanager.cpp
-+++ y/qtbase/src/network/access/qnetworkaccessmanager.cpp
-@@ -1352,10 +1352,26 @@ QStringList QNetworkAccessManager::supportedSchemesImplementation() const
-
- This function is useful for doing auto tests.
-
-+ \sa clearConnectionCache()
- */
- void QNetworkAccessManager::clearAccessCache()
- {
-- QNetworkAccessManagerPrivate::clearCache(this);
-+ QNetworkAccessManagerPrivate::clearAuthenticationCache(this);
-+ QNetworkAccessManagerPrivate::clearConnectionCache(this);
-+}
-+
-+/*!
-+ \since 5.9
-+
-+ Flushes the internal cache of network connections.
-+ In contrast to clearAccessCache() the authentication data
-+ is preserved.
-+
-+ \sa clearAccessCache()
-+*/
-+void QNetworkAccessManager::clearConnectionCache()
-+{
-+ QNetworkAccessManagerPrivate::clearConnectionCache(this);
- }
-
- void QNetworkAccessManagerPrivate::_q_replyFinished()
-@@ -1552,11 +1568,14 @@ QList QNetworkAccessManagerPrivate::queryProxy(const QNetworkProx
- }
- #endif
-
--void QNetworkAccessManagerPrivate::clearCache(QNetworkAccessManager *manager)
-+void QNetworkAccessManagerPrivate::clearAuthenticationCache(QNetworkAccessManager *manager)
- {
-- manager->d_func()->objectCache.clear();
- manager->d_func()->authenticationManager->clearCache();
-+}
-
-+void QNetworkAccessManagerPrivate::clearConnectionCache(QNetworkAccessManager *manager)
-+{
-+ manager->d_func()->objectCache.clear();
- manager->d_func()->destroyThread();
- }
-
-diff --git x/qtbase/src/network/access/qnetworkaccessmanager.h y/qtbase/src/network/access/qnetworkaccessmanager.h
-index 4b8c4ddf0e..649013cced 100644
---- x/qtbase/src/network/access/qnetworkaccessmanager.h
-+++ y/qtbase/src/network/access/qnetworkaccessmanager.h
-@@ -106,6 +106,8 @@ public:
-
- void clearAccessCache();
-
-+ void clearConnectionCache();
-+
- #ifndef QT_NO_NETWORKPROXY
- QNetworkProxy proxy() const;
- void setProxy(const QNetworkProxy &proxy);
-diff --git x/qtbase/src/network/access/qnetworkaccessmanager_p.h y/qtbase/src/network/access/qnetworkaccessmanager_p.h
-index bb4641ab8b..b4b5e6a789 100644
---- x/qtbase/src/network/access/qnetworkaccessmanager_p.h
-+++ y/qtbase/src/network/access/qnetworkaccessmanager_p.h
-@@ -202,7 +202,8 @@ public:
- QNetworkAccessCache objectCache;
- static inline QNetworkAccessCache *getObjectCache(QNetworkAccessBackend *backend)
- { return &backend->manager->objectCache; }
-- Q_AUTOTEST_EXPORT static void clearCache(QNetworkAccessManager *manager);
-+ Q_AUTOTEST_EXPORT static void clearAuthenticationCache(QNetworkAccessManager *manager);
-+ Q_AUTOTEST_EXPORT static void clearConnectionCache(QNetworkAccessManager *manager);
- #ifndef QT_NO_BEARERMANAGEMENT
- Q_AUTOTEST_EXPORT static const QWeakPointer getNetworkSession(const QNetworkAccessManager *manager);
- #endif
-diff --git x/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp y/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
-index 649278d48b..c555cd8fa0 100644
---- x/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
-+++ y/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
-@@ -6797,7 +6797,8 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
- // QTBUG-23136 workaround (needed even with danted v1.1.19):
- if (proxy.port() == 1081) {
- #ifdef QT_BUILD_INTERNAL
-- QNetworkAccessManagerPrivate::clearCache(&manager);
-+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
-+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
- #else
- return;
- #endif
-diff --git x/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp y/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
-index 05ede9da99..99e3d148df 100644
---- x/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
-+++ y/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
-@@ -147,7 +147,8 @@ void tst_NetworkRemoteStressTest::init()
- void tst_NetworkRemoteStressTest::clearManager()
- {
- #ifdef QT_BUILD_INTERNAL
-- QNetworkAccessManagerPrivate::clearCache(&manager);
-+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
-+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
- manager.setProxy(QNetworkProxy());
- manager.setCache(0);
- #endif
-diff --git x/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp y/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
-index e3c76ea11b..d46703c671 100644
---- x/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
-+++ y/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
-@@ -138,7 +138,8 @@ void tst_NetworkStressTest::init()
- void tst_NetworkStressTest::clearManager()
- {
- #ifdef QT_BUILD_INTERNAL
-- QNetworkAccessManagerPrivate::clearCache(&manager);
-+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
-+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
- manager.setProxy(QNetworkProxy());
- manager.setCache(0);
- #endif
---
-2.11.0
-
diff --git a/patches/qt-Introduce-QNetworkAccessManager-useAuthenticationManagerFrom.patch b/patches/qt-Introduce-QNetworkAccessManager-useAuthenticationManagerFrom.patch
deleted file mode 100644
index 8c6a98f..0000000
--- a/patches/qt-Introduce-QNetworkAccessManager-useAuthenticationManagerFrom.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From e1ba5a3265be01d7d353bf82e4d8af331edbb434 Mon Sep 17 00:00:00 2001
-From: Lars Schmertmann
-Date: Tue, 13 Sep 2016 14:24:25 +0200
-Subject: Introduce QNetworkAccessManager::useAuthenticationManagerFrom
-
-Sometimes it is desirable to use a new connection but keep already
-entered user credentials for usability reasons. This is now possible by
-using the AuthenticationManager from a different NetworkAccessManager.
-
-[ChangeLog][QtCore][QNetworkAccessManager] Introduce useAuthenticationManagerFrom()
-
-Change-Id: If61f0d03fc8b2f159bad869d0a2b650170e1e174
----
- src/network/access/qnetworkaccessmanager.cpp | 15 +++++++++++++++
- src/network/access/qnetworkaccessmanager.h | 2 ++
- 2 files changed, 17 insertions(+)
-
-diff --git x/qtbase/src/network/access/qnetworkaccessmanager.cpp y/qtbase/src/network/access/qnetworkaccessmanager.cpp
-index b763547a15..83cb33ce72 100644
---- x/qtbase/src/network/access/qnetworkaccessmanager.cpp
-+++ y/qtbase/src/network/access/qnetworkaccessmanager.cpp
-@@ -1079,6 +1079,21 @@ void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port)
- }
-
- /*!
-+ \since 5.9
-+
-+ Sets the manager's authentication manager to be the one from
-+ \a accessManager. This is useful when you need to use a new connection,
-+ but keep already-entered user-credentials for usability reasons.
-+*/
-+void QNetworkAccessManager::useAuthenticationManagerFrom(const QNetworkAccessManager& accessManager)
-+{
-+ const QNetworkAccessManagerPrivate * const e = accessManager.d_func();
-+
-+ Q_D(QNetworkAccessManager);
-+ d->authenticationManager = e->authenticationManager;
-+}
-+
-+/*!
- \since 4.7
-
- Sends a custom request to the server identified by the URL of \a request.
-diff --git x/qtbase/src/network/access/qnetworkaccessmanager.h y/qtbase/src/network/access/qnetworkaccessmanager.h
-index 649013cced..24f3c7147c 100644
---- x/qtbase/src/network/access/qnetworkaccessmanager.h
-+++ y/qtbase/src/network/access/qnetworkaccessmanager.h
-@@ -149,6 +149,8 @@ public:
- #endif
- void connectToHost(const QString &hostName, quint16 port = 80);
-
-+ void useAuthenticationManagerFrom(const QNetworkAccessManager& accessManager);
-+
- Q_SIGNALS:
- #ifndef QT_NO_NETWORKPROXY
- void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
---
-2.11.0
-
diff --git a/patches/qt-Make-server-side-signature-algorithms-configurable.patch b/patches/qt-Make-server-side-signature-algorithms-configurable.patch
index 96675d4..7da685e 100644
--- a/patches/qt-Make-server-side-signature-algorithms-configurable.patch
+++ b/patches/qt-Make-server-side-signature-algorithms-configurable.patch
@@ -1,4 +1,4 @@
-From 992a338b639e4df6da16659dc238dbaae0ae802f Mon Sep 17 00:00:00 2001
+From b0404383ab573d7550a6564405bb9b1316ff193a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20L=C3=B6sch?=
Date: Thu, 21 Apr 2016 09:19:19 +0200
Subject: [PATCH] Make server side signature algorithms configurable
@@ -10,18 +10,17 @@ server side.
Change-Id: Ia178efd4778b91863fcc919bf50219115b300d77
---
- src/network/ssl/qsslconfiguration.cpp | 42 +++++++++++++
- src/network/ssl/qsslconfiguration.h | 8 ++-
- src/network/ssl/qsslconfiguration_p.h | 5 ++
- src/network/ssl/qsslcontext_openssl.cpp | 45 ++++++++++++++
- src/network/ssl/qsslcontext_openssl_p.h | 1 +
- src/network/ssl/qsslsocket.cpp | 2 +
- src/network/ssl/qsslsocket_openssl_symbols_p.h | 5 ++
- .../auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 70 ++++++++++++++++++++++
- 8 files changed, 177 insertions(+), 1 deletion(-)
+ src/network/ssl/qsslconfiguration.cpp | 42 ++++++++++++++++++++++++
+ src/network/ssl/qsslconfiguration.h | 8 ++++-
+ src/network/ssl/qsslconfiguration_p.h | 5 +++
+ src/network/ssl/qsslcontext_openssl.cpp | 45 ++++++++++++++++++++++++++
+ src/network/ssl/qsslcontext_openssl_p.h | 1 +
+ src/network/ssl/qsslsocket.cpp | 2 ++
+ src/network/ssl/qsslsocket_openssl_symbols_p.h | 5 +++
+ 7 files changed, 107 insertions(+), 1 deletion(-)
diff --git x/qtbase/src/network/ssl/qsslconfiguration.cpp y/qtbase/src/network/ssl/qsslconfiguration.cpp
-index 75a880f..37f99fe 100644
+index 75a880f115..37f99feef1 100644
--- x/qtbase/src/network/ssl/qsslconfiguration.cpp
+++ y/qtbase/src/network/ssl/qsslconfiguration.cpp
@@ -221,6 +221,7 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const
@@ -40,10 +39,11 @@ index 75a880f..37f99fe 100644
d->sslOptions == QSslConfigurationPrivate::defaultSslOptions &&
d->sslSession.isNull() &&
d->sslSessionTicketLifeTimeHint == -1 &&
-@@ -870,6 +872,46 @@ void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParame
+@@ -869,6 +871,46 @@ void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParame
+ d->dhParams = dhparams;
}
- /*!
++/*!
+ \since 5.9
+
+ Returns the connection's current list of supported signature
@@ -83,12 +83,11 @@ index 75a880f..37f99fe 100644
+ d->signatureAndHashAlgorithms = algorithms;
+}
+
-+/*!
+ /*!
\since 5.3
- This function returns the protocol negotiated with the server
diff --git x/qtbase/src/network/ssl/qsslconfiguration.h y/qtbase/src/network/ssl/qsslconfiguration.h
-index 1c57beb..4d3e512 100644
+index 1c57bebd65..4d3e5129d5 100644
--- x/qtbase/src/network/ssl/qsslconfiguration.h
+++ y/qtbase/src/network/ssl/qsslconfiguration.h
@@ -56,10 +56,13 @@
@@ -117,7 +116,7 @@ index 1c57beb..4d3e512 100644
static void setDefaultConfiguration(const QSslConfiguration &configuration);
diff --git x/qtbase/src/network/ssl/qsslconfiguration_p.h y/qtbase/src/network/ssl/qsslconfiguration_p.h
-index 6adf2c9..7be2539 100644
+index 6adf2c9b54..7be253973b 100644
--- x/qtbase/src/network/ssl/qsslconfiguration_p.h
+++ y/qtbase/src/network/ssl/qsslconfiguration_p.h
@@ -75,6 +75,9 @@
@@ -140,7 +139,7 @@ index 6adf2c9..7be2539 100644
int sslSessionTicketLifeTimeHint;
diff --git x/qtbase/src/network/ssl/qsslcontext_openssl.cpp y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
-index c92d8fc..29df53a 100644
+index c92d8fc3f8..29df53abc0 100644
--- x/qtbase/src/network/ssl/qsslcontext_openssl.cpp
+++ y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
@@ -42,6 +42,7 @@
@@ -210,7 +209,7 @@ index c92d8fc..29df53a 100644
QSslContext* QSslContext::fromConfiguration(QSslSocket::SslMode mode, const QSslConfiguration &configuration, bool allowRootCertOnDemandLoading)
diff --git x/qtbase/src/network/ssl/qsslcontext_openssl_p.h y/qtbase/src/network/ssl/qsslcontext_openssl_p.h
-index 06a31af..c8c8e194 100644
+index 06a31af5e5..c8c8e1941b 100644
--- x/qtbase/src/network/ssl/qsslcontext_openssl_p.h
+++ y/qtbase/src/network/ssl/qsslcontext_openssl_p.h
@@ -54,6 +54,7 @@
@@ -222,7 +221,7 @@ index 06a31af..c8c8e194 100644
#include
#include
diff --git x/qtbase/src/network/ssl/qsslsocket.cpp y/qtbase/src/network/ssl/qsslsocket.cpp
-index 29e1f32..8257112 100644
+index 8eba5db9fe..c0aa8b9bdf 100644
--- x/qtbase/src/network/ssl/qsslsocket.cpp
+++ y/qtbase/src/network/ssl/qsslsocket.cpp
@@ -922,6 +922,7 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)
@@ -233,7 +232,7 @@ index 29e1f32..8257112 100644
d->configuration.sslOptions = configuration.d->sslOptions;
d->configuration.sslSession = configuration.sessionTicket();
d->configuration.sslSessionTicketLifeTimeHint = configuration.sessionTicketLifeTimeHint();
-@@ -2230,6 +2231,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
+@@ -2249,6 +2250,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
ptr->peerVerifyDepth = global->peerVerifyDepth;
ptr->sslOptions = global->sslOptions;
ptr->ellipticCurves = global->ellipticCurves;
@@ -242,7 +241,7 @@ index 29e1f32..8257112 100644
/*!
diff --git x/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h y/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
-index b35a895..d4cd493 100644
+index b35a895d38..d4cd493c45 100644
--- x/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
+++ y/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -517,6 +517,11 @@ int q_EC_curve_nist2nid(const char *name);
@@ -257,94 +256,6 @@ index b35a895..d4cd493 100644
// PKCS#12 support
int q_PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca);
PKCS12 *q_d2i_PKCS12_bio(BIO *bio, PKCS12 **pkcs12);
-diff --git x/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp y/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
-index 4eb26d1..79a55cc 100644
---- x/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
-+++ y/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
-@@ -236,6 +236,8 @@ private slots:
- void ephemeralServerKey();
- void allowedProtocolNegotiation();
- void pskServer();
-+ void signatureAlgorithm_data();
-+ void signatureAlgorithm();
- #endif
-
- void setEmptyDefaultConfiguration(); // this test should be last
-@@ -3744,6 +3746,74 @@ void tst_QSslSocket::pskServer()
- QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState);
- QCOMPARE(disconnectedSpy.count(), 1);
- }
-+using SigAlgPair = QPair;
-+Q_DECLARE_METATYPE(QCryptographicHash::Algorithm);
-+Q_DECLARE_METATYPE(QSsl::KeyAlgorithm);
-+Q_DECLARE_METATYPE(SigAlgPair);
-+
-+void tst_QSslSocket::signatureAlgorithm_data()
-+{
-+ QTest::addColumn("serverSigAlgPair");
-+ QTest::addColumn("serverProtocol");
-+ QTest::addColumn("clientSigAlgPair");
-+ QTest::addColumn("clientProtocol");
-+ QTest::addColumn("state");
-+
-+ auto rsaSha256 = SigAlgPair(QSsl::Rsa, QCryptographicHash::Sha256);
-+ auto rsaSha512 = SigAlgPair(QSsl::Rsa, QCryptographicHash::Sha512);
-+ auto ecdsaSha512= SigAlgPair(QSsl::Ec, QCryptographicHash::Sha512);
-+
-+ QTest::newRow("match_TlsV1_2") << rsaSha256 << QSsl::TlsV1_2 << rsaSha256 << QSsl::AnyProtocol << QAbstractSocket::ConnectedState;
-+ QTest::newRow("no_hashalg_match_TlsV1_2") << rsaSha256 << QSsl::TlsV1_2 << rsaSha512 << QSsl::AnyProtocol << QAbstractSocket::UnconnectedState;
-+ QTest::newRow("no_sigalg_match_TlsV1_2") << ecdsaSha512 << QSsl::TlsV1_2 << rsaSha512 << QSsl::AnyProtocol << QAbstractSocket::UnconnectedState;
-+ QTest::newRow("no_cipher_match_AnyProtocol") << rsaSha512 << QSsl::TlsV1_2 << ecdsaSha512 << QSsl::AnyProtocol << QAbstractSocket::UnconnectedState;
-+
-+ // signature algorithms do not match, but are ignored because the tls version is not v1.2
-+ QTest::newRow("client_ignore_TlsV1_1") << rsaSha256 << QSsl::TlsV1_1 << rsaSha512 << QSsl::AnyProtocol << QAbstractSocket::ConnectedState;
-+ QTest::newRow("server_ignore_TlsV1_1") << rsaSha256 << QSsl::AnyProtocol << rsaSha512 << QSsl::TlsV1_1 << QAbstractSocket::ConnectedState;
-+ QTest::newRow("client_ignore_TlsV1_0") << rsaSha256 << QSsl::TlsV1_0 << rsaSha512 << QSsl::AnyProtocol << QAbstractSocket::ConnectedState;
-+ QTest::newRow("server_ignore_TlsV1_0") << rsaSha256 << QSsl::AnyProtocol << rsaSha512 << QSsl::TlsV1_0 << QAbstractSocket::ConnectedState;
-+}
-+
-+
-+void tst_QSslSocket::signatureAlgorithm()
-+{
-+ QFETCH_GLOBAL(bool, setProxy);
-+ if (!QSslSocket::supportsSsl() || setProxy)
-+ return;
-+
-+ QFETCH(SigAlgPair, serverSigAlgPair);
-+ QFETCH(QSsl::SslProtocol, serverProtocol);
-+ QFETCH(SigAlgPair, clientSigAlgPair);
-+ QFETCH(QSsl::SslProtocol, clientProtocol);
-+ QFETCH(QAbstractSocket::SocketState, state);
-+
-+
-+ SslServer server;
-+ server.protocol = serverProtocol;
-+ server.config.setCiphers({QSslCipher("ECDHE-RSA-AES256-SHA")});
-+ server.config.setSignatureAndHashAlgorithms({serverSigAlgPair});
-+ QVERIFY(server.listen());
-+
-+ QSslConfiguration clientConfig = QSslConfiguration::defaultConfiguration();
-+ clientConfig.setSignatureAndHashAlgorithms({clientSigAlgPair});
-+ clientConfig.setProtocol(clientProtocol);
-+ QSslSocket client;
-+ client.setSslConfiguration(clientConfig);
-+ socket = &client;
-+
-+ QEventLoop loop;
-+ QTimer::singleShot(5000, &loop, SLOT(quit()));
-+ connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit()));
-+ connect(socket, SIGNAL(sslErrors(QList)), this, SLOT(ignoreErrorSlot()));
-+ connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit()));
-+
-+
-+ client.connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(), server.serverPort());
-+ loop.exec();
-+ QCOMPARE(client.state(), state);
-+}
-+
-
- #endif // QT_NO_OPENSSL
-
--
-2.10.2
+2.15.0
diff --git a/patches/qt-Make-variant-selection-possible-if-base-is-missing.patch b/patches/qt-Make-variant-selection-possible-if-base-is-missing.patch
deleted file mode 100644
index 93aec2a..0000000
--- a/patches/qt-Make-variant-selection-possible-if-base-is-missing.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From a3a86b6b4acb210392d0aa0aad555f7afb455e0b Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Sebastian=20L=C3=B6sch?=
-Date: Tue, 1 Nov 2016 11:16:32 +0100
-Subject: Make variant selection possible if base is missing
-
-[ChangeLog][QtCore][QFileSelector] Removed the requirement for an unused
-default base file in case you want to load only a variant.
-
-When the base file (e.g. /image.jpg) was missing, no selectors were
-considered and it was not possible to load variants of this file (e.g.
-/+android/image.jpg, /+android/+tablet/image.jpg) without specifying the
-directory as well.
-
-As a work around, one previously had to place a default file in
-the base location, which is undesirable in some cases because:
-1. The extra file consumes unnecessary space.
-2. It is impossible to encapsulate platform-specific implementation
- details by hiding files in a subdirectory.
-
-Task-number: QTBUG-51230
-Change-Id: I4c7f9ec952bff6e5b7738d8cabe3c762c208a38e
----
- src/corelib/io/qfileselector.cpp | 9 +++------
- tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp | 2 +-
- 2 files changed, 4 insertions(+), 7 deletions(-)
-
-diff --git x/qtbase/src/corelib/io/qfileselector.cpp y/qtbase/src/corelib/io/qfileselector.cpp
-index 920281cef7..b48b3e1162 100644
---- x/qtbase/src/corelib/io/qfileselector.cpp
-+++ y/qtbase/src/corelib/io/qfileselector.cpp
-@@ -133,9 +133,9 @@ QFileSelectorPrivate::QFileSelectorPrivate()
- With those files available, you would select a different file on the android platform,
- but only if the locale was en_GB.
-
-- QFileSelector will not attempt to select if the base file does not exist. For error handling in
-- the case no valid selectors are present, it is recommended to have a default or error-handling
-- file in the base file location even if you expect selectors to be present for all deployments.
-+ For error handling in the case no valid selectors are present, it is recommended to have a default or
-+ error-handling file in the base file location even if you expect selectors to be present for all
-+ deployments.
-
- In a future version, some may be marked as deploy-time static and be moved during the
- deployment step as an optimization. As selectors come with a performance cost, it is
-@@ -298,9 +298,6 @@ QString QFileSelectorPrivate::select(const QString &filePath) const
- {
- Q_Q(const QFileSelector);
- QFileInfo fi(filePath);
-- // If file doesn't exist, don't select
-- if (!fi.exists())
-- return filePath;
-
- QString ret = selectionHelper(fi.path().isEmpty() ? QString() : fi.path() + QLatin1Char('/'),
- fi.fileName(), q->allSelectors());
-diff --git x/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp y/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
-index e5ede1ad06..8c2886f337 100644
---- x/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
-+++ y/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
-@@ -138,7 +138,7 @@ void tst_QFileSelector::basicTest_data()
- << QString(":/extras/test2");
-
- QTest::newRow("custom1-withselector-nobasefile") << QString(":/extras/test3") << (QStringList() << custom1)
-- << QString(":/extras/test3");
-+ << QString(":/extras/+custom1/test3");
-
- QString custom2("custom2");
- QString custom3("custom3");
---
-2.11.0
-
diff --git a/patches/qt-QNearfieldTarget-Introduce-set-keepConnection-and-disconnect.patch b/patches/qt-QNearfieldTarget-Introduce-set-keepConnection-and-disconnect.patch
deleted file mode 100644
index b66b7cb..0000000
--- a/patches/qt-QNearfieldTarget-Introduce-set-keepConnection-and-disconnect.patch
+++ /dev/null
@@ -1,681 +0,0 @@
-From 0d81394307262f386e9e7d05b37f373c6e64066d Mon Sep 17 00:00:00 2001
-From: Lars Schmertmann
-Date: Thu, 5 Jan 2017 13:43:57 +0100
-Subject: QNearfieldTarget: Introduce (set)keepConnection() and disconnect()
-
-For the communication with a German ID card its required to execute
-several commands in a row, whereby a state is generated. Every command
-works on the state created by the command before. Depending on the
-Android version the state gets lost when the connection is closed.
-
-With this change it is possible to keep the connection as long as needed
-and close it manually. Because of backward compatibility the connection
-is created and closed automatically by default. With the use of
-setKeepConnection(true) the communication with the target is also a
-lot of faster.
-
-[ChangeLog][QNearfieldTarget] Introduce (set)keepConnection() and
-disconnect() to keep the state of a target and speed up communication.
-
-Change-Id: I5778c9bdaf04cfeae78b3222bef4475f4cd7c436
----
- src/nfc/qnearfieldtarget.cpp | 46 ++++++
- src/nfc/qnearfieldtarget.h | 4 +
- src/nfc/qnearfieldtarget_android.cpp | 252 ++++++++++++++++++++-------------
- src/nfc/qnearfieldtarget_android_p.cpp | 20 ++-
- src/nfc/qnearfieldtarget_android_p.h | 8 ++
- src/nfc/qnearfieldtarget_neard_p.cpp | 15 ++
- src/nfc/qnearfieldtarget_p.cpp | 16 +++
- src/nfc/qnearfieldtarget_p.h | 5 +
- 8 files changed, 265 insertions(+), 101 deletions(-)
-
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-index 274ef175..4477d74b 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
-@@ -319,6 +319,52 @@ QUrl QNearFieldTarget::url() const
- */
-
- /*!
-+ \since 5.9
-+
-+ Returns true if this feature is enabled.
-+
-+ \sa setKeepConnection(), disconnect()
-+*/
-+bool QNearFieldTarget::keepConnection() const
-+{
-+ return d_ptr->keepConnection();
-+}
-+
-+/*!
-+ \since 5.9
-+
-+ Causes QNearFieldTarget to keep the connection after processing a command
-+ or reading/writing NDEF messages. A call of this function is only needed once.
-+
-+ Returns true if enabling this feature was successful. A possible
-+ reason for a failure is the lack of support on the used platform.
-+
-+ Enabling this feature requires to use the disconnect() function too, to close the
-+ connection manually and enable communication with the target from a different instance.
-+ Disabling this feature will also close an open connection.
-+
-+ \sa keepConnection(), disconnect()
-+*/
-+bool QNearFieldTarget::setKeepConnection(bool isPersistent)
-+{
-+ return d_ptr->setKeepConnection(isPersistent);
-+}
-+
-+/*!
-+ \since 5.9
-+
-+ Closes the connection to the target.
-+
-+ Returns true only if an existing connection was successfully closed.
-+
-+ \sa keepConnection(), setKeepConnection()
-+*/
-+bool QNearFieldTarget::disconnect()
-+{
-+ return d_ptr->disconnect();
-+}
-+
-+/*!
- Returns true if the target is processing commands; otherwise returns false.
- */
- bool QNearFieldTarget::isProcessingCommand() const
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
-index 620ea813..19d87e96 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget.h
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
-@@ -126,6 +126,10 @@ public:
- virtual Type type() const = 0;
- virtual AccessMethods accessMethods() const = 0;
-
-+ bool keepConnection() const;
-+ bool setKeepConnection(bool isPersistent);
-+ bool disconnect();
-+
- bool isProcessingCommand() const;
-
- // NdefAccess
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-index f41b0b2e..04718fc5 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
-@@ -41,26 +41,27 @@
- #include "android/androidjninfc_p.h"
- #include "qdebug.h"
-
--#define NDEFTECHNOLOGY "android.nfc.tech.Ndef"
--#define NDEFFORMATABLETECHNOLOGY "android.nfc.tech.NdefFormatable"
--#define ISODEPTECHNOLOGY "android.nfc.tech.IsoDep"
--#define NFCATECHNOLOGY "android.nfc.tech.NfcA"
--#define NFCBTECHNOLOGY "android.nfc.tech.NfcB"
--#define NFCFTECHNOLOGY "android.nfc.tech.NfcF"
--#define NFCVTECHNOLOGY "android.nfc.tech.NfcV"
--#define MIFARECLASSICTECHNOLOGY "android.nfc.tech.MifareClassic"
--#define MIFARECULTRALIGHTTECHNOLOGY "android.nfc.tech.MifareUltralight"
--
--#define MIFARETAG "com.nxp.ndef.mifareclassic"
--#define NFCTAGTYPE1 "org.nfcforum.ndef.type1"
--#define NFCTAGTYPE2 "org.nfcforum.ndef.type2"
--#define NFCTAGTYPE3 "org.nfcforum.ndef.type3"
--#define NFCTAGTYPE4 "org.nfcforum.ndef.type4"
-+#define NDEFTECHNOLOGY QStringLiteral("android.nfc.tech.Ndef")
-+#define NDEFFORMATABLETECHNOLOGY QStringLiteral("android.nfc.tech.NdefFormatable")
-+#define ISODEPTECHNOLOGY QStringLiteral("android.nfc.tech.IsoDep")
-+#define NFCATECHNOLOGY QStringLiteral("android.nfc.tech.NfcA")
-+#define NFCBTECHNOLOGY QStringLiteral("android.nfc.tech.NfcB")
-+#define NFCFTECHNOLOGY QStringLiteral("android.nfc.tech.NfcF")
-+#define NFCVTECHNOLOGY QStringLiteral("android.nfc.tech.NfcV")
-+#define MIFARECLASSICTECHNOLOGY QStringLiteral("android.nfc.tech.MifareClassic")
-+#define MIFARECULTRALIGHTTECHNOLOGY QStringLiteral("android.nfc.tech.MifareUltralight")
-+
-+#define MIFARETAG QStringLiteral("com.nxp.ndef.mifareclassic")
-+#define NFCTAGTYPE1 QStringLiteral("org.nfcforum.ndef.type1")
-+#define NFCTAGTYPE2 QStringLiteral("org.nfcforum.ndef.type2")
-+#define NFCTAGTYPE3 QStringLiteral("org.nfcforum.ndef.type3")
-+#define NFCTAGTYPE4 QStringLiteral("org.nfcforum.ndef.type4")
-
- NearFieldTarget::NearFieldTarget(QAndroidJniObject intent, const QByteArray uid, QObject *parent) :
- QNearFieldTarget(parent),
- m_intent(intent),
-- m_uid(uid)
-+ m_uid(uid),
-+ m_keepConnection(false)
- {
- updateTechList();
- updateType();
-@@ -87,23 +88,54 @@ QNearFieldTarget::AccessMethods NearFieldTarget::accessMethods() const
- {
- AccessMethods result = UnknownAccess;
-
-- if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))
-- || m_techList.contains(QStringLiteral(NDEFFORMATABLETECHNOLOGY)))
-+ if (m_techList.contains(NDEFTECHNOLOGY)
-+ || m_techList.contains(NDEFFORMATABLETECHNOLOGY))
- result |= NdefAccess;
-
-- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))
-- || m_techList.contains(QStringLiteral(NFCATECHNOLOGY))
-- || m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))
-- || m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))
-- || m_techList.contains(QStringLiteral(NFCVTECHNOLOGY)))
-+ if (m_techList.contains(ISODEPTECHNOLOGY)
-+ || m_techList.contains(NFCATECHNOLOGY)
-+ || m_techList.contains(NFCBTECHNOLOGY)
-+ || m_techList.contains(NFCFTECHNOLOGY)
-+ || m_techList.contains(NFCVTECHNOLOGY))
- result |= TagTypeSpecificAccess;
-
- return result;
- }
-
-+bool NearFieldTarget::keepConnection() const
-+{
-+ return m_keepConnection;
-+}
-+
-+bool NearFieldTarget::setKeepConnection(bool isPersistent)
-+{
-+ m_keepConnection = isPersistent;
-+
-+ if (!m_keepConnection)
-+ disconnect();
-+
-+ return true;
-+}
-+
-+bool NearFieldTarget::disconnect()
-+{
-+ if (!m_tagTech.isValid())
-+ return false;
-+
-+ bool connected = m_tagTech.callMethod("isConnected");
-+ if (catchJavaExceptions())
-+ return false;
-+
-+ if (!connected)
-+ return false;
-+
-+ m_tagTech.callMethod("close");
-+ return !catchJavaExceptions();
-+}
-+
- bool NearFieldTarget::hasNdefMessage()
- {
-- return m_techList.contains(QStringLiteral(NDEFTECHNOLOGY));
-+ return m_techList.contains(NDEFTECHNOLOGY);
- }
-
- QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
-@@ -122,8 +154,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
- }
-
- // Getting Ndef technology object
-- QAndroidJniObject ndef = getTagTechnology(QStringLiteral(NDEFTECHNOLOGY));
-- if (!ndef.isValid()) {
-+ if (!setTagTechnology({NDEFTECHNOLOGY})) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnsupportedError),
- Q_ARG(const QNearFieldTarget::RequestId&, requestId));
-@@ -131,8 +162,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
- }
-
- // Connect
-- ndef.callMethod("connect");
-- if (catchJavaExceptions()) {
-+ if (!connect()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
- Q_ARG(const QNearFieldTarget::RequestId&, requestId));
-@@ -140,7 +170,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
- }
-
- // Get NdefMessage object
-- QAndroidJniObject ndefMessage = ndef.callObjectMethod("getNdefMessage", "()Landroid/nfc/NdefMessage;");
-+ QAndroidJniObject ndefMessage = m_tagTech.callObjectMethod("getNdefMessage", "()Landroid/nfc/NdefMessage;");
- if (catchJavaExceptions())
- ndefMessage = QAndroidJniObject();
- if (!ndefMessage.isValid()) {
-@@ -154,9 +184,10 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
- QAndroidJniObject ndefMessageBA = ndefMessage.callObjectMethod("toByteArray", "()[B");
- QByteArray ndefMessageQBA = jbyteArrayToQByteArray(ndefMessageBA.object());
-
-- // Closing connection
-- ndef.callMethod("close");
-- catchJavaExceptions(); // IOException at this point does not matter anymore.
-+ if (!m_keepConnection) {
-+ // Closing connection
-+ disconnect(); // IOException at this point does not matter anymore.
-+ }
-
- // Sending QNdefMessage, requestCompleted and exit.
- QNdefMessage qNdefMessage = QNdefMessage::fromByteArray(ndefMessageQBA);
-@@ -173,24 +204,22 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
- int NearFieldTarget::maxCommandLength() const
- {
- QAndroidJniObject tagTech;
-- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
-- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
-- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
-- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
-- } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
-- } else {
-+ if (m_techList.contains(ISODEPTECHNOLOGY))
-+ tagTech = getTagTechnology(ISODEPTECHNOLOGY);
-+ else if (m_techList.contains(NFCATECHNOLOGY))
-+ tagTech = getTagTechnology(NFCATECHNOLOGY);
-+ else if (m_techList.contains(NFCBTECHNOLOGY))
-+ tagTech = getTagTechnology(NFCBTECHNOLOGY);
-+ else if (m_techList.contains(NFCFTECHNOLOGY))
-+ tagTech = getTagTechnology(NFCFTECHNOLOGY);
-+ else if (m_techList.contains(NFCVTECHNOLOGY))
-+ tagTech = getTagTechnology(NFCVTECHNOLOGY);
-+ else
- return 0;
-- }
-
- int returnVal = tagTech.callMethod("getMaxTransceiveLength");
-- if (catchJavaExceptions()) {
-+ if (catchJavaExceptions())
- return 0;
-- }
-
- return returnVal;
- }
-@@ -208,26 +237,14 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
-
- QAndroidJniEnvironment env;
-
-- QAndroidJniObject tagTech;
-- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
-- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
-- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
-- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
-- } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
-- tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
-- } else {
-+ if (!setTagTechnology({ISODEPTECHNOLOGY, NFCATECHNOLOGY, NFCBTECHNOLOGY, NFCFTECHNOLOGY, NFCVTECHNOLOGY})) {
- Q_EMIT QNearFieldTarget::error(QNearFieldTarget::UnsupportedError, QNearFieldTarget::RequestId());
- return QNearFieldTarget::RequestId();
- }
-
- // Connecting
- QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
-- tagTech.callMethod("connect");
-- if (catchJavaExceptions()) {
-+ if (!connect()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
- Q_ARG(const QNearFieldTarget::RequestId&, requestId));
-@@ -240,7 +257,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
- env->SetByteArrayRegion(jba, 0, ba.size(), reinterpret_cast(ba.data()));
-
- // Writing
-- QAndroidJniObject myNewVal = tagTech.callObjectMethod("transceive", "([B)[B", jba);
-+ QAndroidJniObject myNewVal = m_tagTech.callObjectMethod("transceive", "([B)[B", jba);
- if (catchJavaExceptions()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
-@@ -252,9 +269,10 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
-
- handleResponse(requestId, result);
-
-- // Closing connection, sending signal and exit
-- tagTech.callMethod("close");
-- catchJavaExceptions(); // IOException at this point does not matter anymore.
-+ if (!m_keepConnection) {
-+ // Closing connection
-+ disconnect(); // IOException at this point does not matter anymore.
-+ }
- QMetaObject::invokeMethod(this, "requestCompleted", Qt::QueuedConnection,
- Q_ARG(const QNearFieldTarget::RequestId&, requestId));
-
-@@ -264,9 +282,8 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
- QNearFieldTarget::RequestId NearFieldTarget::sendCommands(const QList &commands)
- {
- QNearFieldTarget::RequestId requestId;
-- for (int i=0; i < commands.size(); i++){
-+ for (int i=0; i < commands.size(); i++)
- requestId = sendCommand(commands.at(i));
-- }
- return requestId;
- }
-
-@@ -282,22 +299,18 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList("connect");
-- if (catchJavaExceptions()) {
-+ if (!connect()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
- Q_ARG(const QNearFieldTarget::RequestId&, requestId));
-@@ -326,9 +339,8 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList("close");
-- catchJavaExceptions(); // IOException at this point does not matter anymore.
-+ if (!m_keepConnection)
-+ disconnect(); // IOException at this point does not matter anymore.
- QMetaObject::invokeMethod(this, "ndefMessagesWritten", Qt::QueuedConnection);
- return requestId;
- }
-@@ -350,19 +362,26 @@ void NearFieldTarget::setIntent(QAndroidJniObject intent)
-
- void NearFieldTarget::checkIsTargetLost()
- {
-- if (!m_intent.isValid() || m_techList.isEmpty()) {
-+ if (!m_intent.isValid() || !setTagTechnology(m_techList)) {
- handleTargetLost();
- return;
- }
-- // Using first available technology to check connection
-- QString techStr = m_techList.first();
-- QAndroidJniObject tagTech = getTagTechnology(techStr);
-- tagTech.callMethod("connect");
-+
-+ bool connected = m_tagTech.callMethod("isConnected");
-+ if (catchJavaExceptions()) {
-+ handleTargetLost();
-+ return;
-+ }
-+
-+ if (connected)
-+ return;
-+
-+ m_tagTech.callMethod("connect");
- if (catchJavaExceptions(false)) {
- handleTargetLost();
- return;
- }
-- tagTech.callMethod("close");
-+ m_tagTech.callMethod("close");
- if (catchJavaExceptions(false))
- handleTargetLost();
- }
-@@ -406,28 +425,28 @@ QNearFieldTarget::Type NearFieldTarget::getTagType() const
- {
- QAndroidJniEnvironment env;
-
-- if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))) {
-- QAndroidJniObject ndef = getTagTechnology(QStringLiteral(NDEFTECHNOLOGY));
-+ if (m_techList.contains(NDEFTECHNOLOGY)) {
-+ QAndroidJniObject ndef = getTagTechnology(NDEFTECHNOLOGY);
- QString qtype = ndef.callObjectMethod("getType", "()Ljava/lang/String;").toString();
-
-- if (qtype.compare(QStringLiteral(MIFARETAG)) == 0)
-+ if (qtype.compare(MIFARETAG) == 0)
- return MifareTag;
-- if (qtype.compare(QStringLiteral(NFCTAGTYPE1)) == 0)
-+ if (qtype.compare(NFCTAGTYPE1) == 0)
- return NfcTagType1;
-- if (qtype.compare(QStringLiteral(NFCTAGTYPE2)) == 0)
-+ if (qtype.compare(NFCTAGTYPE2) == 0)
- return NfcTagType2;
-- if (qtype.compare(QStringLiteral(NFCTAGTYPE3)) == 0)
-+ if (qtype.compare(NFCTAGTYPE3) == 0)
- return NfcTagType3;
-- if (qtype.compare(QStringLiteral(NFCTAGTYPE4)) == 0)
-+ if (qtype.compare(NFCTAGTYPE4) == 0)
- return NfcTagType4;
- return ProprietaryTag;
-- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
-- if (m_techList.contains(QStringLiteral(MIFARECLASSICTECHNOLOGY)))
-+ } else if (m_techList.contains(NFCATECHNOLOGY)) {
-+ if (m_techList.contains(MIFARECLASSICTECHNOLOGY))
- return MifareTag;
-
- // Checking ATQA/SENS_RES
- // xxx0 0000 xxxx xxxx: Identifies tag Type 1 platform
-- QAndroidJniObject nfca = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
-+ QAndroidJniObject nfca = getTagTechnology(NFCATECHNOLOGY);
- QAndroidJniObject atqaBA = nfca.callObjectMethod("getAtqa", "()[B");
- QByteArray atqaQBA = jbyteArrayToQByteArray(atqaBA.object());
- if (atqaQBA.isEmpty())
-@@ -444,9 +463,9 @@ QNearFieldTarget::Type NearFieldTarget::getTagType() const
- else if ((sakS & 0x0064) == 0x0020)
- return NfcTagType4;
- return ProprietaryTag;
-- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
-+ } else if (m_techList.contains(NFCBTECHNOLOGY)) {
- return NfcTagType4;
-- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
-+ } else if (m_techList.contains(NFCFTECHNOLOGY)) {
- return NfcTagType3;
- }
-
-@@ -457,7 +476,7 @@ void NearFieldTarget::setupTargetCheckTimer()
- {
- m_targetCheckTimer = new QTimer(this);
- m_targetCheckTimer->setInterval(1000);
-- connect(m_targetCheckTimer, SIGNAL(timeout()), this, SLOT(checkIsTargetLost()));
-+ QObject::connect(m_targetCheckTimer, &QTimer::timeout, this, &NearFieldTarget::checkIsTargetLost);
- m_targetCheckTimer->start();
- }
-
-@@ -475,9 +494,42 @@ QAndroidJniObject NearFieldTarget::getTagTechnology(const QString &tech) const
- // Getting requested technology
- QAndroidJniObject tag = AndroidNfc::getTag(m_intent);
- const QString sig = QString::fromUtf8("(Landroid/nfc/Tag;)L%1;");
-- QAndroidJniObject tagtech = QAndroidJniObject::callStaticObjectMethod(techClass.toUtf8().constData(), "get",
-+ QAndroidJniObject tagTech = QAndroidJniObject::callStaticObjectMethod(techClass.toUtf8().constData(), "get",
- sig.arg(techClass).toUtf8().constData(), tag.object());
-- return tagtech;
-+
-+ return tagTech;
-+}
-+
-+bool NearFieldTarget::setTagTechnology(const QStringList &techList)
-+{
-+ for (const QString &tech : techList) {
-+ if (m_techList.contains(tech)) {
-+ if (m_tech == tech) {
-+ return true;
-+ }
-+ m_tech = tech;
-+ m_tagTech = getTagTechnology(tech);
-+ return m_tagTech.isValid();
-+ }
-+ }
-+
-+ return false;
-+}
-+
-+bool NearFieldTarget::connect()
-+{
-+ if (!m_tagTech.isValid())
-+ return false;
-+
-+ bool connected = m_tagTech.callMethod("isConnected");
-+ if (catchJavaExceptions())
-+ return false;
-+
-+ if (connected)
-+ return true;
-+
-+ m_tagTech.callMethod("connect");
-+ return !catchJavaExceptions();
- }
-
- QByteArray NearFieldTarget::jbyteArrayToQByteArray(const jbyteArray &byteArray) const
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
-index da2d8f2d..de553ea9 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
-@@ -44,9 +44,27 @@
-
- QT_BEGIN_NAMESPACE
-
-+bool QNearFieldTargetPrivate::keepConnection() const
-+{
-+ NEARFIELDTARGET_Q();
-+ return q->keepConnection();
-+}
-+
-+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
-+{
-+ NEARFIELDTARGET_Q();
-+ return q->setKeepConnection(isPersistent);
-+}
-+
-+bool QNearFieldTargetPrivate::disconnect()
-+{
-+ NEARFIELDTARGET_Q();
-+ return q->disconnect();
-+}
-+
- int QNearFieldTargetPrivate::maxCommandLength() const
- {
-- NearFieldTarget * const q = reinterpret_cast(q_ptr);
-+ NEARFIELDTARGET_Q();
- return q->maxCommandLength();
- }
-
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
-index f2e2ee7f..0063e9a5 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
-@@ -75,6 +75,9 @@ public:
- virtual QByteArray uid() const;
- virtual Type type() const;
- virtual AccessMethods accessMethods() const;
-+ bool keepConnection() const;
-+ bool setKeepConnection(bool isPersistent);
-+ bool disconnect();
- virtual bool hasNdefMessage();
- virtual RequestId readNdefMessages();
- int maxCommandLength() const;
-@@ -99,6 +102,8 @@ protected:
- void setupTargetCheckTimer();
- void handleTargetLost();
- QAndroidJniObject getTagTechnology(const QString &tech) const;
-+ bool setTagTechnology(const QStringList &techList);
-+ bool connect();
- QByteArray jbyteArrayToQByteArray(const jbyteArray &byteArray) const;
- bool catchJavaExceptions(bool verbose = true) const;
-
-@@ -108,6 +113,9 @@ protected:
- QStringList m_techList;
- Type m_type;
- QTimer *m_targetCheckTimer;
-+ QString m_tech;
-+ QAndroidJniObject m_tagTech;
-+ bool m_keepConnection;
- };
-
- QT_END_NAMESPACE
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
-index 3d1bfa6c..411b80d5 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
-@@ -44,6 +44,21 @@
-
- QT_BEGIN_NAMESPACE
-
-+bool QNearFieldTargetPrivate::keepConnection() const
-+{
-+ return false;
-+}
-+
-+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
-+{
-+ return false;
-+}
-+
-+bool QNearFieldTargetPrivate::disconnect()
-+{
-+ return false;
-+}
-+
- int QNearFieldTargetPrivate::maxCommandLength() const
- {
- return 0;
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
-index 3d1bfa6c..4ed17a15 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
-@@ -44,6 +44,22 @@
-
- QT_BEGIN_NAMESPACE
-
-+bool QNearFieldTargetPrivate::keepConnection() const
-+{
-+ return false;
-+}
-+
-+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
-+{
-+ Q_UNUSED(isPersistent);
-+ return false;
-+}
-+
-+bool QNearFieldTargetPrivate::disconnect()
-+{
-+ return false;
-+}
-+
- int QNearFieldTargetPrivate::maxCommandLength() const
- {
- return 0;
-diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
-index 9b2ed480..9cef2f55 100644
---- x/qtconnectivity/src/nfc/qnearfieldtarget_p.h
-+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
-@@ -59,6 +59,8 @@
- #include
- #include
-
-+#define NEARFIELDTARGET_Q() NearFieldTarget * const q = reinterpret_cast(q_ptr)
-+
- QT_BEGIN_NAMESPACE
-
- class QNearFieldTarget::RequestIdPrivate : public QSharedData
-@@ -75,6 +77,9 @@ public:
-
- QMap m_decodedResponses;
-
-+ bool keepConnection() const;
-+ bool setKeepConnection(bool isPersistent);
-+ bool disconnect();
- int maxCommandLength() const;
- };
-
---
-2.11.0
-
diff --git a/patches/qt-Register-additional-meta-types.patch b/patches/qt-Register-additional-meta-types.patch
new file mode 100644
index 0000000..047614f
--- /dev/null
+++ b/patches/qt-Register-additional-meta-types.patch
@@ -0,0 +1,123 @@
+From 3885257e655cefd1f8b18247aff76020c75379e1 Mon Sep 17 00:00:00 2001
+From: Lars Schmertmann
+Date: Fri, 24 Mar 2017 11:20:14 +0100
+Subject: [PATCH] Register additional meta types
+
+Register QLowEnergyCharacteristic and QLowEnergyDescriptor
+as meta types because they are used in signals.
+
+[ChangeLog][QtBluetooth] Register QLowEnergyCharacteristic
+and QLowEnergyDescriptor as meta types. It is therefore
+necessary to declare them as meta types in the header files.
+This commit will cause conflicts with existing meta type
+declarations in applications using Qt. These declarations
+need to be removed.
+
+Change-Id: I18f33b1b2f159cffd6efbacc37178286b86a06e0
+Reviewed-by: Alex Blasche
+---
+ src/bluetooth/osx/osxbtcentralmanager.mm | 2 --
+ src/bluetooth/qlowenergycharacteristic.h | 2 ++
+ src/bluetooth/qlowenergycontroller_p.h | 5 -----
+ src/bluetooth/qlowenergydescriptor.h | 2 ++
+ src/bluetooth/qlowenergyservice.cpp | 2 ++
+ .../test/tst_qlowenergycontroller-gattserver.cpp | 4 ----
+ tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp | 3 ---
+ 7 files changed, 6 insertions(+), 14 deletions(-)
+
+diff --git x/qtconnectivity/src/bluetooth/osx/osxbtcentralmanager.mm y/qtconnectivity/src/bluetooth/osx/osxbtcentralmanager.mm
+index ec046d1b..70473f1f 100644
+--- x/qtconnectivity/src/bluetooth/osx/osxbtcentralmanager.mm
++++ y/qtconnectivity/src/bluetooth/osx/osxbtcentralmanager.mm
+@@ -48,8 +48,6 @@
+ #include
+ #include
+
+-Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
+-Q_DECLARE_METATYPE(QLowEnergyDescriptor)
+ Q_DECLARE_METATYPE(QLowEnergyHandle)
+
+ QT_BEGIN_NAMESPACE
+diff --git x/qtconnectivity/src/bluetooth/qlowenergycharacteristic.h y/qtconnectivity/src/bluetooth/qlowenergycharacteristic.h
+index b991e9a2..154c9936 100644
+--- x/qtconnectivity/src/bluetooth/qlowenergycharacteristic.h
++++ y/qtconnectivity/src/bluetooth/qlowenergycharacteristic.h
+@@ -107,4 +107,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QLowEnergyCharacteristic::PropertyTypes)
+
+ QT_END_NAMESPACE
+
++Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
++
+ #endif // QLOWENERGYCHARACTERISTIC_H
+diff --git x/qtconnectivity/src/bluetooth/qlowenergycontroller_p.h y/qtconnectivity/src/bluetooth/qlowenergycontroller_p.h
+index b92716e9..6e866144 100644
+--- x/qtconnectivity/src/bluetooth/qlowenergycontroller_p.h
++++ y/qtconnectivity/src/bluetooth/qlowenergycontroller_p.h
+@@ -497,11 +497,6 @@ Q_DECLARE_TYPEINFO(QLowEnergyControllerPrivate::Attribute, Q_MOVABLE_TYPE);
+
+ QT_END_NAMESPACE
+
+-#ifdef QT_WINRT_BLUETOOTH
+-Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
+-Q_DECLARE_METATYPE(QLowEnergyDescriptor)
+-#endif // QT_WINRT_BLUETOOTH
+-
+ #endif // QT_OSX_BLUETOOTH || QT_IOS_BLUETOOTH
+
+ #endif // QLOWENERGYCONTROLLERPRIVATE_P_H
+diff --git x/qtconnectivity/src/bluetooth/qlowenergydescriptor.h y/qtconnectivity/src/bluetooth/qlowenergydescriptor.h
+index 1dfe1c35..9e71fc56 100644
+--- x/qtconnectivity/src/bluetooth/qlowenergydescriptor.h
++++ y/qtconnectivity/src/bluetooth/qlowenergydescriptor.h
+@@ -89,4 +89,6 @@ protected:
+
+ QT_END_NAMESPACE
+
++Q_DECLARE_METATYPE(QLowEnergyDescriptor)
++
+ #endif // QLOWENERGYDESCRIPTOR_H
+diff --git x/qtconnectivity/src/bluetooth/qlowenergyservice.cpp y/qtconnectivity/src/bluetooth/qlowenergyservice.cpp
+index 6e33c565..9d3129fd 100644
+--- x/qtconnectivity/src/bluetooth/qlowenergyservice.cpp
++++ y/qtconnectivity/src/bluetooth/qlowenergyservice.cpp
+@@ -380,6 +380,8 @@ QLowEnergyService::QLowEnergyService(QSharedPointer p,
+ qRegisterMetaType();
+ qRegisterMetaType();
+ qRegisterMetaType();
++ qRegisterMetaType();
++ qRegisterMetaType();
+
+ connect(p.data(), SIGNAL(error(QLowEnergyService::ServiceError)),
+ this, SIGNAL(error(QLowEnergyService::ServiceError)));
+diff --git x/qtconnectivity/tests/auto/qlowenergycontroller-gattserver/test/tst_qlowenergycontroller-gattserver.cpp y/qtconnectivity/tests/auto/qlowenergycontroller-gattserver/test/tst_qlowenergycontroller-gattserver.cpp
+index 3df27d92..e01457eb 100644
+--- x/qtconnectivity/tests/auto/qlowenergycontroller-gattserver/test/tst_qlowenergycontroller-gattserver.cpp
++++ y/qtconnectivity/tests/auto/qlowenergycontroller-gattserver/test/tst_qlowenergycontroller-gattserver.cpp
+@@ -243,10 +243,6 @@ void TestQLowEnergyControllerGattServer::advertisedData()
+ QVERIFY(m_serverInfo.serviceUuids().contains(QBluetoothUuid(quint16(0x2000))));
+ }
+
+-// TODO: Why on earth is this not in the library???
+-Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
+-Q_DECLARE_METATYPE(QLowEnergyDescriptor)
+-
+ void TestQLowEnergyControllerGattServer::serverCommunication()
+ {
+ qRegisterMetaType();
+diff --git x/qtconnectivity/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp y/qtconnectivity/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
+index 7b02dbcd..c6fd83e6 100644
+--- x/qtconnectivity/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
++++ y/qtconnectivity/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
+@@ -91,9 +91,6 @@ private:
+ QList foundServices;
+ };
+
+-Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
+-Q_DECLARE_METATYPE(QLowEnergyDescriptor)
+-
+ tst_QLowEnergyController::tst_QLowEnergyController()
+ {
+ qRegisterMetaType();
+--
+2.14.2
+
diff --git a/patches/qt-Use-apksigner-by-default-if-available-to-sign-the-AP.patch b/patches/qt-Use-apksigner-by-default-if-available-to-sign-the-AP.patch
deleted file mode 100644
index 8d5468e..0000000
--- a/patches/qt-Use-apksigner-by-default-if-available-to-sign-the-AP.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From 797de4af8231945e1b3688b14719900d9fd0f09e Mon Sep 17 00:00:00 2001
-From: BogDan Vatra
-Date: Tue, 1 Nov 2016 17:53:29 +0200
-Subject: [PATCH] Use apksigner by default if available to sign the APKs
-
-apksigner is smart enough to know which techique to use to sign the apk
-based on apk's manifest file.
-
-People that really want to use jarsigner they need to pass --jarsigner
-argument
-
-Task-number: QTBUG-56702
-Change-Id: I3acd26576c5b0b312d5f2424b1c0a52e48fb920e
----
- src/androiddeployqt/main.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 109 insertions(+), 1 deletion(-)
-
-diff --git x/qttools/src/androiddeployqt/main.cpp y/qttools/src/androiddeployqt/main.cpp
-index c1fd130..fc1cb94 100644
---- x/qttools/src/androiddeployqt/main.cpp
-+++ y/qttools/src/androiddeployqt/main.cpp
-@@ -102,6 +102,7 @@ struct Options
- , internalSf(false)
- , sectionsOnly(false)
- , protectedAuthenticationPath(false)
-+ , jarSigner(false)
- , gdbServer(Auto)
- , installApk(false)
- , uninstallApk(false)
-@@ -181,6 +182,7 @@ struct Options
- bool internalSf;
- bool sectionsOnly;
- bool protectedAuthenticationPath;
-+ bool jarSigner;
-
- // Gdbserver
- TriState gdbServer;
-@@ -446,6 +448,8 @@ Options parseOptions()
- options.sectionsOnly = true;
- } else if (argument.compare(QLatin1String("--protected"), Qt::CaseInsensitive) == 0) {
- options.protectedAuthenticationPath = true;
-+ } else if (argument.compare(QLatin1String("--jarsigner"), Qt::CaseInsensitive) == 0) {
-+ options.jarSigner = true;
- } else if (argument.compare(QLatin1String("--no-generated-assets-cache"), Qt::CaseInsensitive) == 0) {
- options.generateAssetsFileList = false;
- }
-@@ -519,6 +523,8 @@ void printHelp()
- " --internalsf: Include the .SF file inside the signature block.\n"
- " --sectionsonly: Don't compute hash of entire manifest.\n"
- " --protected: Keystore has protected authentication path.\n"
-+ " --jarsigner: Force jarsigner usage, otherwise apksigner will be\n"
-+ " used if available.\n"
- " --gdbserver: Adds the gdbserver to the package. By default the gdbserver\n"
- " is bundled for debug pacakges.\n"
- " --no-gdbserver: Prevents the gdbserver from being added to the package\n"
-@@ -2554,7 +2560,7 @@ bool copyGnuStl(Options *options)
- return true;
- }
-
--bool signPackage(const Options &options)
-+bool jarSignerSignPackage(const Options &options)
- {
- if (options.verbose)
- fprintf(stdout, "Signing Android package.\n");
-@@ -2680,6 +2686,108 @@ bool signPackage(const Options &options)
- return QFile::remove(apkPath(options, UnsignedAPK));
- }
-
-+bool signPackage(const Options &options)
-+{
-+ QString apksignerTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/apksigner");
-+#if defined(Q_OS_WIN32)
-+ apksignerTool += QLatin1String(".bat");
-+#endif
-+
-+ if (options.jarSigner || !QFile::exists(apksignerTool))
-+ return jarSignerSignPackage(options);
-+
-+ // APKs signed with apksigner must not be changed after they're signed, therefore we need to zipalign it before we sign it.
-+
-+ QString zipAlignTool = options.sdkPath + QLatin1String("/tools/zipalign");
-+#if defined(Q_OS_WIN32)
-+ zipAlignTool += QLatin1String(".exe");
-+#endif
-+
-+ if (!QFile::exists(zipAlignTool)) {
-+ zipAlignTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/zipalign");
-+#if defined(Q_OS_WIN32)
-+ zipAlignTool += QLatin1String(".exe");
-+#endif
-+ if (!QFile::exists(zipAlignTool)) {
-+ fprintf(stderr, "zipalign tool not found: %s\n", qPrintable(zipAlignTool));
-+ return false;
-+ }
-+ }
-+
-+ zipAlignTool = QString::fromLatin1("%1%2 -f 4 %3 %4")
-+ .arg(shellQuote(zipAlignTool))
-+ .arg(options.verbose ? QString::fromLatin1(" -v") : QString())
-+ .arg(apkPath(options, UnsignedAPK))
-+ .arg(apkPath(options, SignedAPK));
-+
-+ FILE *zipAlignCommand = openProcess(zipAlignTool);
-+ if (zipAlignCommand == 0) {
-+ fprintf(stderr, "Couldn't run zipalign.\n");
-+ return false;
-+ }
-+
-+ char buffer[512];
-+ while (fgets(buffer, sizeof(buffer), zipAlignCommand) != 0)
-+ fprintf(stdout, "%s", buffer);
-+
-+ int errorCode = pclose(zipAlignCommand);
-+ if (errorCode != 0) {
-+ fprintf(stderr, "zipalign command failed.\n");
-+ if (!options.verbose)
-+ fprintf(stderr, " -- Run with --verbose for more information.\n");
-+ return false;
-+ }
-+
-+ QString apkSignerCommandLine = QString::fromLatin1("%1 sign --ks %2")
-+ .arg(shellQuote(apksignerTool)).arg(shellQuote(options.keyStore));
-+
-+ if (!options.keyStorePassword.isEmpty())
-+ apkSignerCommandLine += QString::fromLatin1(" --ks-pass pass:%1").arg(shellQuote(options.keyStorePassword));
-+
-+ if (!options.keyStoreAlias.isEmpty())
-+ apkSignerCommandLine += QString::fromLatin1(" --ks-key-alias %1").arg(shellQuote(options.keyStoreAlias));
-+
-+ if (!options.keyPass.isEmpty())
-+ apkSignerCommandLine += QString::fromLatin1(" --key-pass pass:%1").arg(shellQuote(options.keyPass));
-+
-+ if (options.verbose)
-+ apkSignerCommandLine += QLatin1String(" --verbose");
-+
-+ apkSignerCommandLine += QString::fromLatin1(" %1")
-+ .arg(apkPath(options, SignedAPK));
-+
-+ auto apkSignerRunner = [&] {
-+ FILE *apkSignerCommand = openProcess(apkSignerCommandLine);
-+ if (apkSignerCommand == 0) {
-+ fprintf(stderr, "Couldn't run apksigner.\n");
-+ return false;
-+ }
-+
-+ char buffer[512];
-+ while (fgets(buffer, sizeof(buffer), apkSignerCommand) != 0)
-+ fprintf(stdout, "%s", buffer);
-+
-+ errorCode = pclose(apkSignerCommand);
-+ if (errorCode != 0) {
-+ fprintf(stderr, "apksigner command failed.\n");
-+ if (!options.verbose)
-+ fprintf(stderr, " -- Run with --verbose for more information.\n");
-+ return false;
-+ }
-+ return true;
-+ };
-+
-+ // Sign the package
-+ if (!apkSignerRunner())
-+ return false;
-+
-+ apkSignerCommandLine = QString::fromLatin1("%1 verify --verbose %2")
-+ .arg(shellQuote(apksignerTool)).arg(apkPath(options, SignedAPK));
-+
-+ // Verify the package and remove the unsigned apk
-+ return apkSignerRunner() && QFile::remove(apkPath(options, UnsignedAPK));
-+}
-+
- bool copyGdbServer(const Options &options)
- {
- if (options.verbose)
---
-2.10.2
-
diff --git a/patches/qt-Use-defaultSize-according-to-svg-standard-in-svg-plugin.patch b/patches/qt-Use-defaultSize-according-to-svg-standard-in-svg-plugin.patch
deleted file mode 100644
index 5fb28cc..0000000
--- a/patches/qt-Use-defaultSize-according-to-svg-standard-in-svg-plugin.patch
+++ /dev/null
@@ -1,379 +0,0 @@
-From eba0d9bdf34f60f2c36f8cef6c412cbed210fa2f Mon Sep 17 00:00:00 2001
-From: Lars Schmertmann
-Date: Fri, 2 Dec 2016 08:05:46 +0100
-Subject: Use defaultSize according to svg standard in svg plugin
-
-The viewBox attribute defines the svg internal coordinate system. If no
-width/height is set, the viewBox size is the right choice for defaultSize.
-Otherwise the standard prescribes that the specified height/width must be
-used.
-
-The old behavior ignored the width and height attributes, and this caused a
-lot of problems in qml. If the viewBox was very small the result was a low
-resolution image. If the viewBox was very large, loading took ages and the
-result used much more memory than needed. Both situations could be avoided
-by setting sourceSize. But when using the same image several times, the
-sourceSize must be set every time to the same value, otherwise the image
-cache would not work. It is cheaper to have the same high-quality source
-image in the cache, and scale it down when required.
-
-With the new behavior it is possible to control the default image size
-directly in the svg file at one place while it is still possible to set
-different sourceSizes if needed.
-
-Task-number: QTBUG-44863
-Change-Id: I9c2fc7c122a29ebcf288b7cbd12427e081d404d5
----
- src/plugins/imageformats/svg/qsvgiohandler.cpp | 2 +-
- tests/auto/auto.pro | 1 +
- tests/auto/qsvgplugin/.gitignore | 1 +
- tests/auto/qsvgplugin/qsvgplugin.pro | 8 ++
- tests/auto/qsvgplugin/resources.qrc | 16 ++++
- tests/auto/qsvgplugin/square.svg | 5 ++
- tests/auto/qsvgplugin/square_size.svg | 5 ++
- tests/auto/qsvgplugin/square_size_viewbox.svg | 5 ++
- tests/auto/qsvgplugin/square_viewbox.svg | 5 ++
- tests/auto/qsvgplugin/tall.svg | 5 ++
- tests/auto/qsvgplugin/tall_size.svg | 5 ++
- tests/auto/qsvgplugin/tall_size_viewbox.svg | 5 ++
- tests/auto/qsvgplugin/tall_viewbox.svg | 5 ++
- tests/auto/qsvgplugin/tst_qsvgplugin.cpp | 108 +++++++++++++++++++++++++
- tests/auto/qsvgplugin/wide.svg | 5 ++
- tests/auto/qsvgplugin/wide_size.svg | 5 ++
- tests/auto/qsvgplugin/wide_size_viewbox.svg | 5 ++
- tests/auto/qsvgplugin/wide_viewbox.svg | 5 ++
- 18 files changed, 195 insertions(+), 1 deletion(-)
- create mode 100644 tests/auto/qsvgplugin/.gitignore
- create mode 100644 tests/auto/qsvgplugin/qsvgplugin.pro
- create mode 100644 tests/auto/qsvgplugin/resources.qrc
- create mode 100644 tests/auto/qsvgplugin/square.svg
- create mode 100644 tests/auto/qsvgplugin/square_size.svg
- create mode 100644 tests/auto/qsvgplugin/square_size_viewbox.svg
- create mode 100644 tests/auto/qsvgplugin/square_viewbox.svg
- create mode 100644 tests/auto/qsvgplugin/tall.svg
- create mode 100644 tests/auto/qsvgplugin/tall_size.svg
- create mode 100644 tests/auto/qsvgplugin/tall_size_viewbox.svg
- create mode 100644 tests/auto/qsvgplugin/tall_viewbox.svg
- create mode 100644 tests/auto/qsvgplugin/tst_qsvgplugin.cpp
- create mode 100644 tests/auto/qsvgplugin/wide.svg
- create mode 100644 tests/auto/qsvgplugin/wide_size.svg
- create mode 100644 tests/auto/qsvgplugin/wide_size_viewbox.svg
- create mode 100644 tests/auto/qsvgplugin/wide_viewbox.svg
-
-diff --git x/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp y/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
-index 88d37bc..0c26cb5 100644
---- x/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
-+++ y/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
-@@ -98,7 +98,7 @@ bool QSvgIOHandlerPrivate::load(QIODevice *device)
- }
-
- if (res) {
-- defaultSize = QSize(r.viewBox().width(), r.viewBox().height());
-+ defaultSize = r.defaultSize();
- loaded = true;
- }
-
-diff --git x/qtsvg/tests/auto/auto.pro y/qtsvg/tests/auto/auto.pro
-index 43ff500..e2d84ec 100644
---- x/qtsvg/tests/auto/auto.pro
-+++ y/qtsvg/tests/auto/auto.pro
-@@ -4,6 +4,7 @@ qtHaveModule(widgets) {
- qsvgdevice \
- qsvggenerator \
- qsvgrenderer \
-+ qsvgplugin \
- qicon_svg \
- cmake \
- installed_cmake
-diff --git x/qtsvg/tests/auto/qsvgplugin/.gitignore y/qtsvg/tests/auto/qsvgplugin/.gitignore
-new file mode 100644
-index 0000000..c41c448
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/.gitignore
-@@ -0,0 +1 @@
-+tst_qsvgplugin
-diff --git x/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro y/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro
-new file mode 100644
-index 0000000..3fec52e
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro
-@@ -0,0 +1,8 @@
-+TARGET = tst_qsvgplugin
-+CONFIG += testcase
-+QT += svg testlib widgets gui-private
-+
-+SOURCES += tst_qsvgplugin.cpp
-+RESOURCES += resources.qrc
-+
-+DEFINES += SRCDIR=\\\"$$PWD/\\\"
-diff --git x/qtsvg/tests/auto/qsvgplugin/resources.qrc y/qtsvg/tests/auto/qsvgplugin/resources.qrc
-new file mode 100644
-index 0000000..fcb311a
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/resources.qrc
-@@ -0,0 +1,16 @@
-+
-+
-+ square.svg
-+ square_size.svg
-+ square_size_viewbox.svg
-+ square_viewbox.svg
-+ tall.svg
-+ tall_size.svg
-+ tall_size_viewbox.svg
-+ tall_viewbox.svg
-+ wide.svg
-+ wide_size.svg
-+ wide_size_viewbox.svg
-+ wide_viewbox.svg
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/square.svg y/qtsvg/tests/auto/qsvgplugin/square.svg
-new file mode 100644
-index 0000000..f35fb87
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/square.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/square_size.svg y/qtsvg/tests/auto/qsvgplugin/square_size.svg
-new file mode 100644
-index 0000000..f4aeb67
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/square_size.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg
-new file mode 100644
-index 0000000..cf39bd7
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg
-new file mode 100644
-index 0000000..5811505
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/tall.svg y/qtsvg/tests/auto/qsvgplugin/tall.svg
-new file mode 100644
-index 0000000..b243b62
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/tall.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/tall_size.svg y/qtsvg/tests/auto/qsvgplugin/tall_size.svg
-new file mode 100644
-index 0000000..6121451
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/tall_size.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg
-new file mode 100644
-index 0000000..9d82492
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg
-new file mode 100644
-index 0000000..8ed61a9
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp y/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp
-new file mode 100644
-index 0000000..4ec1737
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp
-@@ -0,0 +1,108 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2016 The Qt Company Ltd.
-+** Contact: https://www.qt.io/licensing/
-+**
-+** This file is part of the test suite of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and The Qt Company. For licensing terms
-+** and conditions see https://www.qt.io/terms-conditions. For further
-+** information use the contact form at https://www.qt.io/contact-us.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3 as published by the Free Software
-+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-+** included in the packaging of this file. Please review the following
-+** information to ensure the GNU General Public License requirements will
-+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+
-+#include
-+
-+#include "../../../src/plugins/imageformats/svg/qsvgiohandler.cpp"
-+#include
-+#include
-+#include
-+
-+#ifndef SRCDIR
-+#define SRCDIR
-+#endif
-+
-+
-+class tst_QSvgPlugin : public QObject
-+{
-+Q_OBJECT
-+
-+public:
-+ tst_QSvgPlugin();
-+ virtual ~tst_QSvgPlugin();
-+
-+private slots:
-+ void checkSize_data();
-+ void checkSize();
-+};
-+
-+
-+
-+tst_QSvgPlugin::tst_QSvgPlugin()
-+{
-+}
-+
-+tst_QSvgPlugin::~tst_QSvgPlugin()
-+{
-+}
-+
-+void tst_QSvgPlugin::checkSize_data()
-+{
-+ QTest::addColumn("filename");
-+ QTest::addColumn("imageHeight");
-+ QTest::addColumn("imageWidth");
-+
-+ QTest::newRow("square") << SRCDIR "square.svg" << 50 << 50;
-+ QTest::newRow("square_size") << SRCDIR "square_size.svg" << 200 << 200;
-+ QTest::newRow("square_size_viewbox") << SRCDIR "square_size_viewbox.svg" << 200 << 200;
-+ QTest::newRow("square_viewbox") << SRCDIR "square_viewbox.svg" << 100 << 100;
-+ QTest::newRow("tall") << SRCDIR "tall.svg" << 50 << 25;
-+ QTest::newRow("tall_size") << SRCDIR "tall_size.svg" << 200 << 100;
-+ QTest::newRow("tall_size_viewbox") << SRCDIR "tall_size_viewbox.svg" << 200 << 100;
-+ QTest::newRow("tall_viewbox") << SRCDIR "tall_viewbox.svg" << 100 << 50;
-+ QTest::newRow("wide") << SRCDIR "wide.svg" << 25 << 50;
-+ QTest::newRow("wide_size") << SRCDIR "wide_size.svg" << 100 << 200;
-+ QTest::newRow("wide_size_viewbox") << SRCDIR "wide_size_viewbox.svg" << 100 << 200;
-+ QTest::newRow("wide_viewbox") << SRCDIR "wide_viewbox.svg" << 50 << 100;
-+}
-+
-+void tst_QSvgPlugin::checkSize()
-+{
-+ QFETCH(QString, filename);
-+ QFETCH(int, imageHeight);
-+ QFETCH(int, imageWidth);
-+
-+ QFile file(filename);
-+ file.open(QIODevice::ReadOnly);
-+
-+ QSvgIOHandler plugin;
-+ plugin.setDevice(&file);
-+
-+ QImage image;
-+ plugin.read(&image);
-+
-+ file.close();
-+
-+ QCOMPARE(imageHeight, image.height());
-+ QCOMPARE(imageWidth, image.width());
-+}
-+
-+
-+QTEST_MAIN(tst_QSvgPlugin)
-+#include "tst_qsvgplugin.moc"
-diff --git x/qtsvg/tests/auto/qsvgplugin/wide.svg y/qtsvg/tests/auto/qsvgplugin/wide.svg
-new file mode 100644
-index 0000000..9166606
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/wide.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/wide_size.svg y/qtsvg/tests/auto/qsvgplugin/wide_size.svg
-new file mode 100644
-index 0000000..e816154
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/wide_size.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg
-new file mode 100644
-index 0000000..3d9b044
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
-diff --git x/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg
-new file mode 100644
-index 0000000..aface45
---- /dev/null
-+++ y/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg
-@@ -0,0 +1,5 @@
-+
-+
-+
---
-2.11.0
-
diff --git a/patches/qt-macOS-iOS-Fix-garbled-text-under-some-conditions.patch b/patches/qt-macOS-iOS-Fix-garbled-text-under-some-conditions.patch
new file mode 100644
index 0000000..34ba698
--- /dev/null
+++ b/patches/qt-macOS-iOS-Fix-garbled-text-under-some-conditions.patch
@@ -0,0 +1,90 @@
+From 13f25c979fe4396e6d5a76bf183341229da2bacd Mon Sep 17 00:00:00 2001
+From: Eskil Abrahamsen Blomfeldt
+Date: Thu, 30 Nov 2017 15:00:26 +0100
+Subject: [PATCH] macOS/iOS: Fix garbled text under some conditions
+
+There seems to be an issue in CoreText which may cause an existing
+font descriptor to give unreliable results if it refers to one of
+the system theme fonts. Since we do not know all function calls
+or events that may trigger this bug, the safe route is to always
+create fresh font descriptors when creating fonts for these
+descriptors. The impact on performance should be small, as Qt has
+its own internal caches.
+
+[ChangeLog][macOS/iOS][Text] Fixed an issue where text using
+one of the system theme fonts would under certain circumstances
+display random glyphs.
+
+Task-number: QTBUG-63476
+Change-Id: I9e9b253018c63976345eec1439a6b78de2cab869
+---
+ .../fontdatabases/mac/qcoretextfontdatabase.mm | 24 ++++++++++++++--------
+ .../fontdatabases/mac/qcoretextfontdatabase_p.h | 4 +++-
+ 2 files changed, 19 insertions(+), 9 deletions(-)
+
+diff --git x/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm y/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
+index 6347d4d231..237e8a89a5 100644
+--- x/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
++++ y/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
+@@ -416,7 +416,19 @@ extern CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef);
+ template <>
+ QFontEngine *QCoreTextFontDatabaseEngineFactory::fontEngine(const QFontDef &fontDef, void *usrPtr)
+ {
+- CTFontDescriptorRef descriptor = static_cast(usrPtr);
++ QCFType descriptor = QCFType::constructFromGet(
++ static_cast(usrPtr));
++
++ // CoreText will sometimes invalidate information in font descriptors that refer
++ // to system fonts in certain function calls or application states. While the descriptor
++ // looks the same from the outside, some internal plumbing is different, causing the results
++ // of creating CTFonts from those descriptors unreliable. The work-around for this
++ // is to copy the attributes of those descriptors each time we make a new CTFont
++ // from them instead of referring to the original, as that may trigger the CoreText bug.
++ if (m_systemFontDescriptors.contains(descriptor)) {
++ QCFType attributes = CTFontDescriptorCopyAttributes(descriptor);
++ descriptor = CTFontDescriptorCreateWithAttributes(attributes);
++ }
+
+ // Since we do not pass in the destination DPI to CoreText when making
+ // the font, we need to pass in a point size which is scaled to include
+@@ -427,14 +439,10 @@ QFontEngine *QCoreTextFontDatabaseEngineFactory::fontEngine
+ qreal scaledPointSize = fontDef.pixelSize;
+
+ CGAffineTransform matrix = qt_transform_from_fontdef(fontDef);
+- CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, &matrix);
+- if (font) {
+- QFontEngine *engine = new QCoreTextFontEngine(font, fontDef);
+- CFRelease(font);
+- return engine;
+- }
++ if (QCFType font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, &matrix))
++ return new QCoreTextFontEngine(font, fontDef);
+
+- return NULL;
++ return nullptr;
+ }
+
+ #ifndef QT_NO_FREETYPE
+diff --git x/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h y/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
+index 9612b909f1..e14d1d6e6e 100644
+--- x/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
++++ y/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
+@@ -91,12 +91,14 @@ public:
+ QFont *themeFont(QPlatformTheme::Font) const;
+ const QHash &themeFonts() const;
+
++protected:
++ mutable QSet m_systemFontDescriptors;
++
+ private:
+ void populateFromDescriptor(CTFontDescriptorRef font, const QString &familyName = QString());
+
+ mutable QString defaultFontName;
+
+- mutable QSet m_systemFontDescriptors;
+ mutable QHash m_themeFonts;
+ bool m_hasPopulatedAliases;
+ };
+--
+2.15.1
+
diff --git a/patches/soname/openssl_makefile.shared.patch b/patches/soname/openssl_makefile.shared.patch
deleted file mode 100644
index ac80d8a..0000000
--- a/patches/soname/openssl_makefile.shared.patch
+++ /dev/null
@@ -1,49 +0,0 @@
---- Makefile.shared.orig 2014-05-09 12:44:04.801960645 +0200
-+++ Makefile.shared 2014-05-09 13:08:04.595689322 +0200
-@@ -109,23 +109,7 @@
- $${SHAREDCMD} $${SHAREDFLAGS} \
- -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
- $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
-- ) && $(SYMLINK_SO)
--
--SYMLINK_SO= \
-- if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \
-- prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
-- if [ -n "$$SHLIB_COMPAT" ]; then \
-- for x in $$SHLIB_COMPAT; do \
-- ( $(SET_X); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \
-- ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
-- prev=$$SHLIB$$x$$SHLIB_SUFFIX; \
-- done; \
-- fi; \
-- if [ -n "$$SHLIB_SOVER" ]; then \
-- ( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \
-- ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
-- fi; \
-- fi
-+ )
-
- LINK_SO_A= SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO)
- LINK_SO_O= SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO)
-@@ -578,18 +562,15 @@
- symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \
- symlink.aix symlink.reliantunix:
- @ $(CALC_VERSIONS); \
-- SHLIB=lib$(LIBNAME).so; \
-- $(SYMLINK_SO)
-+ SHLIB=lib$(LIBNAME).so;
- symlink.darwin:
- @ $(CALC_VERSIONS); \
- SHLIB=lib$(LIBNAME); \
-- SHLIB_SUFFIX=.dylib; \
-- $(SYMLINK_SO)
-+ SHLIB_SUFFIX=.dylib;
- symlink.hpux:
- @ $(CALC_VERSIONS); \
- SHLIB=lib$(LIBNAME).sl; \
-- expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
-- $(SYMLINK_SO)
-+ expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so;
- # The following lines means those specific architectures do no symlinks
- symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath symlink.beos:
-
diff --git a/patches/soname/openssl_sed.sh b/patches/soname/openssl_sed.sh
deleted file mode 100755
index 4e29edf..0000000
--- a/patches/soname/openssl_sed.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-echo "Patching Configure..."
-#sed -i 's/.so.\\$(SHLIB_MAJOR).\\$(SHLIB_MINOR)/.so/g' Configure
-sed -i 's/.\\$(SHLIB_MAJOR).\\$(SHLIB_MINOR)//g' Configure
-
-echo "Patching Makefile..."
-sed -i 's/$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX/$$SHLIB/g' Makefile.shared
-
diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt
index e78a850..2590f11 100644
--- a/resources/CMakeLists.txt
+++ b/resources/CMakeLists.txt
@@ -1,7 +1,23 @@
+FUNCTION(WRITE_QRC _dest_file _dir _prefix)
+ FILE(GLOB_RECURSE files "${_dir}/*")
+
+ FILE(WRITE "${_dest_file}" "\n")
+ FOREACH(file ${files})
+ STRING(REPLACE "${_dir}/" "" file_alias "${file}")
+ FILE(APPEND "${_dest_file}" "${file}\n")
+ ENDFOREACH()
+ FILE(APPEND "${_dest_file}" "")
+ENDFUNCTION()
+
+
SET(QRC_FILES "ausweisapp.qrc")
IF(IOS OR ANDROID OR ${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
LIST(APPEND QRC_FILES "ausweisapp_mobile.qrc")
+
+ SET(ausweisapp_qml.qrc "${CMAKE_CURRENT_BINARY_DIR}/ausweisapp_qml.qrc")
+ WRITE_QRC("${ausweisapp_qml.qrc}" "${CMAKE_CURRENT_SOURCE_DIR}/qml" "qml")
+ LIST(APPEND QRC_FILES "${ausweisapp_qml.qrc}")
ENDIF()
IF(DESKTOP)
@@ -12,7 +28,3 @@ SET(RCC ${CMAKE_BINARY_DIR}/src/${PROJECT_NAME}.rcc)
SET(RCC ${RCC} PARENT_SCOPE)
qt5_add_binary_resources(AusweisAppRcc "${QRC_FILES}" DESTINATION ${RCC})
SET(QML_IMPORT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/qml ${CMAKE_CURRENT_SOURCE_DIR}/qml_stationary CACHE string "qml files" FORCE)
-
-IF(WIN32)
- SET(WINDOWS_RC "${CMAKE_CURRENT_SOURCE_DIR}/windows.rc" PARENT_SCOPE)
-ENDIF()
diff --git a/resources/ausweisapp.qrc b/resources/ausweisapp.qrc
index b643c6a..cc266d0 100644
--- a/resources/ausweisapp.qrc
+++ b/resources/ausweisapp.qrc
@@ -29,7 +29,6 @@
images/iOS/tabBar/Pin-on.png
images/iOS/tabBar/Verlauf-off.png
images/iOS/tabBar/Verlauf-on.png
- images/icon_Bluetooth.svg
images/icon_Pin.svg
images/iOS/tabBar/More-off.svg
images/iOS/tabBar/More-on.svg
@@ -57,28 +56,34 @@
images/provider/gradient-insurance.png
images/provider/gradient-finance.png
images/provider/gradient-other.png
- images/provider/categoryIcons/+android/General.svg
- images/provider/categoryIcons/+android/CitizenServices.svg
- images/provider/categoryIcons/+android/Financials.svg
- images/provider/categoryIcons/+android/Insurances.svg
- images/provider/categoryIcons/+android/OtherServices.svg
- images/provider/categoryIcons/+android/General_bg.svg
- images/provider/categoryIcons/+android/General_button.svg
- images/provider/categoryIcons/+android/CitizenServices_bg.svg
- images/provider/categoryIcons/+android/CitizenServices_button.svg
- images/provider/categoryIcons/+android/Financials_bg.svg
- images/provider/categoryIcons/+android/Financials_button.svg
- images/provider/categoryIcons/+android/Insurances_bg.svg
- images/provider/categoryIcons/+android/Insurances_button.svg
- images/provider/categoryIcons/+android/OtherServices_bg.svg
- images/provider/categoryIcons/+android/OtherServices_button.svg
- images/provider/categoryIcons/+android/General_section.svg
- images/provider/categoryIcons/+android/CitizenServices_section.svg
- images/provider/categoryIcons/+android/Financials_section.svg
- images/provider/categoryIcons/+android/Insurances_section.svg
- images/provider/categoryIcons/+android/OtherServices_section.svg
+ images/provider/categoryIcons/+android/general.svg
+ images/provider/categoryIcons/+android/citizen.svg
+ images/provider/categoryIcons/+android/finance.svg
+ images/provider/categoryIcons/+android/insurance.svg
+ images/provider/categoryIcons/+android/other.svg
+ images/provider/categoryIcons/+android/general_bg.svg
+ images/provider/categoryIcons/+android/general_button.svg
+ images/provider/categoryIcons/+android/citizen_bg.svg
+ images/provider/categoryIcons/+android/citizen_button.svg
+ images/provider/categoryIcons/+android/finance_bg.svg
+ images/provider/categoryIcons/+android/finance_button.svg
+ images/provider/categoryIcons/+android/insurance_bg.svg
+ images/provider/categoryIcons/+android/insurance_button.svg
+ images/provider/categoryIcons/+android/other_bg.svg
+ images/provider/categoryIcons/+android/other_button.svg
+ images/provider/categoryIcons/+android/general_section.svg
+ images/provider/categoryIcons/+android/citizen_section.svg
+ images/provider/categoryIcons/+android/finance_section.svg
+ images/provider/categoryIcons/+android/insurance_section.svg
+ images/provider/categoryIcons/+android/other_section.svg
+ updatable-files/supported-providers.json
images/icon_nfc.svg
+ images/icon_remote.svg
+ images/icon_bluetooth.svg
images/phone_nfc.svg
+ images/phone_remote.svg
images/phone_bluetooth.svg
+ images/location_flag_de.svg
+ images/location_flag_en.svg
diff --git a/resources/ausweisapp_desktop.qrc b/resources/ausweisapp_desktop.qrc
index b70fd74..c1552a8 100644
--- a/resources/ausweisapp_desktop.qrc
+++ b/resources/ausweisapp_desktop.qrc
@@ -2,13 +2,12 @@
html_templates/alreadyactive.html
html_templates/error.html
-
stylesheets/common.qss
stylesheets/macos.qss
stylesheets/windows.qss
stylesheets/desktop.qss
-
images/beta.svg
+ images/green_check_mark.svg
images/MenuSelected.png
images/MenuUnselected.png
images/MenuUnselectedDisabled.png
@@ -19,6 +18,8 @@
images/start_nPA_eAT.png
images/busy_animation.gif
images/html_message_section.jpg
+ images/padlock.svg
+ images/padlock_empty.svg
images/randompin/btn_normal_0.png
images/randompin/btn_normal_1.png
images/randompin/btn_normal_2.png
@@ -33,36 +34,63 @@
images/randompin/btn_ok.png
images/randompin/btn_cancel.png
images/randompin/btn_clear.png
-
- images/reader/default_no_cardreader_01.png
- images/reader/default_more_cardreader.png
- images/reader/default_no_card_found.png
- images/reader/img_cyberjack_wave.png
- images/reader/img_cyberjack_wave_mit_ausweis.png
- images/reader/img_Reiner_SCT_cyberjack_RFID_komfort.png
- images/reader/img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png
- images/reader/img_Reiner_SCT_cyberjack_RFID_standard.png
- images/reader/img_Reiner_SCT_cyberjack_RFID_standard_mit_ausweis.png
- images/reader/img_Reiner_SCT_cyberjack_RFID_basis.png
- images/reader/img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png
- images/reader/img_Identive_SCL011.png
-
- images/reader/img_Identive_SCL011_mit_ausweis.png
- images/reader/img_Identive_SDI011.png
- images/reader/img_Identive_SDI011_mit_ausweis.png
- images/reader/img_KOBIL_ID_Token.png
- images/reader/img_KOBIL_ID_Token_mit_ausweis.png
- images/reader/img_ACS_ACR1281U.png
- images/reader/img_ACS_ACR1281U_mit_ausweis.png
- images/reader/img_HID_Global_OMNIKEY_5321_V2.png
- images/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png
- images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png
- images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL_mit_ausweis.png
- images/reader/img_FEIG_myAXXES_basic.png
- images/reader/img_FEIG_myAXXES_basic_mit_ausweis.png
- images/reader/img_Gemalto_Prox_SU.png
- images/reader/img_Gemalto_Prox_SU_mit_ausweis.png
- images/reader/img_Gemalto_Prox_DU.png
- images/reader/img_Gemalto_Prox_DU_mit_ausweis.png
+ images/reader/default_more_reader.png
+ images/reader/default_no_card.png
+ images/reader/default_no_reader.png
+ images/reader/default_reader.png
+ images/reader/default_reader_mit_ausweis.png
+ updatable-files/supported-readers.json
+ updatable-files/reader/img_ACS_ACR122U.png
+ updatable-files/reader/img_ACS_ACR122U_mit_ausweis.png
+ updatable-files/reader/img_ACS_ACR1252U.png
+ updatable-files/reader/img_ACS_ACR1252U_mit_ausweis.png
+ updatable-files/reader/img_ACS_ACR1281U.png
+ updatable-files/reader/img_ACS_ACR1281U_mit_ausweis.png
+ updatable-files/reader/img_Cherry_TC_1200.png
+ updatable-files/reader/img_Cherry_TC_1200_mit_ausweis.png
+ updatable-files/reader/img_Cherry_TC_1300.png
+ updatable-files/reader/img_Cherry_TC_1300_mit_ausweis.png
+ updatable-files/reader/img_cyberjack_wave.png
+ updatable-files/reader/img_cyberjack_wave_mit_ausweis.png
+ updatable-files/reader/img_FEIG_myAXXES_basic.png
+ updatable-files/reader/img_FEIG_myAXXES_basic_mit_ausweis.png
+ updatable-files/reader/img_Gemalto_Prox_DU.png
+ updatable-files/reader/img_Gemalto_Prox_DU_mit_ausweis.png
+ updatable-files/reader/img_Gemalto_Prox_SU.png
+ updatable-files/reader/img_Gemalto_Prox_SU_mit_ausweis.png
+ updatable-files/reader/img_HID_Global_OMNIKEY_5321_V2.png
+ updatable-files/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png
+ updatable-files/reader/img_HID_Omnikey_5421.png
+ updatable-files/reader/img_HID_Omnikey_5421_mit_ausweis.png
+ updatable-files/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png
+ updatable-files/reader/img_HID_Omnikey_Mobile_Reader_4121_CL_mit_ausweis.png
+ updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL.png
+ updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL_mit_ausweis.png
+ updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL.png
+ updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL_mit_ausweis.png
+ updatable-files/reader/img_Identive_Cloud_3700_F.png
+ updatable-files/reader/img_Identive_Cloud_3700_F_mit_ausweis.png
+ updatable-files/reader/img_Identive_Cloud_4700_F.png
+ updatable-files/reader/img_Identive_Cloud_4700_F_mit_ausweis.png
+ updatable-files/reader/img_Identive_Cloud_4701_F.png
+ updatable-files/reader/img_Identive_Cloud_4701_F_mit_ausweis.png
+ updatable-files/reader/img_Identive_SCL011.png
+ updatable-files/reader/img_Identive_SCL011_mit_ausweis.png
+ updatable-files/reader/img_Identive_SCL3711.png
+ updatable-files/reader/img_Identive_SCL3711_mit_ausweis.png
+ updatable-files/reader/img_Identive_SDI010.png
+ updatable-files/reader/img_Identive_SDI010_mit_ausweis.png
+ updatable-files/reader/img_Identive_SDI011.png
+ updatable-files/reader/img_Identive_SDI011_mit_ausweis.png
+ updatable-files/reader/img_KOBIL_ID_Token.png
+ updatable-files/reader/img_KOBIL_ID_Token_mit_ausweis.png
+ updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis.png
+ updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png
+ updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort.png
+ updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png
+ updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard.png
+ updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard_mit_ausweis.png
+ updatable-files/reader/img_RemoteReader.png
+ updatable-files/reader/img_RemoteReader_mit_ausweis.png
diff --git a/resources/ausweisapp_mobile.qrc b/resources/ausweisapp_mobile.qrc
index 40ad763..a1d2118 100644
--- a/resources/ausweisapp_mobile.qrc
+++ b/resources/ausweisapp_mobile.qrc
@@ -13,6 +13,7 @@
images/android/navigation/ausweisen.svg
images/android/navigation/anbieter.svg
images/android/navigation/balloon.svg
+ images/android/navigation/remoteleser.svg
images/android/navigation/verlauf.svg
images/android/navigation/pin.svg
images/android/navigation/versionsinformation.svg
@@ -40,22 +41,27 @@
images/android/android_arrow_back_white.svg
images/iOS/more/icon_mehr_favorit.svg
images/iOS/more/icon_mehr_fragen.svg
- images/iOS/more/icon_mehr_upload.svg
images/iOS/more/icon_mehr_info.svg
- images/provider/categoryIcons/General.svg
- images/provider/categoryIcons/CitizenServices.svg
- images/provider/categoryIcons/Financials.svg
- images/provider/categoryIcons/Insurances.svg
- images/provider/categoryIcons/OtherServices.svg
- images/provider/categoryIcons/+android/General_bg.svg
- images/provider/categoryIcons/+android/General_button.svg
- images/provider/categoryIcons/+android/CitizenServices_bg.svg
- images/provider/categoryIcons/+android/CitizenServices_button.svg
- images/provider/categoryIcons/+android/Financials_bg.svg
- images/provider/categoryIcons/+android/Financials_button.svg
- images/provider/categoryIcons/+android/Insurances_bg.svg
- images/provider/categoryIcons/+android/Insurances_button.svg
- images/provider/categoryIcons/+android/OtherServices_bg.svg
- images/provider/categoryIcons/+android/OtherServices_button.svg
+ images/iOS/more/icon_mehr_license.svg
+ images/iOS/more/icon_mehr_remotereader.svg
+ images/iOS/more/icon_mehr_upload.svg
+ images/provider/categoryIcons/general.svg
+ images/provider/categoryIcons/citizen.svg
+ images/provider/categoryIcons/finance.svg
+ images/provider/categoryIcons/insurance.svg
+ images/provider/categoryIcons/other.svg
+ images/provider/categoryIcons/+android/general_bg.svg
+ images/provider/categoryIcons/+android/general_button.svg
+ images/provider/categoryIcons/+android/citizen_bg.svg
+ images/provider/categoryIcons/+android/citizen_button.svg
+ images/provider/categoryIcons/+android/finance_bg.svg
+ images/provider/categoryIcons/+android/finance_button.svg
+ images/provider/categoryIcons/+android/insurance_bg.svg
+ images/provider/categoryIcons/+android/insurance_button.svg
+ images/provider/categoryIcons/+android/other_bg.svg
+ images/provider/categoryIcons/+android/other_button.svg
+ images/phone_to_pc.svg
+ images/android/navigation/remotesettings.svg
+ images/trash_icon.svg
diff --git a/resources/config.json.in b/resources/config.json.in
index 9bef63e..8b1fba7 100644
--- a/resources/config.json.in
+++ b/resources/config.json.in
@@ -3,9 +3,9 @@
"_comment_1": "array of CVCs; hex encoded",
"_comment_2": [
- "certificate 1: DECVCAeID00103_DECVCAeID00104",
- "certificate 2: DECVCAeID00102_DECVCAeID00103",
- "certificate 3: DECVCAeID00102"
+ "DECVCAeID00103_DECVCAeID00104",
+ "DECVCAeID00102_DECVCAeID00103",
+ "DECVCAeID00102"
],
"cvRootCertificates": [
"7F218201B67F4E82016E5F290100420E44454356434165494430303130337F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104241D8627338B64F20077FFD558909A096C635DDB222852038EAAE642E869A40173D588F817D95DB2A6A0F077EA5EE63596A20F85BC3CB176D2F98D88D90219AA8701015F200E44454356434165494430303130347F4C12060904007F0007030102025305FC0F13FFFF5F25060105000901045F24060108000901045F3740313A81ED8734E7A8C45F16B55FB603E63027B7F44C2DE3A8E782552D35949DB221CA33BD41A01DA6A1288C7885714FC3A03FA45683B75D3884930EC6738AF8A0",
@@ -15,13 +15,13 @@
"_comment_3": "array of Test-CVCs; hex encoded",
"_comment_4": [
- "certificate 4: DETESTeID00001",
- "certificate 5: DETESTeID00002_DETESTeID00001",
- "certificate 6: DETESTeID00004_DETESTeID00002",
- "certificate 7: DETESTeID00005_DETESTeID00004",
- "certificate 8: DECVCAeIDCTL0401_DECVCAeIDCTL0402",
- "certificate 9: DECVCAeIDCT00001_DECVCAeIDCTL0401",
- "certificate 10: DECVCAeIDCT00001_DECVCAeIDCT00001"
+ "DETESTeID00001",
+ "DETESTeID00001_DETESTeID00002",
+ "DETESTeID00002_DETESTeID00004",
+ "DETESTeID00004_DETESTeID00005",
+ "DECVCAeIDCTL0401_DECVCAeIDCTL0402",
+ "DECVCAeIDCT00001_DECVCAeIDCTL0401",
+ "DECVCAeIDCT00001_DECVCAeIDCT00001"
],
"cvRootCertificatesTest": [
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104184BB519FC2A8F52DC0DC73112FACFE914F2A49B678DD5799A2B1DFE95E1A66359014E22FA8D66438413CEBA6CF0E215576B673376BF617AF4DFE9761D2290148701015F200E44455445535465494430303030317F4C12060904007F0007030102025305FE0F01FFFF5F25060100000801035F24060103000801035F37409F25EBFAF4B91E4C60A1683754C5DC076A3179753EF97D9F8CB01FE1DCD3B8C83E7A26602AB1F344BE5706006D79A9FF6A9716404DC83B9F30E1213B393128A2",
@@ -35,16 +35,16 @@
"_comment_5": "array of certificates for checking the authenticity of updates; DER format, hex encoded",
"updateCertificates": [
- "308206f8308205e0a003020102020840b202f4450f40bf300d06092a864886f70d01010505003076310b300906035504061302444531253023060355040a131c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311e301c060355040b131554727573742043656e7465722053657276696365733120301e0603550403131754656c6553656320536572766572506173732043412031301e170d3132303832313037353132345a170d3135303832363233353935395a3081ab310b3009060355040613024445312d302b060355040a0c246272656d656e206f6e6c696e6520736572766963657320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e3124302206092a864886f70d01090116156265747269656240626f732d6272656d656e2e6465311830160603550403130f6170706c2e626f732d6173702e646530820122300d06092a864886f70d01010105000382010f003082010a0282010100baa234d61141856dcc308a4fe30d1eaeb3e3356971e79a7c8257ce0ff15cd786a24670b58f2e0e2ba609805b9db94e7a68c5216375e9549c45c7d2d40ad9ecd1332adb6a94c8b312cc71097a671ff3ebec674f2decde539b619c867b1873deafa8eaeda61b335d483a260196903e4f3922cb3d66e30b6e22cfed5e249f7847b37d53b00409edd52e7148a72e2baf22194ec408496b6726ef5c8e2495e88e1c0193ab46f75b9e6fb0cfd100ab314a59337eb80d7c0449ff523606ea72e357e153182353d9cbe92567507f39c6d6545d3d561657703c6d6858a0cfa322c086bab2366f7df64cf8697f85e0d054a7c1283c7858cc2192082b9e14f88ce6388928d30203010001a38203523082034e301f0603551d2304183016801433dc9e96ecd8e8351f6d901b0b38a4af741bc658300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604146a2f35506e2da75862fe292c02f2222d28d4051c304f0603551d2004483046304406092b06010401bd470d023037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c308201220603551d1f04820119308201153045a043a041863f687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f54656c655365635f536572766572506173735f43415f312e63726c3081cba081c8a081c58681c26c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f636e3d54656c65536563253230536572766572506173732532304341253230312c6f753d547275737425323043656e74657225323053657276696365732c6f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c633d64653f63657274696669636174655265766f636174696f6e6c6973743f626173653f63657274696669636174655265766f636174696f6e6c6973743d2a3082013a06082b060105050701010482012c30820128303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072304c06082b060105050730028640687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f43415f312e6365723081a206082b060105050730028681956c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f636e3d54656c65536563253230536572766572506173732532304341253230312c6f753d547275737425323043656e74657225323053657276696365732c6f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c633d64653f63414365727469666963617465300c0603551d130101ff04023000301a0603551d1104133011820f6170706c2e626f732d6173702e6465300d06092a864886f70d0101050500038201010026a20d746b23686fa3d7513bf46ee88fbc1d895a7626576cd3ca16fa4a483a36bbe72bdb1aafd1f653a30c7e512870037eeba1706c75082248402061c5a2b39abe2c7a13433c6344cdfb9fb83ddee505bc406d7aa00b35b32ace9faffea387d1dd5982ac7e09c2687d5d33853885fea902e30dde7870457ac3431db6f64314a768b293a1ba097cf7b25d0abb83090f8a1b9a8fe009fe63f9fe6029b06e0d4e95e3995c6a93812a783493f66b69270f64d472637a8b30cb5870676ccaf98a4655e843c5c255d57e19388b60c5ffc6fd65f3eb17353279a68b609681b2bd7c629f4e6061619df736f78eabb2761a3ef9b3dcc87abcbca781620297f576ea9ce06a",
"308208673082074fa00302010202086b5eeeb3f0155141300d06092a864886f70d01010b05003081d8310b300906035504061302444531253023060355040a131c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311e301c060355040b131554727573742043656e7465722053657276696365733120301e0603550403131754656c6553656320536572766572506173732043412032311c301a060355040813134e6f7264726865696e205765737466616c656e310e300c0603550411130535373235303110300e060355040713074e65747068656e3120301e06035504091317556e7465726520496e647573747269657374722e203230301e170d3135303532303039353335315a170d3138303532353233353935395a3081a6310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e3124302206092a864886f70d01090116156265747269656240676f7665726e696b75732e6465311f301d060355040313166170706c2e676f7665726e696b75732d6173702e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100c1d969514392105ce65b089b7357f75356f076b21168233d1eb57ae81f826c74258ec4814c48a3e99633fcac1fb444412cba421c1569d21b6317b6614b096203ab5b605128671764d30186dec09716d2173bfab911a9ad3d2d0b850ff2595dd9c72113bd64879c39c39b3debbfdd7f8d68e8d1bdaf2cca0508583bd59b965ec5f4950e4fbbe48b7be351237d478253bc34ac5aed9448f5ae31878067bdad75179cb776ef19f8e49e62b830de8279142233030189c20008345553847b7edc6471bf7c15c98b087159b44faa5a35fe16adc285e4d8266fab49b7b4e7fbcbd91767e05dbb45a5564cb11abcbeb0ff66869ca72dd7919eae796340fb5b26fb8ecc65b8380d3eb30e46150725e2156ad156773a79b482133b846b247868a6d3fcc18f96cfc6044fb7678fd79c04fb580b7bfb86e3252554b9a97dfd6fb9ae0e0d8d663a56b471d37752fc88a172151494553d78a39ade4669076e5ddfa13fd684b7eb800efedf9af8f90d4bab6d80378b950d43ef6de6f9ca5dccb81ecbbf820126d90923c5b87462af2acf0fc460599b2d7022e488f20069e2b3e80e057ebbd1454891929c2e0252688a1c0e801eb8bec795251087a755a6edcd22759a5c1869550d63b0596cb5ac20a7e5cb11f5412598990092cbe058b4ec67b98dd9ed2b2a5f8b7994e92b89a1ef51517beb2e2594cb8007d514f988968c52246a18945fba0adf0203010001a38203633082035f301f0603551d2304183016801415bbded6256fbdf2319f6213dc5ca6f465b46df2300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604148c76a1377b9cad8059a5d4126a53bc633671ca1c30590603551d2004523050304406092b06010401bd470d023037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202308201220603551d1f04820119308201153045a043a041863f687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f54656c655365635f536572766572506173735f43415f322e63726c3081cba081c8a081c58681c26c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f636e3d54656c65536563253230536572766572506173732532304341253230322c6f753d547275737425323043656e74657225323053657276696365732c6f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c633d64653f63657274696669636174655265766f636174696f6e6c6973743f626173653f63657274696669636174655265766f636174696f6e6c6973743d2a3082013a06082b060105050701010482012c30820128303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072304c06082b060105050730028640687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f43415f322e6365723081a206082b060105050730028681956c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f636e3d54656c65536563253230536572766572506173732532304341253230322c6f753d547275737425323043656e74657225323053657276696365732c6f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c633d64653f63414365727469666963617465300c0603551d130101ff0402300030210603551d11041a301882166170706c2e676f7665726e696b75732d6173702e6465300d06092a864886f70d01010b050003820101005f35f8a5ed5fe3879dbb137d1505768bff7635e3c7824735bf8c0b1bdd02335de7928f484192925c29738b034b152805935aa54d92abc3be5c7cfec5017ca506a33c2b15fdb2762037b0b4615e39d7697f64dba763ad0b6e05b7e8b6dd29c7ace3ec86ea74a82ce9a5575166375849afbd48cebdbd18bfdab0f905b094b4e686649bee5fba153ff5786cbb5926807891ae07871127a887c2e2747dcfd1bd18d34b0642eb2fa8309e8b434b2cf91ab0e918c3f3c59d70aa096a46abfc50b3e66baacd7748b7ef98110760cce271c1528ed4e84ae9144983ad26aa27f00a527053c50739d2592ad13179a33eb1d299081be8b9824bc63ac70e1ad518380df08a56%",
- "308202eb308201d3a003020102020437a18b8a300d06092a864886f70d01010b05003026310b3009060355040613024445311730150603550403130e6275696c64617574656e74617070301e170d3134303732343131323334325a170d3234303732313131323334325a3026310b3009060355040613024445311730150603550403130e6275696c64617574656e7461707030820122300d06092a864886f70d01010105000382010f003082010a0282010100ca573d1c79c72f15dd80020b39886bec2de9004556eabc833f61b86aac3b4658ed8ecf7f32cb3daeb34576b49ff13e9eaaafa5ce2cf7cb13df2f89be6a1659f79cca6b4276b90914594e74998f9b9fffa0c8efdf4409be91a195458e1a0dce707cb1573cab99d297c80e8026c2f299fd97b8bbf14b172094f17abe50483a2e1df0cf6629d024cf5b752a1bb0edbe172dcce7ed30cc3c193ba742bff2e0afa0f15c414f27bdb374f65ac71c0c7af3a4a5fe1707d22bed1b63019e659c42e763c601f45d60094be915a422a0c183da33e8b3909cf83c0d7dfd3d5ffd1a92cf00c07961b284ddbef1e9b9d5536e12630cefa8493c8244edd2f687b09d38e79f639d0203010001a321301f301d0603551d0e04160414b29d3e7f193789f68d2234738a2773e737c4ce1c300d06092a864886f70d01010b0500038201010030800530f9d3abb215e8c8da5ee62ee083bdd8fce00d673702d00fac194eabd4c0b9338166a6dd76711651e685d0b9a50cdf2dc4872edeb5f4369372fb0d70d8fe02892b962e5fafd73add31ec0fd6708aa6ad2c82beca260773dd3e62460d1e416ac8d931e221b1bcf8255abd44933d38660e5bad639c38fb7dbbcf1f9504e20b27d75810b5ab475ce061d725b54628b4cfd7bd53f29d93a8ecb16e96df9ff654da55ea8ed1700c8d3135b1bc97655595a56f75dfb101c27341309602dce89e9c4db08a7c19d7fb199394f0ec478c4f246dbab0a37c2cea22b5b2b4c9e589a640611348b77dddd0fc412c9980cb5d516b274b9649debdd22df123cd06495924%"
+ "308205633082044ba00302010202135100000749e339b5a8a2ecb8e8000000000749300d06092a864886f70d01010b0500304431153013060a0992268993f22c64011916056c6f63616c31153013060a0992268993f22c6401191605626f736b67311430120603550403130b676f766b67726f6f746361301e170d3136313232393039343930325a170d3138313232393039353930325a307c310b3009060355040613024445310b3009060355040813024445310f300d060355040713064272656d656e31163014060355040a130d476f7665726e696b7573204b47311c301a060355040b131353797374656d7320456e67696e656572696e6731193017060355040314102a2e74662e626f732d746573742e646530820122300d06092a864886f70d01010105000382010f003082010a0282010100c2ce4b611d136b4a99f43bd6487c323f812f00c433ed7ec3d343b93c1b064ba12ff3f950634bbba55283ea48bf91d3a6736ee17c3467918b22d9ba1d55f9b8593461b42ed54454d15577abe0ec286203c4c33a82aae8216c802f8f81f1d06473f85acbf6ba69357828030a97086aa1bc6836cae3916d2d83f24c153a05402e13828a30822e7a861395be7d7c511b84baf4bc4a5daeb3db755b37e8ffb5dd18f8ac22c018801e212ab59b96e64b85c3d418c577c33ef73cc0ba5fef68041ba39fa0b795e7b5eabfa408c36ca582572ca2adde4cd104ccad376eaa06b41e737121f349eedb063438b406bd32dc032659e9cbad809afb5679d8a7d776a916ead35b0203010001a382021430820210300e0603551d0f0101ff0404030205a030130603551d25040c300a06082b0601050507030130240603551d11041d301b82102a2e74662e626f732d746573742e646582012a87040ad2f861301d0603551d0e04160414262451b4431de1ccdb523d93038d7e01c4a3d153301f0603551d230418301680144b7e48a7b2f2db121642634bcd7e1c0deee96285303b0603551d1f043430323030a02ea02c862a687474703a2f2f676f7663726c2e676f7665726e696b75732e64652f63726c2f7265766f6b652e63726c3081eb06082b060105050701010481de3081db3081aa06082b0601050507300286819d6c6461703a2f2f2f434e3d676f766b67726f6f7463612c434e3d4149412c434e3d5075626c69632532304b657925323053657276696365732c434e3d53657276696365732c434e3d436f6e66696775726174696f6e2c44433d626f736b672c44433d6c6f63616c3f634143657274696669636174653f626173653f6f626a656374436c6173733d63657274696669636174696f6e417574686f72697479302c06082b060105050730018620687474703a2f2f676f7663726c2e676f7665726e696b75732e64652f6f637370303b06092b0601040182371507042e302c06242b060104018237150887a4920efcad6b83a98117819cb41586e9ea5a1791ff2e87b7af7c020164020109301b06092b060104018237150a040e300c300a06082b06010505070301300d06092a864886f70d01010b05000382010100a41dd5971c9b983bc3369bc9f3046481ff05aab5b47fac27a8cb7f917585b15c5acfbc8d083375a459b0642974968f4e00ad501d715dfb8a9e098437459ddcbba5a7d49f0278bd841b89fb93e86683bd89334f6b5ab556834e1fb4ec86647e812438e17512ee87b01bd0679b3abf4a67fe7272eae0c4cd9ed174d70b2728e72361cded46a42d445dfe244efb55feb1eee13f614d30237ee399b4108bc596b8aab377ad98d22c87ce4ce976ec1ceac512c33d6941b715d9fa60882b4644f9a066dcd51ff6c429af37cfa38f06444e6682d09643b2866a23a42da0ae21a787e8fe40aa2b21aa55a10aa42097c9a219528ac4968eb12cec5f223791a40d21fcce05",
+ "3082083a30820722a003020102020900d5b6a4dc1fd8854a300d06092a864886f70d01010b05003081df310b300906035504061302444531253023060355040a0c1c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311f301d060355040b0c16542d53797374656d732054727573742043656e746572311c301a06035504080c134e6f7264726865696e205765737466616c656e310e300c06035504110c0535373235303110300e06035504070c074e65747068656e3120301e06035504090c17556e7465726520496e647573747269657374722e2032303126302406035504030c1d54656c65536563205365727665725061737320436c6173732032204341301e170d3137313230313130343733325a170d3230313230363233353935395a308180310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e311f301d060355040313166170706c2e676f7665726e696b75732d6173702e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100c1d969514392105ce65b089b7357f75356f076b21168233d1eb57ae81f826c74258ec4814c48a3e99633fcac1fb444412cba421c1569d21b6317b6614b096203ab5b605128671764d30186dec09716d2173bfab911a9ad3d2d0b850ff2595dd9c72113bd64879c39c39b3debbfdd7f8d68e8d1bdaf2cca0508583bd59b965ec5f4950e4fbbe48b7be351237d478253bc34ac5aed9448f5ae31878067bdad75179cb776ef19f8e49e62b830de8279142233030189c20008345553847b7edc6471bf7c15c98b087159b44faa5a35fe16adc285e4d8266fab49b7b4e7fbcbd91767e05dbb45a5564cb11abcbeb0ff66869ca72dd7919eae796340fb5b26fb8ecc65b8380d3eb30e46150725e2156ad156773a79b482133b846b247868a6d3fcc18f96cfc6044fb7678fd79c04fb580b7bfb86e3252554b9a97dfd6fb9ae0e0d8d663a56b471d37752fc88a172151494553d78a39ade4669076e5ddfa13fd684b7eb800efedf9af8f90d4bab6d80378b950d43ef6de6f9ca5dccb81ecbbf820126d90923c5b87462af2acf0fc460599b2d7022e488f20069e2b3e80e057ebbd1454891929c2e0252688a1c0e801eb8bec795251087a755a6edcd22759a5c1869550d63b0596cb5ac20a7e5cb11f5412598990092cbe058b4ec67b98dd9ed2b2a5f8b7994e92b89a1ef51517beb2e2594cb8007d514f988968c52246a18945fba0adf0203010001a382035430820350301f0603551d2304183016801494c87446f53ab4464826f82bca341e5626041200300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604148c76a1377b9cad8059a5d4126a53bc633671ca1c305a0603551d20045330513045060a2b06010401bd470d17013037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202308201030603551d1f0481fb3081f83040a03ea03c863a687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f536572766572506173735f436c6173735f322e63726c3081b3a081b0a081ad8681aa6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f43657274696669636174655265766f636174696f6e4c6973743082014906082b060105050701010482013b30820137303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072305206082b060105050730028646687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f436c6173735f325f43412e6365723081ab06082b0601050507300286819e6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f63414365727469666963617465300c0603551d130101ff0402300030210603551d11041a301882166170706c2e676f7665726e696b75732d6173702e6465300d06092a864886f70d01010b050003820101006376f829a32345d2d590176bf2294d9ab6fe44e6c7db3b467bd597eebda4121d6e8795ec33de253ff9f271857c4a1ddf4b80b080464a51741a53de5137be13fc482e41b3649afbb571bfec2a894022d933ca60c691a99f31fe40209e7ca2e7fcd15d33baf8c1d20e107750cbd8628bc883af062a622f29c36574decaf97ef00471bbbe81380042ab82e46788491e4f77e58168f154d5210748263bfb8b2c3c82937436f758e1b2360c22458803a304eb90a4617bdcaa591176f4002e63dce3c9a3c7dcec83472dec70346544105118227fce63bae6a6686950846f65f30de621c1e5d6b7b20f3ce7d8ebbd95667c89123adb9efcbdd5ea1ba6e71b152bea43d3"
],
- "tlsSettings" : {
- "protocolVersion": "TlsV1_0OrLater",
+ "tlsSettings": {
+ "protocolVersion": "TlsV1_0OrLater",
"_comment_1": "ciphers are ordered by preference",
"ciphers": [
- "ECDHE-ECDSA-AES256-GCM-SHA384",
+ "ECDHE-ECDSA-AES256-GCM-SHA384",
"ECDHE-RSA-AES256-GCM-SHA384",
"DHE-DSS-AES256-GCM-SHA384",
"DHE-RSA-AES256-GCM-SHA384",
@@ -71,15 +71,15 @@
],
"_comment_2": "prime256v1 := secp256r1",
"ellipticCurves": [
- "brainpoolP512r1",
+ "brainpoolP512r1",
"brainpoolP384r1",
"brainpoolP256r1",
"secp384r1",
"prime256v1",
"secp224r1"
],
- "signatureAlgorithms" : [
- "Rsa+Sha512",
+ "signatureAlgorithms": [
+ "Rsa+Sha512",
"Dsa+Sha512",
"Ec+Sha512",
"Rsa+Sha384",
@@ -94,34 +94,78 @@
]
},
- "tlsSettingsPsk" : {
- "protocolVersion": "TlsV1_1OrLater",
+ "tlsSettingsPsk": {
+ "protocolVersion": "TlsV1_1OrLater",
"_comment_1": "ciphers are ordered by preference",
"ciphers": [
- "RSA-PSK-AES256-GCM-SHA384",
+ "RSA-PSK-AES256-GCM-SHA384",
"RSA-PSK-AES256-CBC-SHA384",
"RSA-PSK-AES128-GCM-SHA256",
"RSA-PSK-AES128-CBC-SHA256",
"RSA-PSK-AES256-CBC-SHA"
],
"_comment_2": "ellipticCurves not needed",
- "signatureAlgorithms" : [
- "Rsa+Sha512",
+ "signatureAlgorithms": [
+ "Rsa+Sha512",
"Rsa+Sha384",
"Rsa+Sha256",
"Rsa+Sha224"
]
},
- "minStaticKeySizes": {
- "Rsa": 2000,
+ "tlsSettingsRemoteReader": {
+ "protocolVersion": "TlsV1_2OrLater",
+ "_comment_1": "ciphers are ordered by preference",
+ "ciphers": [
+ "ECDHE-RSA-AES256-GCM-SHA384",
+ "DHE-RSA-AES256-GCM-SHA384",
+ "ECDHE-RSA-AES256-SHA384",
+ "DHE-RSA-AES256-SHA256",
+ "ECDHE-RSA-AES128-GCM-SHA256",
+ "ECDHE-RSA-AES128-SHA256",
+ "DHE-RSA-AES128-SHA256"
+ ],
+ "ellipticCurves": [
+ "brainpoolP512r1",
+ "brainpoolP384r1",
+ "brainpoolP256r1",
+ "secp384r1",
+ "prime256v1",
+ "secp224r1"
+ ],
+ "signatureAlgorithms": [
+ "Rsa+Sha512",
+ "Rsa+Sha384",
+ "Rsa+Sha256"
+ ]
+ },
+
+ "tlsSettingsRemoteReaderPairing": {
+ "protocolVersion": "TlsV1_2OrLater",
+ "_comment_1": "ciphers are ordered by preference",
+ "ciphers": [
+ "RSA-PSK-AES256-GCM-SHA384",
+ "RSA-PSK-AES256-CBC-SHA384",
+ "RSA-PSK-AES128-GCM-SHA256",
+ "RSA-PSK-AES128-CBC-SHA256",
+ "RSA-PSK-AES256-CBC-SHA"
+ ],
+ "signatureAlgorithms": [
+ "Rsa+Sha512",
+ "Rsa+Sha384",
+ "Rsa+Sha256"
+ ]
+ },
+
+ "minStaticKeySizes": {
+ "Rsa": 2000,
"Dsa": 2000,
"Ec": 224
},
- "minEphemeralKeySizes": {
- "Rsa": 2000,
- "Dsa": 1024,
+ "minEphemeralKeySizes": {
+ "Rsa": 2000,
+ "Dsa": 2000,
"Ec": 224
},
@@ -134,13 +178,8 @@
"testCertDescr": "30820266060A04007F00070301030101A1160C14476F7665726E696B757320546573742044564341A21A1318687474703A2F2F7777772E676F7665726E696B75732E6465A31A0C18476F7665726E696B757320476D6248202620436F2E204B47A420131E68747470733A2F2F746573742E676F7665726E696B75732D6569642E6465A582014F0C82014B416E736368726966743A090D0A476F7665726E696B757320476D6248202620436F2E204B470D0A416D2046616C6C7475726D20390D0A3238333539204272656D656E090D0A0D0A452D4D61696C2D416472657373653A09686240626F732D6272656D656E2E6465090D0A0D0A5A7765636B20646573204175736C657365766F7267616E67733A0944656D6F6E7374726174696F6E20646573206549442D53657276696365090D0A0D0A5A757374C3A46E6469676520446174656E73636875747A61756673696368743A090D0A446965204C616E64657362656175667472616774652066C3BC7220446174656E73636875747A20756E6420496E666F726D6174696F6E736672656968656974206465722046726569656E2048616E73657374616474204272656D656E0D0A41726E647473747261C39F6520310D0A3237353730204272656D6572686176656EA64B134968747470733A2F2F746573742E676F7665726E696B75732D6569642E64653A3434332F417574656E742D44656D6F4170706C69636174696F6E2F5265636569766572536572766C6574A74631440420D2E54E1D26FC5DFC3408609831BBE4CFE3204365604849E7B094623566B54A760420E224D25B448DC054C023392CA11017751041D762F83D880895B3018D8EC2B290"
},
- "drivers": {
- "updateUrl": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_DRIVERS@/default-supported-devices.json"
- },
-
- "providers": {
- "updateUrl": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_PROVIDERS@/@DEFAULT_PROVIDER_FILE@",
- "iconsUpdateUrlBase": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_PROVIDERS@/provider/"
+ "updateServer": {
+ "baseUrl": "@REMOTE_CONFIG_URL@/updatable-files"
},
"updates": {
diff --git a/resources/default-providers-ios.json b/resources/default-providers-ios.json
deleted file mode 100644
index b443f43..0000000
--- a/resources/default-providers-ios.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "issueDate": "2015-10-29T06:25:00+1:00",
- "provider": [
- {
- "name": "Beantragung Schwerbehindertenausweis Saarland",
- "address": "https://gatewaylas.saarland.de/FV/Onlineantrag",
- "phone": "",
- "email": "",
- "postaladdress": "",
- "category": "citizen"
- },
- {
- "name": "Bürgerportal Rheinland Pfalz",
- "address": "http://www.rlpdirekt.de/rheinland-pfalz",
- "phone": "",
- "email": "",
- "postaladdress": "",
- "category": "citizen"
- },
- {
- "name": ":::(bit)kasten",
- "address": "https://www.bitkasten.de/",
- "phone": "",
- "email": "",
- "postaladdress": "",
- "category": "other"
- },
- {
- "name": "Bürgerkonto Test (Testausweis erforderlich)",
- "address": "https://bk.test.bos-asp.de/BuergerKontoTestSPTest/",
- "phone": "",
- "email": "",
- "postaladdress": "",
- "category": "other"
- },
- {
- "name": "OpenPGP-eID",
- "address": "https://pgp.governikus-eid.de/pgp",
- "phone": "",
- "email": "",
- "postaladdress": "",
- "category": "other"
- },
- {
- "name": "SkIDentity Service",
- "address": "https://skidentity.de/service",
- "phone": "",
- "email": "",
- "postaladdress": "",
- "category": "other"
- }
- ]
-}
diff --git a/resources/default-providers.json b/resources/default-providers.json
deleted file mode 100644
index 8cfc8f2..0000000
--- a/resources/default-providers.json
+++ /dev/null
@@ -1,964 +0,0 @@
-{
- "issueDate": "2017-09-15T11:00:00+1:00",
- "callcosts" : [
- {
- "prefixes" : ["1371", "1375"],
- "landline" : {
- "per-call" : 14
- }
- },
- {
- "prefixes" : ["1372", "1373", "1374", "138"],
- "landline" : {
- "per-minute" : 14
- }
- },
- {
- "prefixes" : ["1376"],
- "landline" : {
- "per-call" : 25
- }
- },
- {
- "prefixes" : ["1377"],
- "landline" : {
- "per-call" : 100
- }
- },
- {
- "prefixes" : ["1378", "1379"],
- "landline" : {
- "per-call" : 50
- }
- },
- {
- "prefixes" : ["1801"],
- "landline" : {
- "per-minute" : 3.9
- },
- "mobile" : {
- "per-minute" : 42
- }
- },
- {
- "prefixes": ["1802"],
- "landline" : {
- "per-call" : 6
- },
- "mobile" : {
- "per-minute" : 42
- }
- },
- {
- "prefixes" : ["1803"],
- "landline" : {
- "per-minute" : 9
- },
- "mobile" : {
- "per-minute" : 42
- }
- },
- {
- "prefixes" : ["1804"],
- "landline" : {
- "per-call" : 20
- },
- "mobile" : {
- "per-minute" : 42
- }
- },
- {
- "prefixes" : ["1805"],
- "landline" : {
- "per-minute" : 14
- },
- "mobile" : {
- "per-minute" : 42
- }
- },
- {
- "prefixes" : ["1806"],
- "landline" : {
- "per-call" : 20
- },
- "mobile" : {
- "per-call" : 60
- }
- },
- {
- "prefixes" : ["1807"],
- "free-seconds": 30,
- "landline" : {
- "per-minute" : 14
- },
- "mobile" : {
- "per-minute" : 42
- }
- }
- ],
- "provider": [
- {
- "shortName": {"" : ":::(bit)kasten"},
- "longDescription": {"": "Der :::(bit)kasten ist ein elektronischer Briefkasten, in dem Sie Ihre Post elektronisch von teilnehmenden Unternehmen und Behörden zum Beispiel Rechnungen, Vertragsunterlagen oder Bescheide sicher und rechtsverbindlich empfangen. Ihre Post erhalten Sie wie bisher anhand Ihrer Postanschrift, nur eben digital. Sie müssen keine persönliche Daten an Dritte herausgeben, Ihre Postadresse reicht für den elektronischen Versand an den :::(bit)kasten aus.
Eine Registrierung für den :::(bit)kasten ist nicht zwingend erforderlich. Ob Sie sich ein Konto anlegen möchten, entscheiden Sie selbst. Nach Login mit Ihrer Online-Ausweisfunktion können Sie Ihre Post abrufen und verwalten.
Da Ihre Post nicht mehr als Papierpost verschickt werden muss, sparen Sie Zeit und senken den Papierverbrauch."},
- "address": "https://www.bitkasten.de/",
- "homepage": "https://www.bitkasten.de/",
- "phone": "+49 911 6000 2874",
- "email": "nachricht@bitkasten.de",
- "postalAddress": "Wallensteinstr. 63
90431 Nürnberg",
- "category": "other",
- "tcTokenUrl": "https://www.bitkasten.de/portal/api/login/npa/createRequest?returnUrl=https%3A%2F%2Fwww.bitkasten.de%2Fportal%2Fapi%2Flogin%2Fnpa%2Flogin.html",
- "subjectUrls": ["https://www.bitkasten.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Allianz Maklerportal"},
- "address": "https://makler.allianz.de",
- "homepage": "https://makler.allianz.de",
- "phone": "+49 800/22 23 557 ",
- "email": "zviss.makler@allianz.de",
- "postalAddress": "Königinstraße 28
80802 München",
- "category": "insurance",
- "tcTokenUrl": "https://npa.allianz.de/azsecurity-npa-service/NpaEIDService/nparef/-wnfwSFGamtJotxe6_BKiLj",
- "tcTokenUrlInfo" : "TcToken URL contains dynamic request id but is accepted anyway.",
- "subjectUrls": ["https://npa.allianz.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Akteneinsicht in Stasi-Unterlagen"},
- "longName": {"" : "Akteneinsicht in Stasi-Unterlagen"},
- "shortDescription": {"": "Antragstellung auf Einsicht in Stasi-Unterlagen für Privatpersonen."},
- "longDescription": {"": "Privatpersonen können online mittels neuem Personalausweis ohne weitere Wege die Einsichtnahme in die von der Stasi angelegten Akten zur eigenen Person oder zu verstorbenen/vermissten nahen Angehörigen beantragen."},
- "address": "https://www.bstu.bund.de/DE/Akteneinsicht/Privatpersonen/Online-Antrag/online-antrag_node.html",
- "homepage": "https://www.bstu.bund.de",
- "phone": "+49 30 23 24-7000",
- "email": "post@bstu.bund.de",
- "postalAddress": "Der Bundesbeauftragte für die Unterlagen des Staatssicherheitsdienstes der ehemaligen Deutschen Demokratischen Republik (BStU)
Karl-Liebknecht-Straße 31/33
10178 Berlin",
- "image": "stasi_image.jpg",
- "icon": "stasi_icon.png",
- "category": "citizen",
- "subjectUrls": ["https://www.bstu-formulare.de/lip"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Ausweis Auskunft des Bundes"},
- "address": "https://www.buergerserviceportal.de/bund/ausweisapp/bspx_selbstauskunft",
- "homepage": "https://www.buergerserviceportal.de/",
- "phone": "+49 180-1-33 33 33",
- "email": "eID_buergerservice@bmi.bund.de",
- "postalAddress": "Bundesministerium des Innern
Alt-Moabit 101 D
10559 Berlin",
- "category": "citizen",
- "tcTokenUrl" : "https://www.buergerserviceportal.de:443/bund/ausweisapp/bspx_selbstauskunft/SamlAuthnRequestProvider",
- "subjectUrls": ["https://www.buergerserviceportal.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online"},
- "address": "https://www.bafoegonline.bva.bund.de/",
- "homepage": "http://www.bafoeg.bund.de/",
- "longDescription": {"": "Mit Ihrer Online-Ausweisfunktion können Sie sich beim Bundesverwaltungsamt für das BAföG-Rückzahlungsverfahren anmelden und sowohl Ihre persönlichen Daten als auch die erforderlichen Nachweise sicher und schnell elektronisch übermitteln. Sie müssen die Nachweise nicht mehr per Post senden.
Die Online-Ausweisfunktion vereinfacht und beschleunigt das BAföG-Rückzahlungsverfahren."},
- "phone": "+49 22899358 - 4500",
- "email": "",
- "postalAddress": "Bundesverwaltungsamt
BT-BAföG
50728 Köln",
- "category": "citizen",
- "tcTokenUrl" : "",
- "clientUrl" : "https://www.bafoegonline.bva.bund.de/bafoeg-online/Bafoeg/flow/anmeldenMitNpaPreFlow",
- "subjectUrls": ["https://e-id.bva.bund.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online Bayern (AKDB)"},
- "longDescription": {"": "In Bayern können Sie Ihr BAföG für ein Studium bzw. eine Ausbildung in Bayern, Österreich, Liechtenstein oder der Schweiz nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch mit der Online-Ausweisfunktion bequem und schnell im Internet.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
- "address": "https://afoegfofa.osrz-akdb.de",
- "homepage": "https://afoegfofa.osrz-akdb.de",
- "phone": "+49 89 / 5903 - 0",
- "email": "",
- "postalAddress": "Anstalt für Kommunale Datenverarbeitung in Bayern (AKDB)
Hansastraße 12-16
80686 München",
- "category": "citizen",
- "subjectUrls": ["https://www.buergerserviceportal.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online Bayern (Studentenwerk)"},
- "address": "https://www.bafoeg-bayern.de",
- "homepage": "https://www.bafoeg-bayern.de",
- "phone": "+49 800-223 63 41",
- "email": "webmaster@bafoeg-bayern.de",
- "postalAddress": "Studentenwerk Niederbayern/Oberpfalz, Anstalt des öffentlichen Rechts
Administration BAföG-Bayern
Albertus-Magnus-Straße 4
93053 Regensburg",
- "category": "citizen",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Berlin"},
- "longName": {"" : "BAföG Online Berlin"},
- "shortDescription": {"": "BAföG-Anträge und Formblätter online ausfüllen und unterschreiben."},
- "longDescription": {"": "Sie wollen einen Antrag auf Ausbildungsförderung nach dem BAföG stellen? Mit dem neuen Personalausweis / elektronischen Aufenthaltstitel können Sie Ihren Antrag elektronisch signieren und an das Amt übermitteln. Ebenso können Ihre Eltern und ggf. Ihr Ehepartner die nötigen Formulare signieren."},
- "address": "https://www.berlin-bafoeg.de",
- "homepage": "https://www.berlin-bafoeg.de",
- "phone": "+49 30 939 39 - 70",
- "email": "info@stw.berlin",
- "postalAddress": "studierendenWERK BERLIN
BAföG-Amt
Behrenstraße 40/41
10117 Berlin",
- "image": "BafoegBerlin_image.jpg",
- "icon": "BafoegBerlin_icon.png",
- "category": "citizen",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online Brandenburg"},
- "longDescription": {"": "In Brandenburg können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
- "address": "https://www.bafoeg-brandenburg.de",
- "homepage": "https://www.bafoeg-brandenburg.de",
- "phone": "+49 331 / 866 45 60",
- "email": "mwfk@mwfk.brandenburg.de",
- "postalAddress": "Ministerium für Wissenschaft, Forschung und Kultur
Presse- und Öffentlichkeitsarbeit ",
- "category": "citizen",
- "subjectUrls": ["https://www.bafoeg-brandenburg.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online Hamburg"},
- "longDescription": {"": "In Hamburg können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die neue Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
- "address": "https://bafoeg-online.hamburg.de",
- "homepage": "https://bafoeg-online.hamburg.de",
- "phone": "+49 800-223 63 41",
- "email": "Marita.Porr@bwfg.hamburg.de",
- "postalAddress": "Ressortleiter Online-Redaktion der Behörde für Wissenschaft, Forschung und Gleichstellung:
Kommunikation
Daniel Drexelius
Hamburger Straße 37
22083 Hamburg",
- "category": "citizen",
- "subjectUrls": ["https://bafoeg-online.hamburg.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Hessen"},
- "longName": {"" : "BAföG/AFBG hessenweit"},
- "shortDescription": {"": "BAföG und AFBG Online-Antragstellung Hessen"},
- "longDescription": {"": "Mit Hilfe dieses Angebotes können Antragstellende, Ehegatten / eingetragene Lebenspartner und Eltern die erforderlichen Antragsformblätter online ausfüllen, mit Hilfe der eID rechtswirksam unterschreiben und papierlos dem zuständigen Amt übermitteln."},
- "address": "https://www.bafoeg-hessen.de",
- "homepage": "http://www.hmwk.hessen.de",
- "phone": "+49 611 32 - 3551",
- "email": "hebav@hmwk.hessen.de",
- "postalAddress": "Hessisches Ministerium für Wissenschaft und Kunst
Rheinstraße 23-25
65185 Wiesbaden ",
- "image": "BafoegHessen_image.jpg",
- "icon": "BafoegHessen_icon.png",
- "category": "citizen",
- "subjectUrls": ["https://www.bafoeg-hessen.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online Mecklenburg-Vorpommern"},
- "address": "http://www.bm.regierung-mv.de/bafoeg",
- "homepage": "http://www.regierung-mv.de/",
- "phone": "",
- "email": "",
- "postalAddress": "Ministerium für Bildung, Wissenschaft und Kultur Mecklenburg-Vorpommern
Werderstraße 124
19055 Schwerin",
- "category": "citizen",
- "subjectUrls": ["https://fms.mv-regierung.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online Nordrhein-Westfalen"},
- "longDescription": {"": "In Nordrhein-Westfalen können Sie mit der Online-Ausweisfunktion Ihren Antrag auf BAföG für eine Ausbildung (Schulausbildung, Studium in Nordrhein-Westfalen sowie Studium in Belgien, den Niederlanden oder Luxemburg) oder Ihren Antrag auf Aufstiegsfortbildungsförderung (z. B. für die Meisterausbildung) in Nordrhein-Westfalen bequem und schnell im Internet stellen.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
- "address": "https://www.bafoeg-online.nrw.de",
- "homepage": "https://www.bafoeg-online.nrw.de",
- "phone": "+49 385-588 7145",
- "email": "m.boehm@bm.mv-regierung.de",
- "postalAddress": "Ministerium für Bildung, Wissenschaft und Kultur Mecklenburg-Vorpommern
Abteilung 1
Referat 140
Werderstraße 124
19055 Schwerin",
- "category": "citizen",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online Schleswig-Holstein"},
- "longDescription": {"": "In Schleswig-Holstein können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
- "address": "https://bafoeg.schleswig-holstein.de/BAfoeGOnline/ABAfoeG/",
- "homepage": "https://bafoeg.schleswig-holstein.de/",
- "phone": "+49 431 988-0",
- "email": "bafoeg@sozmi.landsh.de",
- "postalAddress": "Ministerium für Soziales, Gesundheit, Wissenschaft und Gleichstellung des Landes Schleswig-Holstein
Abteilung VIII 5
Düsternbrooker Weg 104
24105 Kiel",
- "category": "citizen"
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "BAföG Online Sachsen"},
- "address": "https://fs.egov.sachsen.de/formserv/findform?shortname=bafoeg&formtecid=11&areashortname=SMWK_bafoeg",
- "homepage": "http://www.studieren.sachsen.de/",
- "phone": "+49 351 564-1080",
- "email": "info@sk.sachsen.de",
- "postalAddress": "Sächsische Staatskanzlei
Redaktion Amt24 / Bürgerbüro
01095 Dresden",
- "category": "citizen",
- "subjectUrls": ["https://fs.egov.sachsen.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "bahn.de"},
- "address": "https://www.bahn.de/p/view/meinebahn/login.shtml",
- "homepage": "https://www.bahn.de",
- "phone": "+49 1806 - 996633",
- "email": "reiseportal@bahn.de",
- "postalAddress": "DB Vertrieb GmbH
Stephensonstraße 1
60326 Frankfurt am Main",
- "category": "other",
- "subjectUrls": ["https://www.bahn.de/"]
- },
- {
- "shortName": {"" : "Beantragung Schwerbehindertenausweis Bayern"},
- "longDescription": {"": "Einen Schwerbehindertenantrag können Sie bei der Landesbehörde Zentrum Bayern Familie und Soziales (ZBFS) mit der Online-Ausweisfunktion komplett papierlos stellen.
Der papierlose Antrag ist ein bedeutender Schritt auf dem Weg zur digitalen Verwaltung – online, schnell und unkompliziert.
Das Online-Verfahren hat weitere Vorteile. Gerade für sehbehinderte Menschen ist die papiergebundene Schriftform ein Hindernis. Digitale Angebote bieten ihnen die Chance, Behördenangelegenheiten ein Stück weit selbständiger erledigen zu können.
Zu 100 Prozent digital – ein bisschen weniger lästiger Papierkram. Digitalisierung ist somit ein Beitrag zur Inklusion."},
- "address": "https://www.schwerbehindertenantrag.bayern.de",
- "homepage": "http://www.zbfs.bayern.de/",
- "phone": "+49 921 605-03",
- "email": "poststelle@zbfs.bayern.de",
- "postalAddress": "Zentrum Bayern Familie und Soziales
95440 Bayreuth",
- "category": "citizen",
- "subjectUrls": ["https://www.buergerserviceportal.de"]
- },
- {
- "shortName": {"" : "Beantragung Schwerbehindertenausweis Saarland"},
- "longDescription": {"": "Als erstes Bundesland bietet Ihnen das Saarland mit Schweb.NET Online die Möglichkeit, Ihren Erst- und Verschlimmerungsantrag auf Feststellung einer Behinderung nach dem Schwerbehindertenrecht online beim Landesamt für Soziales zu stellen.
Weite Wege werden dadurch vermieden. Bearbeitungszeiten und Arbeitsabläufe werden verkürzt.
Der Antrag ist selbsterklärend und nutzerfreundlich. "},
- "address": "https://gatewaylas.saarland.de/FV/Onlineantrag",
- "homepage": "http://www.saarland.de/index.htm",
- "phone": "+49 681/9978-2181",
- "email": "",
- "postalAddress": "Ministerium für Soziales, Gesundheit, Frauen und Familie
Franz-Josef-Röder-Straße 23
66119 Saarbrücken",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://tbklas.saarland.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",
- "homepage": "https://www.arbeitsagentur.de/",
- "phone": "+49 911/179-0",
- "email": "Zentrale@arbeitsagentur.de ",
- "postalAddress": "Bundesagentur für Arbeit
Regensburger Straße 104
90478 Nürnberg",
- "category": "other",
- "tcTokenUrl" : "",
- "clientUrl" : "https://formular.arbeitsagentur.de/eantrag/fallinfo-npa.page",
- "subjectUrls": ["https://formular.arbeitsagentur.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bundestag ePetition"},
- "longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich einfach und sicher am Petitionsportal des Deutschen Bundestages
- registrieren,
- eine Petition einreichen sowie
- eine Petition mitzeichnen."},
- "address": "https://epetitionen.bundestag.de/epet/anmelden.html",
- "homepage": "http://www.bundestag.de/",
- "phone": "+49 30 227-35257",
- "email": "post.pet@bundestag.de",
- "postalAddress": "Sekretariat des Petitionsausschusses
Platz der Republik 1
11011 Berlin",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://epetitionen.bundestag.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bürgerantrag Bremen"},
- "longDescription": {"": "Mit der Online-Ausweisfunktion können Sie im Bundesland Bremen Bürgeranträge elektronisch mitzeichnen oder Unterschriften für Ihren eigenen Bürgerantrag sammeln. Mit nur 5.000 Mitzeichnerinnen und Mitzeichnern – egal ob online oder auf Papier – können Sie Anträge direkt in den Bremische Bürgerschaft (Landtag) einbringen. Für die Stadtbürgerschaft Bremen genügen sogar 4.000 Unterschriften."},
- "address": "https://www.buergerantrag.bremen.de",
- "homepage": "http://www.bremische-buergerschaft.de/",
- "phone": "",
- "email": "webmaster@buergerschaft.bremen.de",
- "postalAddress": "",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://servicekonto.bremen.de"]
- },
- {
- "shortName": {"" : "Bürgerdienste der Stadt Münster"},
- "longDescription": {"": "Die Stadt Münster bietet auf ihrer Webseite eine Reihe von Online-Diensten an. Dort können Sie mit der Online-Ausweisfunktion unter anderem:
- eine Personenstandsurkunde bestellen,
- Ihr Wunschkennzeichen beantragen,
- geografische Karten bestellen,
- Elektroschrott zur Abholung anmelden,
- eine Erklärung zum Elterneinkommen für die Festsetzung des Elternbeitrags für die Kindertagesbetreuung abgeben,
- eine Sondernutzungserlaubnis für private Baumaßnahmen an öffentlichen Straßen beantragen,
- eine Großanlage mit zentraler Trinkwassererwärmung anzeigen,
- einen Fahrradfund melden,
- ein Reitkennzeichen beantragen,
- Mietspiegel-Broschüren bestellen."},
- "address": "https://www.stadt-muenster.de/rathaus/online-dienste.html",
- "homepage": "http://www.muenster.de/",
- "phone": "+49 251/4 92-0",
- "email": "stadtverwaltung@stadt-muenster.de",
- "postalAddress": "Stadt Münster
48127 Münster",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bürgerportal Baden-Württemberg"},
- "longDescription": {"": "Das Bürgerportal ,mein service-bw' bietet Bürgerinnen und Bürgern mit dem Personalausweis praktische Anwendungen für die Online-Ausweisfunktion. Das Portal bietet seinen Nutzern unter anderem:
- sicheres Registrieren und Anmelden, um Behördengänge im Internet zu erledigen
- verschlüsselte Ablage persönlicher Daten und Dateien in einem Datenspeicher im Internet, dem sogenannten Dokumentensafe
- orts- und zeitunabhängiger Zugang zu den Daten im Dokumentensafe sowie die Möglichkeit, diese elektronisch an Behörden weiterzuleiten (z. B. für eine Gewerbeanmeldung)."},
- "address": "http://service-bw.de/zfinder-bw-web/welcome.do?showMsbwDetails=1",
- "homepage": "https://www.service-bw.de/",
- "phone": "",
- "email": "service-bw@im.bwl.de",
- "postalAddress": "Ministerium für Inneres, Digitalisierung und Migration Baden-Württemberg
Willy-Brandt-Straße 41
70173 Stuttgart",
- "category": "citizen",
- "tcTokenUrlInfo" : "Unable to locate URL",
- "subjectUrls": ["https://eid.service-bw.de"]
- },
- {
- "shortName": {"" : "Bürgerportal Rheinland Pfalz"},
- "longDescription": {"": "Über 80% der Meldebehörden und über 90% der Standesämter in Rheinland-Pfalz bieten Ihnen über das Portal www.rlpdirekt.de Verwaltungsleistungen mit der Online-Ausweisfunktion an, für die Sie nicht mehr zur Behörde gehen müssen, z. B.:
- Kfz abmelden
- Führungszeugnis beantragen,
- Meldebescheinigung beantragen,
- Aufenthaltsbescheinigung beantragen,
- Übermittlungssperre einrichten,
- Auskunft aus dem Gewerbezentralregister beantragen,
- Beurkundung im Personenstandswesen beantragen.
Welche Dienste in Ihrer Kommune mit der Online-Ausweisfunktion genutzt werden können, erfahren Sie, wenn Sie auf dem Portal unter \"Stadt/Ort\" Ihren Wohnort eingeben."},
- "address": "http://www.rlpdirekt.de/rheinland-pfalz",
- "homepage": "http://www.rlpdirekt.de/rheinland-pfalz/",
- "phone": "+49 6131 / 6277-0",
- "email": "support@kommwis.de",
- "postalAddress": "KommWis GmbH
Gesellschaft für Kommunikation und Wissenstransfer mbH
Hindenburgplatz 3
55118 Mainz",
- "category": "citizen",
- "tcTokenUrlInfo" : "PLZ required",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bürgerservice-Portal Kreis Herford"},
- "longName": {"" : "Bürgerservice-Portal Kreis Herford"},
- "shortDescription": {"": "Anträge an die Kreisverwaltung Herford online erfassen."},
- "longDescription": {"": "In unserem Bürgerservice-Portal können Sie Anträge an die Kreisverwaltung Herford online erfassen und direkt zur weiteren Bearbeitung an die zuständigen Stellen übermitteln."},
- "address": "https://www.buergerserviceportal.nrw/krz/lkrherford",
- "homepage": "https://www.kreis-herford.de/",
- "phone": "+49 5223/988 - 500",
- "email": "portal@kreis-herford.de",
- "postalAddress": "Kreis Herford
Amtshausstraße 3
32051 Herford",
- "image": "KreisHerford_image.jpg",
- "icon": "KreisHerford_icon.png",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.buergerserviceportal.nrw"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bürgerservice-Portal Kreis Minden-Lübbecke"},
- "longName": {"" : "Bürgerservice-Portal Kreis Minden-Lübbecke"},
- "shortDescription": {"": "Anträge an den Kreis Minden-Lübbecke online erfassen."},
- "longDescription": {"": "In unserem Portal können Sie Ihren Antrag an den Kreis Minden-Lübbecke direkt online erfassen und elektronisch übermitteln."},
- "address": "https://www.buergerserviceportal.nrw/krz/mindenluebbecke",
- "homepage": "http://www.minden-luebbecke.de/",
- "phone": "+49 571 807-0",
- "email": "info@minden-luebbecke.de",
- "postalAddress": "Kreis Minden-Lübbecke
Portastraße 13
32423 Minden",
- "image": "KreisMindenLuebbeke_image.jpg",
- "icon": "KreisMindenLuebbeke_icon.png",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.buergerserviceportal.nrw"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bürgerservice-Portal Stadt Lage"},
- "longName": {"" : "Bürgerservice-Portal Stadt Lage"},
- "shortDescription": {"": "Anträge online erfassen und an die Verwaltung weiterleiten."},
- "longDescription": {"": "Das Bürgerservice-Portal bietet die Möglichkeit, Anträge an die Verwaltung der Stadt Lage online zu erfassen und elektronisch zur weiteren Bearbeitung weiterzuleiten."},
- "address": "https://www.buergerserviceportal.nrw/krz/lage",
- "homepage": "http://www.lage.de/",
- "phone": "+49 5232/601300",
- "email": "Buergerbuero@lage.de",
- "postalAddress": "Bürgerbüro Lage
Bergstraße 21
32791 Lage",
- "image": "StadtLage_image.jpg",
- "icon": "StadtLage_icon.png",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.buergerserviceportal.nrw"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bürgerservice-Portal Stadt Norderstedt"},
- "longDescription": {"": "In Norderstedt können Sie mit der Online-Ausweisfunktion über das Bürgerservice-Portal folgende Bürgerdienste nutzen:
- Meldebestätigung
- Aufenthaltsbescheinigung
- Übermittlungssperren
- Umzug innerhalb der Stadt
- Voranzeige einer Anmeldung
- Briefwahlunterlagen
- Führungszeugnis
Darüber hinaus können Sie Ihr persönliches Bürgerkonto einrichten. Nach Einrichtung des Bürgerkontos werden die bei einer Nutzung des Bürgerservice-Portals notwendigen persönlichen Daten komfortabel aus Ihrem Bürgerkonto übernommen. Damit sparen Sie Zeit und erleichtern den Behörden die Bearbeitung Ihres Antrags."},
- "address": "https://norderstedt.de/digital",
- "homepage": "https://www.norderstedt.de/",
- "phone": "+49 40 - 535 95-0 ",
- "email": "info@norderstedt.de",
- "postalAddress": "Stadt Norderstedt
Rathausallee 50
22846 Norderstedt",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://sh.buergerserviceportal.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bürgerservice-Portal Wiesbaden"},
- "longDescription": {"": "In Wiesbaden können Sie mit der Online-Ausweisfunktion über das Bürgerservice-Portal
- Briefwahlunterlagen,
- Meldebestätigungen,
- Aufenthaltsbescheinigungen,
- Übermittlungssperren,
- Führungszeugnisse und
- Auskünfte aus dem Gewerbezentralregister beantragen."},
- "address": "https://www.buergerserviceportal.de/hessen/wiesbaden",
- "homepage": "http://www.wiesbaden.de/",
- "phone": "+49 611 / 31 - 8300",
- "email": "buergeramt@wiesbaden.de",
- "postalAddress": "Postfach 3920
65029 Wiesbaden",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.buergerserviceportal.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Bürgerservice-Portale der bayerischen Kommunen"},
- "longDescription": {"": "Das BayernPortal ist das zentrale Verwaltungsportal für den Freistaat Bayern und die bayerischen Kommunen.
Es bietet Ihnen eine einheitliche Anlaufstelle sowie einen einheitlichen Zugang zu den staatlichen und kommunalen Verwaltungsdienstleistungen in Bayern. Sie erreichen darüber mehr als 150 Online-Dienstleistungen, mehr als 2.000 Fachdatenbanken, über 2.500 Formulare und Merkblätter sowie mehr als 20.000 Ansprechpartnerinnen und Ansprechpartner bei Behörden.
Über das BayernPortal können Sie sich zudem ein Servicekonto einrichten, das BayernID genannt wird und mit dem Sie die Verwaltungsdienstleistungen aller angeschlossenen Kommunen und des Freistaats Bayern einfach und sicher nutzen können. Die Einrichtung Ihrer BayernID und die Anmeldung an diesem persönlichen Servicekonto können Sie auch mit der Online-Ausweisfunktion vornehmen.
Ihre in Ihrem Servicekonto gespeicherten Daten werden automatisch in Ihre Anträge übernommen. Dadurch sparen Sie Zeit und erleichtern der Behörde die Bearbeitung Ihres Anliegens.
In Verbindung mit dem Bayerischen E-Government Gesetz bietet Ihnen die BayernID die Möglichkeit, die in vielen Fällen erforderliche Schriftform zu ersetzen und damit Ihre Anträge ohne handschriftliche Unterschrift, d. h. vollständig online abzuwickeln. Sie müssen nicht mehr zur Behörde gehen oder Unterlagen per Post senden."},
- "address": "https://www.buergerserviceportal.de/bayern/classic/",
- "homepage": "http://www.freistaat.bayern/",
- "phone": "+49 (0)89 12 22 20",
- "email": "direkt@bayern.de",
- "postalAddress": "Postfach 22 00 03
80535 München",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.buergerserviceportal.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "CosmosDirekt Kundenportal meinCosmosDirekt"},
- "longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich einfach und sicher am Kundenportal ,mein Cosmos-Direkt' registrieren und anmelden. Im Portal haben Sie die Möglichkeit Ihre Versicherungen zu verwalten. Sie können online einen Antrag für ein Tagesgeldkonto stellen oder auch schnell und einfach Ihre persönlichen Daten, z.B. Ihre Adresse, ändern."},
- "address": "https://www.cosmosdirekt.de/services/mcd-info",
- "homepage": "https://www.cosmosdirekt.de/",
- "phone": "+49 681-9 66 68 00",
- "email": "info@cosmosdirekt.de",
- "postalAddress": "CosmosDirekt
66101 Saarbrücken",
- "image": "CosmosDirekt_image.jpg",
- "icon": "CosmosDirekt_icon.png",
- "category": "insurance",
- "tcTokenUrl" : "https://www.cosmosdirekt.de/nPa/IdentifizierenNPA?back_url=https://www.cosmosdirekt.de/meincosmosdirekt-registrierung/*ident=1",
- "subjectUrls": ["https://www.cosmosdirekt.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "d.velop – foxdox.de: Dokumente sicher ablegen"},
- "longDescription": {"": "Dokumente, Verträge, Reiseunterlagen, Bilder und vieles mehr können Sie einfach in Ihren persönlichen foxdox-Account hochladen.
Sie melden sich mit der Online-Ausweisfunktion an und können von überall und jederzeit auf Ihre Dokumentenablage zugreifen, z. B. um sie innerhalb der Familie, Ihren Kollegen oder auch Ihrem Steuerberater zur Verfügung zu stellen.
Quittungen und Belege können Sie einfach fotografieren oder scannen, hochladen und sicher in Ihrem foxdox-Account mit übersichtlichem Ordner-System speichern. Eine separate Ablage oder Kopien sind nicht mehr notwendig. Alle Daten liegen sicher und verschlüsselt in einem Rechenzentrum in Deutschland.
Ein Standard-Account ist kostenfrei erhältlich."},
- "address": "https://mein.foxdox.de/",
- "homepage": "https://www.d-velop.de/foxdox/foxdox-home",
- "phone": "+49 (0) 2542 9307-0",
- "email": "support@foxdox.de",
- "postalAddress": "d.velop business services GmbH
Schildarpstraße 6-8
48712 Gescher",
- "category": "other",
- "tcTokenUrl" : "https://mein.foxdox.de/npa_login?action=gettctoken&next=/documents",
- "subjectUrls": ["https://mein.foxdox.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Datev - Arbeitnehmer online / Lohn- und Gehaltsabrechnung"},
- "longDescription": {"": "Nach einmaliger Freischaltung durch den Arbeitgeber erhalten Sie Ihren persönlichen Aktivierungscode per Post. Mit dem Aktivierungscode registrieren Sie sich an dem Portal „DATEV Arbeitnehmer online“, dazu können Sie u.a. die Online-Ausweisfunktion nutzen. Danach können Sie jederzeit Ihre Brutto/Netto-Abrechnungen, Sozialversicherungsnachweise und Lohnsteuerbescheinigungen online abrufen. Sie haben dadurch jederzeit und überall einen schnellen Überblick über Ihre gesamten Lohn- und Gehaltsdokumente. "},
- "address": "https://www.datev.de/ano/",
- "homepage": "https://www.datev.de",
- "phone": "+49 800 3283825",
- "email": "info@datev.de",
- "postalAddress": "DATEV eG
90329 Nürnberg",
- "category": "other",
- "tcTokenUrlInfo" : "Address is faulty",
- "subjectUrls": ["https://secure6.datev.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Deutsche Post AG - POSTIDENT Verfahren"},
- "longName": {"" : "Deutsche Post AG - POSTIDENT Verfahren"},
- "shortDescription": {"": "Durch das Onlineverfahren POSTIDENT mit dem neuem Personalausweis, können Sie sich schnell und einfach online mit Ihrem neuen Personalausweis identifizieren."},
- "longDescription": {"": "Durch das Onlineverfahren POSTIDENT mit dem neuem Personalausweis, können Sie sich schnell und einfach online mit Ihrem neuen Personalausweis z.B. zur Eröffnung eines Tagesgeldkontos identifizieren: Sie werden hierzu von Ihrer Bank automatisch auf das POSTIDENT Portal geleitet und können sich mithilfe Ihres neuen Personalausweises mit freigeschalteter Online-Ausweisfunktion, einem Kartenlesegerät sowie der AusweisApp2 in wenigen Minuten sicher identifizieren."},
- "address": "https://www.deutschepost.de/de/p/postident/identifizierungsverfahren/postident-npa.html",
- "homepage": "https://www.deutschepost.de/de/p/postident.html",
- "email": "info@deutschepost.de",
- "postalAddress": "Deutsche Post AG
Charles-de-Gaulle-Str. 20
53113 Bonn",
- "image": "DeutschePost_image.jpg",
- "icon": "DeutschePost_icon.png",
- "category": "finance"
- },
- {
- "shortName": {"" : "Deutsche Rentenversicherung"},
- "longDescription": {"": "Mit der Online-Ausweisfunktion im neuen Personalausweis können Sie ...
- auf Informationen Ihres Rentenkontos im Kundenbereich ,eService' sicher zugreifen (z. B. Versicherungsverlauf und Beitragsrechnung),
- Ihre Rentenauskunft online abrufen,
- schnell und einfach Ihre persönlichen Daten ändern (z. B. Ihre Adresse und Bankverbindung)."},
- "address": "https://www.eservice-drv.de/OnlineDiensteWeb/init.do?npa=true",
- "homepage": "http://www.deutsche-rentenversicherung.de/",
- "phone": "+49 800 100 048070",
- "email": "Online-Dienste@deutsche-rentenversicherung.de",
- "postalAddress": "Ruhrstraße 2
10709 Berlin",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.eservice-drv.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "eAntrag der Investitionsbank Berlin (IBB)"},
- "longDescription": {"": "Im Kundenportal der Investitionsbank Berlin können Sie verschiedene Förder-Produkte durchgängig elektronisch beantragen:
- Berlin Kapital
- IBB Familienbaudarlehen
- IBB Wohnraum modernisieren
- KMU-Fonds über 25.000 Euro
- Liquiditätshilfen BERLIN
- Mikrokredit aus dem KMU-Fonds
- Pro FIT (Projektvorschlagsphase)
- Pro FIT (Frühphasenfinanzierung)
Für die rechtsverbindliche, fristwahrende Antragstellung der Produkte
- GRW
- Innovationsassistent
- PFI - Gemeinschaft
- PFI - KMU
- PFI - Netzwerk
- ProFIT (Projektantragsphase)
gilt aus verwaltungsrechtlichen Anforderungen das Schriftformerfordernis: Die elektronische Antragstellung ist zwingend nachträglich schriftlich zu bestätigen.
Mit der Online-Ausweisfunktion können Sie sich bequem und sicher elektronisch legitimieren und müssen dadurch Ihre Identität weder per Postident-Verfahren noch persönlich vor Ort nachweisen.
Nach Ihrer Legitimierung können Sie über eine persönliche Dokumentenablage die rechtsverbindliche Kommunikation mit Ihrem IBB-Ansprechpartner online – und unabhängig von Öffnungszeiten oder Postwegen – über das Kundenportal erledigen."},
- "address": "https://www.ibb.de/de/service/eantrag/eantrag.html",
- "homepage": "http://www.ibb.de/",
- "phone": "+49 30 / 2125 - 0",
- "email": "info@ibb.de",
- "postalAddress": "Investitionsbank Berlin (IBB)
Bundesallee 210
10719 Berlin",
- "category": "finance",
- "tcTokenUrlInfo" : "Registration required.",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "easy Login - Der Zugang für Finanz- & Versicherungsvermittler"},
- "address": "http://www.easy-login.de",
- "homepage": "http://www.easy-login.de",
- "phone": "+49 921 75758-555",
- "email": "info@easy-login.de",
- "postalAddress": "easy Login GmbH
Bindlacher Str. 4
95448 Bayreuth",
- "category": "insurance",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://easy-login.vdg-portal.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "ELSTER"},
- "longName": {"" : "ELSTER - Die elektronische Steuererklärung"},
- "shortDescription": {"": "Abwicklung der Steuererklärungen und -anmeldungen über das Internet."},
- "longDescription": {"": "ELSTER bietet im Rahmen der Registrierung, welche Voraussetzung für die Abwicklung der Steuererklärungen und Steueranmeldungen über das Internet ist, die Möglichkeit der Nutzung der Online-Ausweisfunktion."},
- "address": "https://www.elster.de",
- "homepage": "https://www.elster.de",
- "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",
- "icon": "elster_icon.png",
- "category": "citizen",
- "tcTokenUrlInfo" : "Registration required.",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "ERGO Direkt Lebensversicherung AG"},
- "address": "https://ergodirekt.de/de/persoenlicherbereich.html#login",
- "homepage": "https://ergodirekt.de",
- "phone": "+49 800 / 444 1000",
- "email": "beratung@ergodirekt.de",
- "postalAddress": "Karl-Martell-Straße 60
90344 Nürnberg",
- "category": "insurance",
- "subjectUrls": ["https://ergodirekt.de"]
- },
- {
- "shortName": {"" : "Feinstaubplakette beantragen"},
- "longDescription": {"": "In Berlin können Sie eine Feinstaubplakette für alle Kraftfahrzeuge mit der Online-Ausweisfunktion beantragen. Der Antrag ist unabhängig davon, ob Ihr Fahrzeug in Berlin, bei einer anderen deutschen Zulassungsbehörde, oder im Ausland zugelassen ist.
Ihre persönlichen Daten werden verschlüsselt übertragen. Sie müssen Ihre Angaben nicht per Hand eingeben und die Behörde erhält zuverlässig korrekte Informationen, die rasch weiterverarbeitet werden können.
Auf der Internet-Seite Umweltzonen und Feinstaubplaketten der Senatsverwaltung für Stadtentwicklung und Umwelt können Sie sich vorab informieren, welche Plakette Ihrem Fahrzeug zugeteilt werden kann."},
- "address": "http://www.berlin.de/labo/fahrzeuge/kfz-zulassung/feinstaubplakette/shop.85047.php",
- "homepage": "https://www.berlin.de",
- "phone": "+49 30 90269 – 0",
- "email": "",
- "postalAddress": "Direktorin Landesamt für Bürger- und Ordnungsangelegenheiten
Friedrichstr. 219
10958 Berlin",
- "category": "other",
- "tcTokenUrlInfo" : "Car lizence number required",
- "subjectUrls": []
- },
- {
- "exclude": ["ios", "android"],
- "shortName": {"" : "Führungszeugnis und Auskunft aus dem Gewerbezentralregister"},
- "longDescription": {"": "Sie benötigen ein Führungszeugnis oder eine Auskunft aus dem Gewerbezentralregister? Mit dem Personalausweis im Scheckkartenformat können Sie einen Behördengang sparen. Weitere Voraussetzungen sind die freigeschaltete Online-Ausweisfunktion und ein passendes Kartenlesegerät für Ihren Computer. Auf diese Weise kann eindeutig identifiziert werden, wer den Antrag stellt. Ausländische Mitbürger, die keinen deutschen Personalausweis besitzen, können in gleicher Weise die entsprechende Funktion ihres elektronischen Aufenthaltstitels nutzen.
Neben Führungszeugnissen können auch Auskünfte aus dem Gewerbezentralregister über das neue Online-Portal des BfJ beantragt werden. Solche Auskünfte benötigen Unternehmen, die sich in Ausschreibungsverfahren um öffentliche Aufträge bewerben, recht häufig. Auch hier kann das Online-Verfahren den Aufwand erheblich senken."},
- "address": "https://www.fuehrungszeugnis.bund.de/",
- "homepage": "https://www.bundesjustizamt.de",
- "phone": "+49 228 99 410-40",
- "email": "poststelle@bfj.bund.de",
- "postalAddress": "Bundesamt für Justiz
53094 Bonn",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.fuehrungszeugnis.bund.de/ffw"]
- },
- {
- "shortName": {"" : "Halterauskunft zu einem KFZ beantragen"},
- "longDescription": {"": "In Berlin können Sie für Fahrzeuge, die bei der Zulassungsbehörde Berlin registriert sind, mit der Online-Ausweisfunktion eine Halterauskunft beantragen.
Ihre persönlichen Daten werden verschlüsselt übertragen. Sie müssen Ihre Angaben nicht per Hand eingeben und die Behörde erhält zuverlässig korrekte Informationen, die rasch weiterverarbeitet werden können.
Bitte beachten Sie, dass eine Halterauskunft nur erteilt werden kann, wenn diese der Geltendmachung oder Abwehr von Rechtsansprüchen dient, die sich aus der Teilnahme am Straßenverkehr ergeben, oder wenn sie zur Erhebung einer Privatklage aufgrund im Straßenverkehr begangener Verstöße benötigt wird."},
- "address": "https://www.berlin.de/labo/mobilitaet/kfz-zulassung/halterauskunft/shop.86598.php",
- "homepage": "https://www.berlin.de",
- "phone": "+49 30 90269 – 0",
- "email": "",
- "postalAddress": "Direktorin Landesamt für Bürger- und Ordnungsangelegenheiten
Friedrichstr. 219
10958 Berlin",
- "category": "other",
- "tcTokenUrlInfo" : "Car lizence number required.",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Hamburg Service Online-Bürgerdienste"},
- "longDescription": {"": "Über das Portal ,HamburgService' finden Sie auf einen Blick alle Online-Dienste der Freien und Hansestadt Hamburg. Für die Dienste, die mit sensiblen Daten arbeiten (Dienste der Sicherheitsstufe 2), müssen Sie sich nach der Registrierung einmalig identifizieren. Sie können dazu die Online-Ausweisfunktion Ihres Personalausweises nutzen. Eine persönliche Identifizierung in einem Kundenzentrum der Stadt Hamburg ist dann nicht mehr nötig."},
- "address": "https://gateway.hamburg.de/HamburgGateway/FVP/Application/Index.aspx",
- "homepage": "http://www.hamburg.de/",
- "phone": "",
- "email": "dataporthamburggateway-service@dataport.de",
- "postalAddress": "Bürgermeister Olaf Scholz
Rathausmarkt 1
20095 Hamburg",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://gateway.hamburg.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "HUK 24 AG - Registrierung für Servicebereich \"Meine HUK24\""},
- "longDescription": {"": "Die Registrierung am Kundenportal ,Meine HUK24' können Sie mit der Online-Ausweisfunktion im Personalausweis schnell und einfach selbst erledigen. Ihre Versicherung lässt sich damit komplett online verwalten: egal, ob Sie einen Vertrag abändern eine neue Versicherung abschließen, oder Ihre persönlichen Daten aktualisieren möchten – mit dem Personalausweis können Sie alles problemlos von Zuhause aus erledigen."},
- "address": "https://www.huk24.de/",
- "homepage": "https://www.huk24.de/",
- "phone": "+49 95 61/96-13 38",
- "email": "info@huk24.de",
- "postalAddress": "HUK24 AG
Willi-Hussong-Str. 2
96440 Coburg",
- "category": "insurance",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.huk24.de"]
- },
- {
- "shortName": {"" : "Kreis Borken"},
- "longName": {"" : "Kreis Borken - Kfz-Abmeldung Internet"},
- "shortDescription": {"": "Authentisierung für internetbasierte Kfz-Abmeldung."},
- "longDescription": {"": "Für die internetbasierte Kfz-Abmeldung wird die eID-Funktionalität des neuen Personalausweises benötigt."},
- "address": "https://formulare-extern.de/administrationCenter/Form-Solutions/05554004-0001/eID/eIDMandatory?directlink=https%3A%2F%2Fformulare-extern.de%2Fmetaform%2FForm-Solutions%2Fsid%2Fassistant%2F55dc839be4b054042fb93dba%3FeIDComplete%3Dtrue",
- "homepage": "https://www.kreis-borken.de",
- "phone": "+49 2861 / 82 - 2059",
- "email": "zulassungsstelle@kreis-borken.de",
- "postalAddress": "Kfz-Zulassungsstelle Borken
Burloer Str. 93
46325 Borken",
- "image": "KreisBorken_image.png",
- "icon": "KreisBorken_icon.svg",
- "category": "citizen",
- "tcTokenUrlInfo" : "",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "ID-Safe des Landkreis Kitzingen"},
- "longDescription": {"": "Die Stadt Kitzingen bietet bei verschiedenen Bürgerdiensten die Nutzung der Online-Ausweisfunktion in Verbindung mit elektronischen Antragsformularen an:
- Gewerbeanmeldung
- Gewerbeummeldung
- Gewerbeabmeldung
- Fischereischein
- Verkehrsrechtliche Anordnung
- Sondernutzung
- Parkerleichterung
- Mängelmeldung"},
- "address": "https://www.buergerservice.org/ID-Safe-Kitzingen",
- "homepage": "http://www.kitzingen.de/",
- "phone": "+49 9321 / 928-0,",
- "email": "info@kitzingen.de",
- "postalAddress": "Landratsamt Kitzingen
Herr Thomas Langhojer
Kaiserstraße 4
97318 Kitzingen",
- "category": "citizen",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.buergerservice.org"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "ID-Safe des Landkreis Ostallgäu"},
- "longDescription": {"": "Der Landkreis Ostallgäu bietet Ihnen bei verschiedenen Bürgerdiensten die Nutzung der Online-Ausweisfunktion in Verbindung mit elektronischen Antragsformularen an:
- Bauantrag digital
- Sperrmüll-Abholung
- An-, Um- oder Abmeldung einer Abfalltonne
- Antrag auf Dauergenehmigung und Feriengenehmigung für ein Segelboot oder Motorboot auf dem Forggensee
Der Landkreis Ostallgäu bietet Ihnen außerdem einen ID-Safe an. Hier können Sie die Daten aus Ihrer Online-Ausweisfunktion hinterlegen und um weitere Kontaktdaten ergänzen. Anschließend können Sie die elektronischen Antragsformulare des Landkreises automatisch mit Ihren hinterlegten Daten befüllen. Dadurch vermeiden Sie Tippfehler und können die Bearbeitung Ihres Vorgangs beschleunigen.
Darüber hinaus können Sie im Landkreis Ostallgäu über das bayerische Bürgerservice-Portal folgende Bürgerdienste online beantragen:
- Fahrzeug-Anmeldung
- Fahrzeug-Abmeldung
- Feinstaubplakette
- Wunschkennzeichen"},
- "address": "https://www.sixform.com/ID-safe",
- "homepage": "https://www.landkreis-ostallgaeu.de/",
- "phone": "+49 83 42 · 9 11 - 0",
- "email": "poststelle@lra-oal.bayern.de",
- "postalAddress": "Landkreis Ostallgäu
Schwabenstraße 11
87616 Marktoberdorf",
- "category": "citizen",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.sixform.com"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "ID-Safe des Landkreis Würzburg"},
- "address": "https://www.buergerservice.org/ID-Safe-Wuerzburg",
- "homepage": "http://www.landkreis-wuerzburg.de/startseite.phtml",
- "phone": "+49 931 8003-0 ",
- "email": "poststelle@lra-wue.bayern.de",
- "postalAddress": "Landratsamt Würzburg
Zeppelinstraße 15
97074 Würzburg",
- "category": "citizen",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.buergerservice.org"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Identitätsprüfungen nach dem Signaturgesetz und dem Geldwäschegesetz"},
- "longDescription": {"": "Die identity Trust Management AG bietet Unternehmen die Möglichkeit, ihre Kunden schnell und sicher mit der Online-Ausweisfunktion zu identifizieren.
Kunden der Kooperationspartner der identity Trust Management AG können die Identitätsprüfung nach dem Signaturgesetz und dem Geldwäschegesetz auch direkt über die Internetseite der identity Trust Management AG vornehmen."},
- "address": "https://www.identity.tm",
- "homepage": "https://www.identity.tm",
- "phone": "+49 211 68 77 3-0",
- "email": "kontakt@identity.tm",
- "postalAddress": "identity Trust Management AG
Lierenfelder Straße 51
40231 Düsseldorf",
- "category": "other",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": []
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Kraftfahrt-Bundesamt - Registerauskunft"},
- "longDescription": {"": "Mit der Online-Ausweisfunktion können Sie beim Kraftfahrt-Bundesamt einfach und schnell eine Auskunft über Ihren Punktestand und die zu Ihrer Person gespeicherten Eintragungen im Fahreignungsregister (FAER) beantragen. Die erforderlichen Daten werden dann von Ihrem Personalausweis ausgelesen. Die Auskunft erhalten Sie innerhalb weniger Tage per Post."},
- "address": "https://www.kba-online.de/registerauskunft/app/registeranfrage.html",
- "homepage": "http://www.kba.de/",
- "phone": "+49 461 316-0",
- "email": "poststelle@kba.de",
- "postalAddress": "Kraftfahrt-Bundesamt
Fördestraße 16
24944 Flensburg",
- "category": "citizen",
- "tcTokenUrl" : "https://www.kba-online.de:443/registerauskunft/app/eidstart.html;jsessionid=HZFFDC4E848A794D83A1D3032252F3F905?ref=HZFFDC4E848A794D83A1D3032252F3F905",
- "tcTokenUrlInfo" : "TcToken URL contains dynamic request id but is accepted anyway.",
- "subjectUrls": ["https://www.kba-online.de/registerauskunft"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Login Meine VBL"},
- "longDescription": {"": "Bei der VBL können Sie sich mit dem Personalausweis am Kundenportal ,Meine VBL' registrieren und anmelden. Dadurch entfällt der Postversand eines Freischaltcodes - Sie sparen Zeit. Im Kundenkonto können Sie Ihre Vertragsdaten und Ihre persönlichen Daten einsehen und weitere Online-Dienste nutzen, z. B.
- Rentenantrag stellen,
- Beitragserstattung beantragen,
- Kontaktdaten ändern,
- persönliche Mitteilungen von der VBL erhalten."},
- "address": "https://vbl.de/de/meine_vbl",
- "homepage": "https://vbl.de/",
- "phone": "+49 721 93 98 93 1",
- "email": "info@vbl.de",
- "postalAddress": "VBL. Kundenservice
76240 Karlsruhe",
- "category": "other",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.vbl.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "LVM Versicherung - Kundenportal Meine LVM"},
- "longDescription": {"": "Mit der Online-Ausweisfunktion im Personalausweis können Sie sich nach der Registrierung durch Ihre LVM-Agentur sicher am Kundenportal ,Meine LVM' anmelden. Ihre Versicherung können Sie nun selbst verwalten und beispielsweise sämtliche Vertragsdaten online einsehen. Darüber hinaus ist es möglich über das Portal Versicherungsbescheinigungen anzufordern sowie schnell und einfach Ihre persönlichen Daten wie Adresse oder Bankverbindung zu ändern."},
- "address": "http://www.lvm.de/personalausweis",
- "homepage": "http://www.lvm.de/",
- "phone": "+49 251 702-0",
- "email": "info@lvm.de",
- "postalAddress": "LVM Versicherung
48126 Münster",
- "category": "insurance",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.lvm.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Mentana-Claimsoft AG - Registrierung beim De-Mail Dienst"},
- "address": "https://www.fp-demail.de/",
- "homepage": "https://www.fp-demail.de/",
- "phone": "+49 800-6368262",
- "email": "de-mail.info@mentana.de",
- "postalAddress": "Mentana-Claimsoft GmbH
Trebuser-Str. 47 Haus 1
D-15517 Fürstenwalde",
- "category": "other",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.fp-demail.de"]
- },
- {
- "shortName": {"" : "OpenPGP-eID"},
- "longDescription": {"": "Durch die Verschlüsselung Ihrer Nachrichten mittels OpenPGP ist die Vertraulichkeit Ihrer Information gewährleistet. Aber kann ein Empfänger der Nachricht sicher sein, dass der Absender der ist, der er vorgibt zu sein? Die Antwortet lautet: Nein. Abhilfe schafft die Beglaubigung Ihres OpenPGP-Schlüssels durch eine Signatur. Sie benötigen hierfür einen Personalausweis bzw. elektronischen Aufenthaltstitel mit aktivierter Online-Ausweisfunktion. Diesen Dienst stellen wir im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik (BSI) zur Verfügung."},
- "address": "https://pgp.governikus-eid.de/pgp/",
- "homepage": "https://www.governikus.de/",
- "phone": "+49 421 204 95-0",
- "email": "kontakt@governikus.com",
- "postalAddress": "Governikus GmbH & Co. KG
Am Fallturm 9
28359 Bremen",
- "category": "other",
- "tcTokenUrl" : "https://pgp.governikus-eid.de/pgp/EIDRequest",
- "subjectUrls": ["https://pgp.governikus-eid.de"]
- },
- {
- "shortName": {"" : "Techniker Krankenkasse"},
- "longDescription": {"": "Die Online-Ausweisfunktion des Personalausweises ermöglicht Ihnen die schnelle und sichere Registrierung am Kundenportal \"Meine TK\". Damit können Sie online verbindlich Anträge stellen und Ihre Unterlagen anfordern (z. B. eine neue Versichertenkarte). Außerdem lassen sich persönliche Daten wie Kontoverbindung oder Adresse selbstständig ändern und verwalten. Wenn Sie \"Meine TK\" mit der Online-Ausweisfunktion nutzen, sparen Sie Zeit und Aufwand."},
- "address": "https://www.tk.de/tk/118032",
- "homepage": "https://www.tk.de/",
- "phone": "+49 800 - 285 85 85",
- "email": "service@tk.de",
- "postalAddress": "Techniker Krankenkasse
Bramfelder Straße 140
22305 Hamburg",
- "category": "insurance",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.tk.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Schufa – Auskunftsportal „Meine SCHUFA“"},
- "longDescription": {"": "Wenn Sie Ihre Bonität gegenüber Dritten z. B. für einen Mietvertrag, belegen müssen, benötigen Sie dazu in der Regel eine SCHUFA-Auskunft. Mit der Online-Ausweisfunktion können Sie sich einfach und sicher am Kundenportal „MeineSCHUFA“ registrieren. Ohne weitere Verzögerungen haben Sie nach Anmeldung am Portal die Möglichkeit Ihre Schufa-Auskunft direkt online abzurufen oder auf dem Postweg Ihren Geschäftspartnern zukommen zu lassen. Der Personalausweis erspart Ihnen hierbei unnötige Wartezeit und gewährleistet dennoch eine verlässliche Identifizierung."},
- "address": "https://www.meineschufa.de/index.php?site=30_2_1_pa#tabNPA",
- "homepage": "https://www.meineschufa.de",
- "phone": "+49 611 – 92780",
- "email": "meineSCHUFA@SCHUFA.de",
- "postalAddress": "SCHUFA Holding AG
Postfach 10 25 66
44725 Bochum",
- "category": "citizen",
- "tcTokenUrl" : "https://www.meineschufa.de/eID-Service-Connector-V2/createSamlRequest/Reg",
- "subjectUrls": ["https://www.meineschufa.de"]
- },
- {
- "shortName": {"" : "Selbstauskunft - „Meine Daten einsehen“"},
- "longDescription": {"": "Die AusweisApp2 verfügt über die Funktion \"Meine Daten einsehen\". Mit dieser Funktion können die auf dem Personalausweis bzw. dem elektronischen Aufenthaltstitel gespeicherten Daten ausgelesen und angezeigt werden.
Sobald Sie die AusweisApp2 gestartet und ein geeignetes Kartenlesegerät angeschlossen haben, können Sie diese Funktion unter dem Menüpunkt \"Ausweisen\" aufrufen. Über voreingestellte Checkboxen können Sie steuern, ob Sie alle gespeicherten Daten oder nur spezielle Daten auslesen möchten.
Nach Ihrer PIN-Eingabe und erfolgreicher Datenübertragung werden die von Ihnen festgelegten Daten in der AusweisApp2 dargestellt.
Bitte beachten Sie, dass Sie für diesen Vorgang eine Internetverbindung benötigen. Dies hat folgenden Hintergrund: Für jedes Auslesen der Daten aus dem Personalausweis oder dem elektronischen Aufenthaltstitel muss gesetzlich der Zweck des Auslesevorgangs angegeben werden. Dieser Zweck wird Ihnen auf einem speziellen Zertifikat angezeigt (Berechtigungszertifikat). Diese Zertifikate werden individuell durch die Vergabestelle für Berechtigungszertifikate beim Bundesverwaltungsamt genehmigt. Damit Sie also jederzeit genau wissen, wer zu welchem Zweck einen Auslesevorgang startet, wird eine Internetverbindung zu einem vertrauenswürdigen Authentisierungsserver aufgebaut. Die Berechtigungszertifikate dienen Ihrem Schutz!"},
- "address": "https://www.ausweisapp.bund.de/ausweisapp2/ausprobieren-meine-daten-einsehen/",
- "homepage": "https://www.ausweisapp.bund.de/",
- "phone": "+49 1805 - 348743",
- "email": "support@ausweisapp.de",
- "postalAddress": "Governikus GmbH & Co. KG
- im Auftrag des Bundesministeriums des Innern -
Am Fallturm 9
D-28359 Bremen",
- "image": "Selbstauskunft.jpg",
- "icon": "npa.svg",
- "category": "citizen",
- "tcTokenUrlInfo" : "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml",
- "subjectUrls": ["https://www.autentapp.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Service-Portal \"Auto\" Kreis Lippe"},
- "longName": {"" : "Service-Portal \"Auto\" Kreis Lippe"},
- "shortDescription": {"": "Das Service-Portal bietet Online-Dienste rund um die KFZ-Zulassung."},
- "longDescription": {"": "Im Service-Portal \"Auto\" können Sie Ihr Auto online abmelden. Weitere Angebote wie die komplette online KFZ-Wiederzulassung und -Zulassung sind im Aufbau."},
- "address": "https://www.buergerserviceportal.nrw/krz/lkrlippe",
- "homepage": "http://www.kreis-lippe.de/",
- "phone": "+49 5231/62-0",
- "email": "stva@kreis-lippe.de",
- "postalAddress": "Kreis Lippe
Felix-Fechenbach-Straße 5
32756 Detmold",
- "image": "KreisLippe_image.jpg",
- "icon": "KreisLippe_icon.png",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://www.buergerserviceportal.nrw"]
- },
- {
- "shortName": {"" : "SkIDentity Service"},
- "longName": {"" : "SkIDentity Service"},
- "longDescription": {"": "SkIDentity unterstützt die Umsetzung der Cyber-Sicherheitsstrategie der Bundesregierung und macht den elektronischen Personalausweis im Internet sehr leicht und mobil nutzbar. Der SkIDentity-Dienst bietet „Mobile eID as a Service“ und leitet bei Bedarf aus elektronischen Ausweisdokumenten kryptographisch geschützte „Cloud Identitäten“ ab, die auf beliebige Smartphones übertragen und dort sicher mobil genutzt werden können. Darüber hinaus kann auch die bislang aufwändige eID-Integration in einem komfortablen Portal erfolgen und die vertrauenswürdigen Identitäten kommen nun selbst aus einer vom Bundesamt für Sicherheit in der Informationstechnik (BSI) zertifizierten „Secure Cloud Infrastructure“."},
- "address": "https://skidentity.de/service",
- "homepage": "https://www.skidentity.de",
- "phone": "+49 9571 604 8014",
- "email": "detlef.huehnlein@ecsec.de",
- "postalAddress": "ecsec GmbH
Sudetenstraße 16
96247 Michelau",
- "category": "other",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": []
- },
- {
- "shortName": {"" : "Stadt Nürnberg: Online-Bürgerdienste Service"},
- "longDescription": {"": "Die Stadt Nürnberg bietet Ihnen mit ihrem Bürgerserviceportal ,Mein.Nürnberg' erstmals die Möglichkeit, Ihre Verwaltungsangelegenheiten komplett elektronisch abzuwickeln – von der Antragstellung bis zur Rückmeldung der Bescheide oder Schriftstücke in Ihren persönlichen Bereich auf dem Portal. Alle Online-Dienste der Stadt Nürnberg wurden zudem für die Nutzung mit mobilen Endgeräten optimiert.
Bei immer mehr Verfahren akzeptiert die Stadtverwaltung einen Unterschriftersatz durch die Online-Ausweisfunktion.
Jeder Online-Dienst der Stadt Nürnberg, der die Online-Ausweisfunktion nutzt, ist an dem Hinweis \"mit eID\" erkennbar. Derzeit sind dies z. B.:
- Aufenthaltstitel beantragen
- Gaststättenrechtliche Erlaubnis für den Ausschank von Alkohol beantragen
- Hunde – Negativzeugnis für Kampfhunde beantragen
- Kfz-Halterauskunft beantragen
- Melderegister – Widerspruch gegen Datenübermittlung
- Veranstaltung, Messe, Markt beantragen"},
- "address": "http://www.nuernberg.de/internet/onlinedienste",
- "homepage": "http://www.nuernberg.de/",
- "phone": "+49 9 11 / 2 31-8613",
- "email": "poststelle@stadt.nuernberg.de",
- "postalAddress": "Amt für Organisation, Informationsverarbeitung und Zentrale Dienste
E-Government-Büro
Rathausplatz 2
III. OG
90403 Nürnberg",
- "category": "citizen",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://meinkonto.nuernberg.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Standesamt Online Mecklenburg-Vorpommern"},
- "longDescription": {"": "In Mecklenburg-Vorpommern können Sie in immer mehr Kommunen Urkunden mit der Online-Ausweisfunktion beantragen:
- Geburtsurkunden
- Eheurkunden
- Lebenspartnerschaftsurkunden
- Sterbeurkunden"},
- "address": "https://portal.ego-mv.de/",
- "homepage": "http://www.ego-mv.de/",
- "phone": "+49 3 85 77 33 47-0",
- "email": "info@ego-mv.de",
- "postalAddress": "Zweckverband Elektronische Verwaltung in Mecklenburg-Vorpommern (eGo-MV)
Eckdrift 103
19061 Schwerin",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://tbk.ego-mv.de/BuergerKontoWeb"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Telekom DeMail für Privat- und Geschäftskunden"},
- "address": "https://www.telekom.de/de-mail",
- "homepage": "https://www.telekom.de/",
- "phone": "+49 800 33 01000",
- "email": "",
- "postalAddress": "Telekom Deutschland GmbH
Landgrabenweg 151
53227 Bonn",
- "category": "other",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.de-mail.t-online.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "T-Systems DeMail für Großkunden"},
- "address": "https://www.t-systems.de/de-mail",
- "homepage": "https://www.t-systems.de/",
- "phone": "+49 69 20060 - 0",
- "email": "de-mail@t-systems.com",
- "postalAddress": "T-Systems International GmbH
Hahnstraße 43d
60528 Frankfurt am Main",
- "category": "other",
- "tcTokenUrlInfo" : "Registration required",
- "subjectUrls": ["https://www.de-mail.t-systems.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Urkundenservice Köln"},
- "longDescription": {"": "Bei der Stadt Köln können Sie mit der Online-Ausweisfunktion folgende Urkunden beantragen:
- Geburtsurkunden
- Eheurkunden
- Lebenspartnerschaftsurkunden
- Sterbeurkunden
Dabei werden die Adressatenangaben in den Online-Formularen automatisch befüllt."},
- "address": "http://www.stadt-koeln.de/service/produkt/urkundenservice-des-standesamtes",
- "homepage": "http://www.stadt-koeln.de/",
- "phone": "+49 221 / 221-26530",
- "email": "standesamt@stadt-koeln.de",
- "postalAddress": "Gülichplatz 1-3
50667 Köln",
- "category": "citizen",
- "tcTokenUrl" : "https://ea.stadt-koeln.de/Gastzugang/EIDServiceProvider/Request.ashx?appID=7",
- "subjectUrls": ["https://ea.stadt-koeln.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Virtuelles Rathaus Stadt Dortmund"},
- "longDescription": {"": "Sie wollen städtische Dienstleistungen in Anspruch nehmen, sich zunächst nur informieren oder Sie suchen bereits ein bestimmtes Formular?
Wir haben für Sie ein umfassendes Informationsangebot über Produkte und Leistungen (Services) der Stadt Dortmund gegliedert nach Themen und der Behördenstruktur bereitgestellt."},
- "address": "https://www.domap.de/wps/portal/dortmund/login",
- "homepage": "https://www.domap.de/",
- "phone": "+49 231 / 50-25650",
- "email": "domap-feedback@stadtdo.de",
- "postalAddress": "Stadt Dortmund
Dortmunder Systemhaus
Deggingstraße 42
44122 Dortmund",
- "category": "citizen",
- "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
- "subjectUrls": ["https://rathaus.dortmund.de"]
- },
- {
- "exclude": ["ios"],
- "shortName": {"" : "Vollstreckungsportal"},
- "longDescription": {"": "Herzlich willkommen auf dem Gemeinsamen Vollstreckungsportal der Länder."},
- "address": "https://www.vollstreckungsportal.de/auskunft/priv/anmelden.jsf?type=npa",
- "homepage": "https://www.vollstreckungsportal.de/",
- "phone": "",
- "email": "bundesportal@ag-hagen.nrw.de",
- "postalAddress": "Land Nordrhein-Westfalen
vertreten durch das Justizministerium
Martin-Luther-Platz 40
40212 Düsseldorf",
- "category": "citizen",
- "tcTokenUrlInfo" : "Registration required.",
- "subjectUrls": ["https://www.vollstreckungsportal.de"]
- }
- ]
-}
diff --git a/resources/default-supported-devices.json b/resources/default-supported-devices.json
deleted file mode 100644
index 3071203..0000000
--- a/resources/default-supported-devices.json
+++ /dev/null
@@ -1,123 +0,0 @@
-{
- "IssueDate": "2015-11-24T12:00:00+1:00",
- "SupportedDevices":
- [
- {
- "ReaderType": "REINER_cyberJack_RFID_komfort",
- "VendorId": "0x0C4B",
- "ProductId": "0x0501",
- "Name": "REINER SCT cyberJack RFID komfort",
- "Drivers":
- [
- {
- "Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/bc_7_2_3.exe"
- },
- {
- "Platforms": ["MV_10_9", "MV_10_10"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/pcsc-cyberjack_3.99.5final.SP07-universal-signed.pkg"
- },
- {
- "Platforms": ["MV_10_11", "MV_10_12"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/01_pcsc-cyberjack_3.99.5final.SP08-universal-osx10.11-signed.pkg"
- },
- {
- "Platforms": ["LINUX"],
- "URL": "https://www.reiner-sct.com/support/download/treiber-und-software/cyberjack/rfid-komfort-linux.html"
- }
- ]
- },
-
- {
- "ReaderType": "REINER_cyberJack_RFID_standard",
- "VendorId": "0x0C4B",
- "ProductId": "0x0500",
- "Name": "REINER SCT cyberJack RFID standard",
- "Drivers":
- [
- {
- "Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/bc_7_2_3.exe"
- },
- {
- "Platforms": ["MV_10_9", "MV_10_10"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/pcsc-cyberjack_3.99.5final.SP07-universal-signed.pkg"
- },
- {
- "Platforms": ["MV_10_11", "MV_10_12"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/01_pcsc-cyberjack_3.99.5final.SP08-universal-osx10.11-signed.pkg"
- },
- {
- "Platforms": ["LINUX"],
- "URL": "https://www.reiner-sct.com/support/download/treiber-und-software/cyberjack/rfid-standard-linux.html"
- }
- ]
- },
-
- {
- "ReaderType": "REINER_cyberJack_RFID_basis",
- "VendorId": "0x0C4B",
- "ProductId": "0x9102",
- "Name": "REINER SCT cyberJack RFID basis",
- "Drivers":
- [
- {
- "Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/01_cJRFIDbasisIFD.exe"
- },
- {
- "Platforms": ["MV_10_9", "MV_10_10", "MV_10_11", "MV_10_12"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/ifd-ccid-1.4.8-universal-signed.pkg"
- },
- {
- "Platforms": ["LINUX"],
- "URL": "https://www.reiner-sct.com/support/download/treiber-und-software/cyberjack/rfid-basis-linux.html"
- }
- ]
- },
-
- {
- "ReaderType": "SCM_SDI011",
- "VendorId": "0x04E6",
- "ProductId": "0x512B",
- "Name": "SDI011 Contactless Reader",
- "Drivers":
- [
- {
- "Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/SDI011_win_installer_V1.01.zip"
- },
- {
- "Platforms": ["MV_10_9", "MV_10_10", "MV_10_11", "MV_10_12"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/SDI011_mac_V5.0.18.zip"
- },
- {
- "Platforms": ["LINUX"],
- "URL": "http://support.identive-group.com/npa_downloads.php"
- }
- ]
- },
-
- {
- "ReaderType": "SCM_SCL011_Contactless_Reader",
- "VendorId": "0x04E6",
- "ProductId": "0x5292",
- "Name": "SCL01x Contactless Reader",
- "Drivers":
- [
- {
- "Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/SCL011_win_installer_V1.01.zip"
- },
- {
- "Platforms": ["MV_10_9", "MV_10_10", "MV_10_11", "MV_10_12"],
- "URL": "https://appl.governikus-asp.de/ausweisapp2/driver/SCL011_V2.09_mac.zip"
- },
- {
- "Platforms": ["LINUX"],
- "URL": "http://support.identive-group.com/npa_downloads.php"
- }
- ]
- }
- ]
-}
diff --git a/resources/hooks/formatting b/resources/hooks/formatting
deleted file mode 100755
index dfa78e8..0000000
--- a/resources/hooks/formatting
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-root=$(hg root)
-revs=$(hg log -r "$HG_NODE:tip" --template '{rev} ') #Intentional space after {rev}
-builddir=$root/build
-rc=0
-
-for rev in $revs
-do
- hg update -C -r $rev > /dev/null
- rm -rf $builddir
- mkdir $builddir
- cd $builddir
- cmake -DENABLE_DVCS=false -Dtools.only=true $root > /dev/null
- make format > /dev/null
- cd $root
- STATUS=$(hg status | wc -c)
- if [ "$STATUS" != "0" ]; then
- desc=$(hg log -r $rev --template '{firstline(desc)}')
- echo "Changeset $rev is not formatted correctly: $desc"
- rc=-1
- break
- fi
-done
-
-rm -rf $builddir
-hg update -C null > /dev/null
-exit $rc
-
diff --git a/resources/images/android/arrowLeftWhite.svg b/resources/images/android/arrowLeftWhite.svg
index eaa3030..bbdc59c 100644
--- a/resources/images/android/arrowLeftWhite.svg
+++ b/resources/images/android/arrowLeftWhite.svg
@@ -1,11 +1,10 @@
-
-
+
diff --git a/resources/images/android/arrowRight.svg b/resources/images/android/arrowRight.svg
index cfd991f..0f3d647 100644
--- a/resources/images/android/arrowRight.svg
+++ b/resources/images/android/arrowRight.svg
@@ -1,7 +1,7 @@
"
wrapMode: Text.Wrap
}
@@ -36,7 +36,7 @@ Rectangle {
Text {
id: searchLabel
anchors.verticalCenter: parent.verticalCenter
- text: qsTr("Search:")
+ text: qsTr("Search:") + settingsModel.translationTrigger
textFormat: Text.StyledText
}
TextField {
@@ -57,32 +57,32 @@ Rectangle {
readonly property real space: (parent.width - checkBoxCitizen.width - checkBoxInsurance.width - checkBoxFinance.width - checkBoxOther.width) / 5
spacing: space
- CategoryCheckbox {
+ CategoryCheckbox_tablet {
id: checkBoxCitizen
category: "citizen"
imageSource: Category.imageSource("citizen")
- text: qsTr("Citizen services")
+ text: qsTr("Citizen services") + settingsModel.translationTrigger
}
- CategoryCheckbox {
+ CategoryCheckbox_tablet {
id: checkBoxInsurance
category: "insurance"
imageSource: Category.imageSource("insurance")
- text: qsTr("Insurances")
+ text: qsTr("Insurances") + settingsModel.translationTrigger
}
- CategoryCheckbox {
+ CategoryCheckbox_tablet {
id: checkBoxFinance
category: "finance"
imageSource: Category.imageSource("finance")
- text: qsTr("Financials")
+ text: qsTr("Financials") + settingsModel.translationTrigger
}
- CategoryCheckbox {
+ CategoryCheckbox_tablet {
id: checkBoxOther
category: "other"
imageSource: Category.imageSource("other")
- text: qsTr("Other services")
+ text: qsTr("Other services") + settingsModel.translationTrigger
}
}
}
@@ -95,7 +95,7 @@ Rectangle {
Text {
anchors.centerIn: parent
- text: qsTr("No match found")
+ text: qsTr("No match found") + settingsModel.translationTrigger
wrapMode: Text.WordWrap
font.pixelSize: Constants.normal_font_size
visible: !scrollView.visible
diff --git a/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderContactInfo.qml b/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderContactInfo.qml
index 442ffcf..9c61e41 100644
--- a/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderContactInfo.qml
+++ b/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderContactInfo.qml
@@ -24,7 +24,7 @@ Rectangle {
}
Text {
- text: qsTr("Contact")
+ text: qsTr("Contact") + settingsModel.translationTrigger
padding: Constants.component_spacing
font.pixelSize: Constants.header_font_size
color: "white"
@@ -43,7 +43,7 @@ Rectangle {
width: contactListView.width
color: baseItem.color
imageSource: Qt.resolvedUrl(model.iconSource)
- itemText: !!model.text ? model.text : qsTr("Unknown")
+ itemText: (!!model.text ? model.text : qsTr("Unknown")) + settingsModel.translationTrigger
link: model.link
}
}
diff --git a/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailButtonBar.qml b/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailButtonBar.qml
index 55ca344..7e71751 100644
--- a/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailButtonBar.qml
+++ b/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailButtonBar.qml
@@ -30,7 +30,7 @@ Item {
Button {
id: button
- text: qsTr("ONLINE-APPLICATION")
+ text: qsTr("ONLINE-APPLICATION") + settingsModel.translationTrigger
// TODO: Use custom button
// buttonColor: baseItem.titleBarColor
anchors.left: icon.right
diff --git a/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailDescription.qml b/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailDescription.qml
index b96b42c..a0913ea 100644
--- a/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailDescription.qml
+++ b/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailDescription.qml
@@ -17,7 +17,7 @@ ScrollView {
Text {
// font.pixelSize: Constants.header_font_size
color: PlatformConstants.blue_primary
- text: qsTr("Description")
+ text: qsTr("Description") + settingsModel.translationTrigger
}
Text {
diff --git a/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailsDialog.qml b/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailsDialog.qml
index 14ed85d..019d258 100644
--- a/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailsDialog.qml
+++ b/resources/qml_stationary/AusweisApp2/Views/ProviderDetails/ProviderDetailsDialog.qml
@@ -7,7 +7,7 @@ import AusweisApp2.Views.Provider 1.0
Window {
id: baseItem
- title: qsTr("Provider details")
+ title: qsTr("Provider details") + settingsModel.translationTrigger
height: Utils.dp(900)
minimumHeight: Utils.dp(700)
width: Utils.dp(1200)
diff --git a/resources/qtlogging.ini b/resources/qtlogging.ini
index 73fae37..980241e 100644
--- a/resources/qtlogging.ini
+++ b/resources/qtlogging.ini
@@ -41,6 +41,7 @@ gui=true
# Logging category for network stuff written on our own.
# I. e. unfortunately we do not log network traffic handled by third party libraries
network=true
+#qt.network.ssl=true
# Logging category for systems calls / signals
system=true
diff --git a/resources/statemachine.sh.in b/resources/statemachine.sh.in
new file mode 100755
index 0000000..3567ffa
--- /dev/null
+++ b/resources/statemachine.sh.in
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+RULE='
+s/([[:alnum:]]+)\.setInitialState\(([[:alnum:]]+)\)\;/[*] --> \2/p
+s/setInitialState\(([[:alnum:]]+)\)\;/[*] --> \1/p
+s/([[:alnum:]]+)\-.addTransition\(([[:alnum:]]+)\,[[:space:]]+\&([[:alnum:]]+)\:\:fire([[:alnum:]]+)\,[[:space:]]+([[:alnum:]]+)\)\;/\2 --> \5 : \4/p
+s/auto[[:space:]]+([[:alnum:]]+)[[:space:]]+=\s+addAndConnectState\(\);/\1 --> [*]/p
+'
+
+function createImage {
+ echo "@startuml" > $2.uml
+ sed -E -n -e "$RULE" < $1 >> $2.uml
+ echo "@enduml" >> $2.uml
+ cat $2.uml
+ @JAVA_EXECUTABLE@ -DPLANTUML_LIMIT_SIZE=8192 -jar @PLANTUML@ $2.uml
+ rm $2.uml
+}
+
+createImage @PROJECT_SOURCE_DIR@/src/core/states/CompositeStateSelectCard.cpp @PROJECT_BINARY_DIR@/uml_SelectCard
+createImage @PROJECT_SOURCE_DIR@/src/core/states/CompositeStateProcessCvcsAndSetRights.cpp @PROJECT_BINARY_DIR@/uml_ProcessCvcsAndSetRights
+createImage @PROJECT_SOURCE_DIR@/src/core/controller/ChangePinController.cpp @PROJECT_BINARY_DIR@/uml_ChangePinController
+createImage @PROJECT_SOURCE_DIR@/src/core/controller/SelfAuthController.cpp @PROJECT_BINARY_DIR@/uml_SelfAuthController
+createImage @PROJECT_SOURCE_DIR@/src/core/controller/AuthController.cpp @PROJECT_BINARY_DIR@/uml_AuthController
+createImage @PROJECT_SOURCE_DIR@/src/core/controller/RemoteServiceController.cpp @PROJECT_BINARY_DIR@/uml_RemoteServiceController
diff --git a/resources/translations/ausweisapp2_de.ts b/resources/translations/ausweisapp2_de.ts
index a871f27..1b473e2 100644
--- a/resources/translations/ausweisapp2_de.ts
+++ b/resources/translations/ausweisapp2_de.ts
@@ -4,27 +4,22 @@
AboutDialog
-
-
- <b>AusweisApp2</b>
-
-
-
+
- Die AusweisApp2 ist ein Produkt der Governikus GmbH & Co. KG - im Auftrag des Bundesministeriums des Innern.
+ Die AusweisApp2 ist ein Produkt der Governikus GmbH & Co. KG - im Auftrag des Bundesministeriums des Innern.
-
+
Entwicklermodus:
-
+
verwenden
-
+
OK
@@ -32,8 +27,7 @@
AdditionalResultsItem
-
-
+
Weitere Ergebnisse:
@@ -43,246 +37,239 @@
Weitere Ergebnisse in anderen Kategorien: %1
+
+ AdditionalResultsItem_tablet
+
+
+
+ Weitere Ergebnisse:
+
+
AppQtMainWidget
-
+
Hauptaktionen
-
+
Startseite
-
+
Anbieter
-
+
Verlauf
-
+
Ausweisen
-
+
Einstellungen
-
+
Minimieren
-
+
AusweisApp2
-
+
Logo des nPA und eAT
-
+
Logo der AusweisApp2
-
+
&Datei
-
+
&PIN-Verwaltung
-
+
&Beenden
-
+
&Ausweisen
-
+
&Einstellungen
-
+
&Handbuch
-
+
&Bewerten
-
+
Fehler &melden
-
+
&Über AusweisApp2
-
+
A&nbieter
-
+
Protokoll &anzeigen
-
+
Protokoll &speichern
-
+
&Fragen
-
+
&Verlauf
-
+
&PIN ändern
-
+
&Einrichtungsassistent
-
+
&Hilfe
-
+
&Diagnose
+
+
+
+ Die Sprache auf Deutsch umstellen
+
+
+
+
+ DE
+
+
+
+
+ Die Sprache auf Englisch umstellen
+
+
+
+
+ EN
+
BluetoothWorkflow
-
+
Bluetooth aktivieren
-
+
Fortsetzen
-
-
- Ihr Gerät unterstützt kein Bluetooth.<br/>Bitte versuchen Sie NFC.
+
+
+ Ihr Gerät unterstützt kein Bluetooth.
-
-
- Bluetooth ist deaktiviert.<br/>Bitte aktivieren Sie Bluetooth.
+
+
+ Bitte versuchen Sie NFC.
-
+
+
+ Bluetooth ist deaktiviert.
+
+
+
+
+ Bitte aktivieren Sie Bluetooth.
+
+
+
- Es konnte kein verbundener, eingeschalteter Bluetooth-Kartenleser erkannt werden. Zur Erkennung benötigt die AusweisApp2 Zugriff auf Ihren Standort. Nach Klicken auf den Weiter-Knopf können Sie die benötigte Freigabe erteilen.
+ Es konnte kein gekoppeltes, eingeschaltetes Bluetooth-Kartenlesegerät erkannt werden. Zur Erkennung benötigt die AusweisApp2 Zugriff auf Ihren Standort. Nach Klicken auf den Weiter-Knopf können Sie die benötigte Freigabe erteilen.
-
+
Verbindung wird hergestellt
-
+
Ermittle Ausweis
-
-
- PIN ändern
+
+
+ Suche Kartenlesegerät...
-
-
- Jetzt ausweisen
-
-
-
-
- Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
-
-
-
-
- Verbinde...
-
-
-
+
Bitte legen Sie Ihren Ausweis ein.
-
-
-
- Geben Sie bitte zunächst Ihre alte PIN bzw. die Transport-PIN ein.
-
-
-
-
- Geben Sie bitte Ihre persönliche PIN ein.
-
-
-
-
- Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises.
-
-
-
-
- Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein.
-
-
-
-
- Geben Sie hier bitte eine von Ihnen frei wählbare, 6-stellige PIN ein.
-
-
-
-
- NFC anstatt Bluetooth<br/>Kartenleser benutzen
-
BusyOverlay
-
+
Der Vorgang wird gestartet...
@@ -290,45 +277,45 @@
Category
-
+
Anbieter
-
+
Alle
-
+
Bürgerdienste
-
+
Versicherungen
-
+
Finanzen
-
+
- Weitere Services
+ Weitere Dienste
CertificateDescriptionPage
-
+
Anbieterinformationen
@@ -336,7 +323,7 @@
ChangePinController
-
+
Sie können nun Ihr Ausweisdokument vom Gerät entfernen.
@@ -344,32 +331,32 @@
CredentialDialog
-
+
Proxy-Sicherheit
-
+
Es werden Proxy-Anmeldeinformationen benötigt:
-
+
Kennwort:
-
+
Benutzername:
-
+
Passwort für den Proxy
-
+
Benutzername für den Proxy
@@ -377,22 +364,22 @@
CustomSwipeBar
-
+
Kontakt
-
+
Verlauf
-
+
KONTAKT
-
+
VERLAUF
@@ -400,7 +387,8 @@
DataGroup
-
+
+
Keine Daten erforderlich
@@ -408,12 +396,12 @@
DetailDialog
-
+
Angaben zum Diensteanbieter
-
+
Schließen Dialog
@@ -421,20 +409,33 @@
DeveloperModeHistoryWidget
-
-
- <html><head/><body><p align="center"><span style=" font-size:12pt; color:#ff0000;">Entwicklermodus: Aktiviert!</span></p></body></html>
-
-
-
+
Deaktivieren
+
+
+
+ Entwicklermodus: Aktiviert!
+
+
+
+ DeveloperSettingsWidget
+
+
+
+ Test URI für die Selbstauskunft:
+
+
+
+
+ verwenden
+
DeveloperView
-
+
Entwickleroptionen
@@ -442,17 +443,17 @@
DiagnosisDialog
-
+
Diagnose
-
+
- Speichern...
+ Speichern als...
-
+
Schließen
@@ -460,105 +461,115 @@
EnterPinView
-
+
Die eingegebene PIN stimmt nicht mit Ihrer neuen PIN überein. Bitte korrigieren Sie Ihre PIN-Eingabe.
-
-
+
+
Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises.
-
+
Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein.
-
-
- Geben Sie hier bitte eine von Ihnen frei wählbare, 6-stellige PIN ein.
+
+
+ Geben Sie nun bitte eine neue 6-stellige PIN Ihrer Wahl ein.
-
-
- Bestätigen Sie bitte die PIN-Änderung durch die erneute Eingabe Ihrer persönlichen PIN.
+
+
+ Wiederholen Sie bitte Ihre neue 6-stellige PIN.
-
+
+
+ Geben Sie bitte zunächst Ihre aktuelle PIN bzw. die Transport-PIN ein.
+
+
+
Geben Sie bitte Ihre persönliche PIN ein.
-
-
-
- Geben Sie bitte zunächst Ihre alte PIN bzw. die Transport-PIN ein.
-
Feedback
-
-
- Dialog & Rückmeldung
-
-
-
+
Ihre Meinung zählt
-
+
Wir freuen uns über Ihre Rückmeldung zu unserem Programm.
-
+
Bewerten Sie die AusweisApp2
-
-
- Bitte bewerten Sie uns im Google Play Store.
+
+
+ Hilfe & Feedback
-
-
- Teilen
+
+
+ FAQ
-
-
- Erzählen Sie Ihren Freunden und Bekannten von der AusweisApp2.
+
+
+ Haben Sie Fragen zur Nutzung der AusweisApp2?
-
-
- Teilen mit
+
+
+ https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/
-
-
- Ich verwende die AusweisApp2, laden Sie die AusweisApp2 für Android: https://play.google.com/store/apps/details?id=com.governikus.ausweisapp2
+
+
+ Support
-
+
+
+ Benötigen Sie weitere Hilfe?
+
+
+
+
+ https://www.ausweisapp.bund.de/fragen-und-antworten/support/
+
+
+
+
+ Bewerten Sie die AusweisApp2.
+
+
+
Melden Sie einen Fehler
-
+
Sie haben einen Fehler gefunden? Teilen Sie ihn uns mit, damit wir ihn beheben können.
-
+
Android Protokolle
-
+
<Bitte beschreiben Sie den Fehler>
@@ -566,103 +577,90 @@
GeneralSettingsWidget
-
+
Softwareaktualisierungen:
-
+
Verlauf:
-
+
beim Programmstart prüfen
-
+
nach Aktualisierungen suchen
-
+
Bildschirmtastatur:
-
+
verwenden
-
+
AusweisApp2 automatisch starten:
-
+
beim Systemstart
-
+
Fenster der AusweisApp2 automatisch schließen:
-
+
nach erfolgreichem Ausweisen
-
+
speichern
-
+
Beim Start des Programms auf Software-Aktualisierung prüfen
-
+
Verlauf speichern
-
+
AusweisApp2 automatisch beim Systemstart starten
-
+
AusweisApp2 automatisch nach erfolgreicher Authentifizierung schließen
-
+
Bildschirmtastatur verwenden
-
- HistoryDetails
-
-
-
- Löschen
-
-
-
-
- Gehe zu Online-Anwendung
-
-
HistoryListView
-
+
Löschen
@@ -670,53 +668,58 @@
HistoryListViewDelegateContent
-
+
heute
-
+
gestern
-
+
dddd
-
-
+
+
dd.MM.yyyy
-
-
+
+
Berühren Sie hier für mehr Details
HistoryView
-
-
+
+
+
+
Verlauf
-
-
-
+
+
+
+
Derzeit gibt es keine Einträge im Verlauf.
-
+
+
Löschen
-
+
+
Alle löschen
@@ -779,37 +782,37 @@
HistoryViewDetails
-
+
Anbieterinformationen
-
+
Anbieter
-
+
Zweck
-
+
Datum
-
-
+
+
dd.MM.yyyy
-
+
Angeforderte Daten
-
+
Nutzungsbedingungen
@@ -817,57 +820,57 @@
HistoryWidget
-
+
Auf dieser Seite sehen Sie den Verlauf Ihrer erfolgreichen Authentisierungen. Mit einem Doppelklick erhalten Sie weitere Informationen zum ausgewählten Diensteanbieter. Es ist darüber hinaus auch möglich, den Verlauf zu speichern.
-
+
Es wurden keine Verlaufseinträge gefunden. Bitte ändern Sie Ihr Suchkriterium.
-
+
Verlauf löschen...
-
+
Als PDF speichern...
-
+
Verlauf:
-
+
speichern
-
+
Suche:
-
+
Bitte geben Sie Ihre Suche ein
-
+
Verlauf speichern:
-
+
Verlauf speichern
-
+
Verlauf als PDF speichern
@@ -875,7 +878,7 @@
IdentifyController
-
+
Sie können nun Ihr Ausweisdokument vom Gerät entfernen.
@@ -883,116 +886,140 @@
IdentifyView
-
-
-
-
-
+
+
+
+
+
Ausweisen
-
+
+
+ Jetzt ausweisen
+
+
+
+
Bitte warten Sie einen Moment...
-
+
+
+ Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+
+
+
+
+ Bitte beachten Sie die Anzeige Ihres Kartenlesegeräts.
+
+
+
+
+ Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises.
+
+
+
+
+ Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein.
+
+
+
Keine Netzwerkverbindung
-
+
Bitte stellen Sie eine Internetverbindung her oder beenden Sie den Vorgang.
-
-
-
- In Arbeit
-
IdentifyViewContent
-
-
-
+
+
+
+
Diensteanbieter
-
-
-
+
+
+
+
Zweck des Auslesevorgangs
-
-
-
+
+
+
+
Jetzt ausweisen
-
-
+
+
+
+
Transaktionsinformationen
-
-
-
+
+
+
+
Erforderliche Daten
-
-
-
+
+
+
+
Optionale Daten
+
+
+
+
+
+
+ Sie möchten sich bei folgendem Diensteanbieter ausweisen:
+
+
+
+
+
+
+
+ Folgende Daten Ihres Ausweises werden nach Eingabe der PIN ausgelesen und an den Diensteanbieter übermittelt:
+
IdentifyViewHeader
-
+
Hallo, hier haben Sie die Möglichkeit, die auf Ihrem Personalausweis hinterlegten Daten einzusehen.
-
+
Hallo, "%1" möchte Ihre Daten auslesen.
-
-
-
- Hallo, hier haben Sie die
-
-
-
-
- Hallo,
-
-
-
-
- Möglichkeit, die auf Ihrem Personalausweis hinterlegten Daten einzusehen.
-
-
-
-
- "%1"<br>möchte Ihre Daten auslesen
-
IdentifyWorkflow
-
+
Ausweisen
@@ -1000,76 +1027,59 @@
Information
-
-
- Information & Hilfe
-
-
-
+
Benötigen Sie Hilfe?
-
+
Dann sind Sie hier richtig.
-
-
- Häufig gestellte Fragen
+
+
+ Information
-
-
- Haben Sie Fragen zur Nutzung der AusweisApp2?
-
-
-
-
- https://www.ausweisapp.bund.de/service/haeufig-gestellte-fragen/
-
-
-
-
- Unterstützung
-
-
-
-
- Benötigen Sie weitere Hilfe?
-
-
-
-
- https://www.ausweisapp.bund.de/service/support/
-
-
-
+
Versionsinformationen
-
+
Hier finden Sie detaillierte Informationen zur AusweisApp2.
-
+
Softwarelizenz
-
+
Lesen Sie die Softwarelizenz auf der Internetseite der Anwendung.
-
+
https://www.ausweisapp.bund.de/download/
+
+ KnownDevicesListDelegate
+
+
+
+ (Verfügbar)
+
+
+
+
+ Letzte Verbindung:
+
+
ListViewDelegateContent
@@ -1089,34 +1099,34 @@
-
+
dd.MM.yyyy
LogFilesDialog
-
+
Protokolle
-
+
Datei:
-
+
Speichern...
-
+
Alte Dateien löschen...
-
+
Schließen
@@ -1124,47 +1134,62 @@
MoreView
-
+
Mehr
-
+
Versionsinformationen
-
+
FAQ
-
+
+
+ https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/
+
+
+
Support
-
+
+
+ https://www.ausweisapp.bund.de/fragen-und-antworten/support/
+
+
+
Bewerten
-
-
- Teilen
+
+
+ https://www.ausweisapp.bund.de/fragen-und-antworten/bewerten-sie-uns/
-
-
- Ich verwende die AusweisApp2, laden Sie die AusweisApp2 für Android: https://play.google.com/store/apps/details?id=com.governikus.ausweisapp2&hl=de
+
+
+ Softwarelizenz
-
-
- Teilen mit
+
+
+ https://www.ausweisapp.bund.de/download/
-
+
+
+ Fernzugriff konfigurieren
+
+
+
Entwickleroptionen
@@ -1172,46 +1197,51 @@
NavigationView
-
-
+
+
Ausweisen
-
-
+
+
- Diensteanbieter
+ Anbieter
-
-
+
+
Verlauf
-
-
+
+
PIN-Verwaltung
-
-
- Dialog & Rückmeldung
+
+
+ Hilfe & Feedback
-
-
- Information & Hilfe
+
+
+ Information
-
+
+
+ Smartphone als Kartenlesegerät
+
+
+
Entwickleroptionen
-
+
Mehr
@@ -1219,60 +1249,65 @@
NfcWorkflow
-
-
- NFC aktivieren
+
+
+ Ihr Gerät unterstützt kein NFC.
-
-
- Ihr Gerät unterstützt kein NFC.<br/>Bitte versuchen Sie Bluetooth.
+
+
+ Bitte versuchen Sie Bluetooth.
-
-
- NFC ist nicht aktiv.<br/>Bitte aktivieren Sie NFC.
+
+
+ NFC ist nicht aktiv.
-
+
+
+ Zu den NFC Einstellungen
+
+
+
+
+ Bitte aktivieren Sie NFC in Ihren Systemeinstellungen.
+
+
+
Verbindung wird hergestellt
-
-
- Ihr Gerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length). Sie können die Online-Ausweisfunktion daher mit diesem Gerät nur über einen separaten Bluetooth-Leser nutzen.
+
+
+ Ihr Gerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length). Sie können die Online-Ausweisfunktion daher mit diesem Gerät nur über einen separaten Bluetooth-Leser oder mit einem separaten Smartphone als Kartenleser nutzen.
-
-
- Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
+
+
+ Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
-
+
Bitte platzieren Sie Ihr Gerät<br/>über Ihrem Personalausweis.
-
-
-
- Bluetooth Kartenleser<br/>anstatt NFC benutzen
-
PinSettingsWidget
-
+
Bitte beachten Sie die Anzeige auf Ihrem Kartenlesegerät.
-
+
<h4>Änderung der PIN erfolgreich</h4>
-
+
@@ -1281,19 +1316,25 @@ If not, you can now remove your ID card form the card reader.
Anderenfalls können Sie nun Ihr Ausweisdokument vom Kartenlesegerät entfernen.
-
+
<html>
<h4>Es wurde kein Kartenlesegerät gefunden. Bitte stellen Sie sicher, dass ein Kartenlesegerät angeschlossen ist.</h4>
<p>Wenn Sie Hilfe bei der Einrichtung Ihres Kartenlesegerät benötigen, klicken Sie auf "Diagnose".</p>
+<p>Beachten Sie: Es ist zurzeit noch nicht möglich, Ihre PIN mithilfe der "Smartphone als Kartenleser"-Funktionalität zu ändern.
+Sie können jedoch Ihre PIN direkt am Smartphone ändern solange der Fernzugriff deaktiviert ist.
+</p>
</html>
-
+
-
+
-
+
Bitte stellen Sie sicher, dass an Ihrem Computer nur ein Kartenlesegerät mit aufliegendem Ausweisdokument angeschlossen ist.
-
+
<html>
<h4>Online-Ausweisfunktion deaktiviert</h4>
-<p>Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.</p>
+<p>Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.</p>
</html>
-
+
Wählen Sie für Ihre 6-stellige PIN eine Zahlenkombination, die nicht leicht zu erraten ist, also weder "123456", noch Ihr Geburtsdatum oder andere Zahlen, die auf dem Ausweisdokument aufgedruckt sind.
-Bei der erstmaligen PIN-Änderung geben Sie bitte in das Feld "Aktuelle PIN / Transport-PIN" Ihre 5-stellige Transport-PIN ein. Sie finden die Transport-PIN in dem Schreiben, das Sie nach Beantragung Ihres Ausweisdokuments von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde erhalten haben.
-
+Bei der erstmaligen PIN-Änderung geben Sie bitte in das Feld "Aktuelle PIN / Transport-PIN" Ihre 5-stellige Transport-PIN ein. Sie finden die Transport-PIN in dem Schreiben, das Sie nach Beantragung Ihres Ausweisdokuments von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde erhalten haben.
-
+
Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie zunächst Ihre 6-stellige Zugangsnummer eingeben. Die Zugangsnummer finden Sie beim Personalausweis auf der Vorderseite rechts neben dem letzten Tag der Gültigkeitsdauer. Beim elektronischen Aufenthaltstitel finden Sie die Zugangsnummer über Ihrer Unterschrift.
-
+
<h4>Eingabe der PUK erfolgreich</h4><p>Ihr Ausweis ist entsperrt. Sie haben nun erneut drei Versuche, Ihre PIN zu ändern.</p>
-
+
Aktuelle PIN / Transport-PIN:
-
+
Neue PIN:
-
+
Bestätigen:
-
+
Zugangsnummer (CAN):
-
+
PUK:
-
+
Klicken Sie auf "PIN ändern", um eine neue PIN zu setzen.
-
+
Klicken Sie auf "PUK eingeben", um Ihren Ausweis zu entsperren.
-
+
deactivatedReaderImageLabel
-
+
"Klicken Sie auf "PIN ändern", um zunächst Ihre Zugangsnummer einzugeben und anschließend eine neue PIN zu setzen. Die Zugangsnummer finden Sie beim Personalausweis auf der Vorderseite rechts neben dem letzten Tag der Gültigkeitsdauer. Beim elektronischen Aufenthaltstitel finden Sie die Zugangsnummer über Ihrer Unterschrift.
-
+
Zugangsnummer auf nPA Icon
-
+
- Icon des Kartenlesers
+ Icon des Kartenlesegeräts
-
+
- Kein Kartenleser Icon
+ Kein Kartenlesegerät Icon
-
+
- Mehrer Kartenleser Icon
+ Mehrer Kartenlesegerät Icon
-
+
- Deaktiverter Kartenleser Icon
+ Deaktiverter Kartenlesegerät Icon
-
+
PIN änderung erfolgreich icon
-
+
Kein Ausweisdokument icon
-
+
@@ -1441,44 +1481,82 @@ Please note that you can only use the PUK to unblock the eID function. If you ha
Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entsperren können. Sollten Sie Ihre PIN vergessen haben, können Sie von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde eine neue PIN setzen lassen.
+
+
+
+ Ihr entferntes Kartenlesegerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt).<
+
+
+
+
+ Mindestens eines Ihrer Kartenlesegeräte erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). Bitte platzieren Sie Ihren Ausweis auf einem anderen Kartenlesegerät.<
+
PinView
-
-
-
+
+
+
PIN-Verwaltung
-
+
+
PIN ändern
-
-
- In Arbeit...
+
+
+
+ Bitte warten Sie einen Moment...
+
+
+
+
+ Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+
+
+
+
+ Bitte beachten Sie die Anzeige Ihres Kartenlesegeräts.
+
+
+
+
+ Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises.
+
+
+
+
+ Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein.
PinViewContent
-
-
+
+
PIN-Verwaltung
-
-
+
+
Hier haben Sie die Möglichkeit, Ihre Transport-PIN in eine persönliche PIN zu ändern. Zudem können Sie jederzeit Ihre persönliche PIN ändern oder eine Blockierung mit Hilfe der Entsperrnummer (PUK) aufheben. Sie finden Ihre initiale PIN und die PUK in dem Schreiben, das Sie nach Beantragung Ihres Ausweisdokuments von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde erhalten haben.
-
-
+
+
Jetzt PIN ändern
@@ -1486,7 +1564,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
PinWorkflow
-
+
PIN-Verwaltung
@@ -1494,144 +1572,161 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
ProviderContactInfo
-
Kontakt
-
Unbekannt
+
+ ProviderContactInfo_tablet
+
+
+
+ Kontakt
+
+
+
+
+ Unbekannt
+
+
ProviderContactTab
-
+
Unbekannt
ProviderDetailButtonBar
-
-
-
- Online-Anwendung
-
ONLINE-ANWENDUNG
+
+ ProviderDetailButtonBar_tablet
+
+
+
+ Online-Anwendung
+
+
ProviderDetailDescription
-
Beschreibung
- ProviderDetailHistory
+ ProviderDetailDescription_tablet
-
-
- Verlauf
-
-
-
-
- Zweck des Auslesevorgangs
+
+
+ Beschreibung
- ProviderDetailHistoryInfo
+ ProviderDetailHistoryInfo_tablet
-
-
- Zweck des Auslesevorgangs
-
-
-
+
Diensteanbieter
-
+
+
+ Zweck des Auslesevorgangs
+
+
+
Daten auslesen
-
+
Nutzungsbedingungen
- ProviderDetailHistoryItem
+ ProviderDetailHistoryItem_tablet
-
+
heute
-
+
gestern
-
+
dddd
-
-
+
+
dd.MM.yyyy
-
+
Berühren Sie hier für mehr Details
+
+ ProviderDetailHistory_tablet
+
+
+
+ Verlauf
+
+
+
+
+ Zweck des Auslesevorgangs
+
+
ProviderDetailView
-
+
BESCHREIBUNG
-
+
KONTAKT
-
+
Beschreibung
-
+
Kontakt
-
+
+
Beschreibung nicht verfügbar
-
-
-
- Beschreibung nicht verfügbar
-
ProviderDetailsDialog
@@ -1644,17 +1739,15 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
ProviderHeader
-
-
-
- Online-Anwendung
+
+
+ Zum Anbieter
ProviderInfoSection
-
-
+
Berühren Sie hier für mehr Details
@@ -1662,25 +1755,25 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
ProviderModelItem
-
+
Homepage
-
+
E-Mail
-
+
Telefon
-
+
Kontakt
@@ -1689,47 +1782,52 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
ProviderView
-
-
+
+
Anbieter
-
+
+
Bürgerdienste
-
+
+
Versicherungen
-
+
+
Finanzen
-
+
+
Weitere Services
-
-
-
+
+
+
+
Kein Ergebnis gefunden
-
- <html><head><body><p>Dieser Bereich enthält eine Liste von Anbietern, die eine Online-Authentisierung anbieten. Diese Liste wird ständig aktualisiert.</p></body></html>
+
+ Dieser Bereich enthält eine Liste von Anbietern, die eine Online-Authentisierung anbieten. Diese Liste wird ständig aktualisiert.
@@ -1740,7 +1838,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
ProviderViewDelegate
-
+
i
@@ -1748,27 +1846,22 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
ProviderWidget
-
-
- <html><head/><body><p>In diesem Bereich finden Sie Anwendungen, die die Authentisierung mit der Online-Ausweisfunktion unterstützen. Mit einem Klick auf einen Eintrag kommen Sie auf die Webseite des Diensteanbieters. Dieser Bereich wird stetig um weitere Anwendungsmöglichkeiten für den Online-Ausweis ergänzt.</p></body></html>
-
-
-
+
Es wurden keine Anbieter gefunden. Bitte ändern Sie Ihr Suchkriterium.
-
+
Diese Dialogseite listet die Angebote von Diensteanbietern auf, die die Online-Ausweisfunktion unterstützen. Klicken Sie auf einen Eintrag, um auf die Webseite des Diensteanbieters zu gelangen. Diese Dialogseite wird kontinuierlich mit weiteren Angeboten zur Online-Ausweisfunktion aktualisiert.
-
+
Suche:
-
+
Bitte geben Sie Ihre Suche ein
@@ -1776,67 +1869,290 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
RandomPinDialog
-
-
- *
-
-
-
+
OK
-
+
Abbrechen
-
+
Löschen
-
+
PIN-Eingabefeld
-
+
Bildschirmtastatur
- ReaderDriverDialog
+ ReaderConfigurationInfo
-
+
+
+ Unbekanntes Kartenlesegerät
+
+
+
+ ReaderDeviceDialog
+
+
Diagnose
-
+
Schließen
- ReaderDriverWidget
+ ReaderDeviceWidget
-
+
+
+ Um die Online-Ausweisfunktion des Personalausweises nutzen zu können, benötigen Sie ein separates Kartenlesegerät oder auch ein geeignetes Smartphone. Die nachfolgende Übersicht stellt dar, in welchem Status sich ein angeschlossenes Kartenlesegerät oder verbundenes Smartphone befindet.
+
+
+
+
+ Smartphone als Kartenleser
+
+
+
+
+ Es wurde kein Smartphone mit aktiviertem Fernzugriff gefunden. Details zur Verwendung finden Sie in der Online-Hilfe.
+
+
+
+
+ Koppeln
+
+
+
+
+ Verwerfen
+
+
+
+
+ Kartenlesegeräte
+
+
+
+
+ Es wurde kein angeschlossenes Kartenlesegerät gefunden. Details zur Installation von Kartenlesegeräten finden Sie in der Online-Hilfe.
+
+
+
+
+ Nachdem ein neues Kartenlesegerät angeschlossen worden ist, kann es einige Sekunden dauern bis der Treiber erkannt wird. Unter Umständen kann ein Neustart Ihres Betriebssystems notwendig sein.
+
+
+
TextLabel
+
+
+ RemotePinInputDialog
-
-
- Nachdem ein neues Kartenlesegerät angeschlossen worden ist, kann es einige Sekunden dauern bis der Treiber erkannt wird.
+
+
+ Eingabe des Kopplungscodes
+
+
+
+
+ Geben Sie den 4-stelligen Kopplungscode ein, der auf Ihrem anderen Gerät angezeigt wird.
+
+
+
+ RemoteServicePairingPopup
+
+
+
+ Kopplungscode
+
+
+
+
+ Geben Sie den Kopplungscode ein, der auf Ihrem anderen Gerät angezeigt wird, um es als Kartenlesegerät zu verwenden
+
+
+
+
+ Geben Sie diesen Code auf Ihrem anderen Gerät ein, um dieses Gerät als Kartenlesegerät zu verwenden
+
+
+
+
+ Kopplung starten
+
+
+
+ RemoteServiceSettings
+
+
+
+ Fernzugriff konfigurieren
+
+
+
+
+ Die Kopplung ist fehlgeschlagen. Bitte starten Sie eine neue Kopplung an Ihrem anderen Gerät und geben den angezeigten Kopplungscode ein.
+
+
+
+
+ Gerätename
+
+
+
+
+ Wählen Sie einen Gerätenamen, unter dem Ihr Smartphone im Netzwerk gefunden werden kann:
+
+
+
+
+ Tastaturmodus
+
+
+
+
+ PIN-Eingabe auf dem Smartphone
+
+
+
+
+ Gekoppelte Geräte
+
+
+
+
+ Kein Gerät gekoppelt.
+
+
+
+
+ Verfügbare Geräte
+
+
+
+
+ Kein entferntes Kartenlesegerät in Ihrem Netzwerk verfügbar. Bitte stellen Sie sicher, dass die Funktion "Fernzugriff" in der AusweisApp2 auf Ihrem anderen Gerät aktiviert ist. Beide Geräte müssen sich im selben Netzwerk befinden.
+
+
+
+
+ Aktivieren Sie den Kopplungsmodus auf dem anderen Gerät wenn er noch nicht aktiviert sein sollte.
+
+
+
+
+ OK
+
+
+
+ RemoteServiceView
+
+
+
+ Smartphone als Kartenlesegerät
+
+
+
+
+ Bitte starten Sie den Fernzugriff, damit Sie Ihr Smartphone als Kartenlesegerät für die AusweisApp2 nutzen können. Bitte beachten Sie: dies ist nur möglich, wenn beide Geräte mit demselben WLAN verbunden sind.
+
+
+
+
+ NFC aktivieren
+
+
+
+
+ Fernzugriff stoppen
+
+
+
+
+ Fernzugriff starten
+
+
+
+
+ Kopplung starten
+
+
+
+
+ Kartenzugriff
+
+
+
+
+ Bitte beachten Sie die Anzeige auf Ihrem anderen Gerät.
+
+
+
+
+ Einstellungen
+
+
+
+ RemoteWorkflow
+
+
+
+ WLAN aktivieren
+
+
+
+
+ Fortsetzen
+
+
+
+
+ Verbindung wird hergestellt
+
+
+
+
+ Ermittle Ausweis
+
+
+
+
+ Um den Fernzugriff zu nutzen muss WLAN aktiviert werden. Bitte aktivieren Sie WLAN in Ihren Einstellungen.
+
+
+
+
+ Kein gekoppeltes und aktiviertes Gerät gefunden. Stellen Sie sicher, dass der Fernzugriff auf Ihrem Gerät gestartet wurde.
+
+
+
+
+ Bitte legen Sie Ihren Ausweis auf.
ResultView
-
-
+
+
Ok
@@ -1844,12 +2160,12 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
SearchBar
-
+
Suchen
-
+
Abbrechen
@@ -1857,17 +2173,17 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
SelfAuthenticationData
-
+
Ausweisen
-
+
Daten erfolgreich gelesen
-
+
Ok
@@ -1875,7 +2191,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
SelfInfoWidget
-
+
Folgende Daten wurden aus Ihrem Ausweisdokument ausgelesen:
@@ -1883,27 +2199,27 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
SelfInformationWidget
-
+
Überall wo Sie dieses Logo sehen, können Sie Ihr Ausweisdokument einsetzen.
-
+
Meine Daten einsehen
-
+
Meine Daten jetzt einsehen...
-
+
Über die Schaltfläche "Meine Daten jetzt einsehen..." können Sie sich die im Chip Ihres Ausweisdokuments gespeicherten Daten anzeigen lassen. Um die Daten anzeigen zu können, benötigt diese Anwendung eine Internetverbindung. Es erfolgt keine Speicherung oder Weiterverarbeitung Ihrer persönlichen Daten.
-
+
eID Logo
@@ -1911,154 +2227,134 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
SettingsWidget
-
+
Allgemein
-
+
PIN-Verwaltung
-
+
Diagnose...
-
+
Abbrechen
-
+
Übernehmen
-
-
- Treibersuche
+
+
+ Kartenlesegeräte
StepAuthenticationEac1Widget
-
+
AusweisApp2
-
-
- <html><head/><body><p align="justify">Hier erhalten Sie Informationen über den Diensteanbieter, der die Daten aus Ihrem Personalausweis auslesen möchte. Für weitere Informationen drücken Sie bitte die Schaltfläche "mehr...".</p></body></html>
-
-
-
+
Diensteanbieter
-
+
Zweck des Auslesevorgangs:
-
+
Name:
-
+
mehr...
-
-
- <html><head/><body><p align="justify">Hier können Sie die Datenfelder an/abwählen, die ausgelesen werden sollen. Felder, die Sie nicht abwählen können, sind durch den Diensteanbieter als Pflichtfelder festgelegt worden. Diese Felder sind daher nicht abwählbar.</p></body></html>
-
-
-
+
Daten
-
+
Wichtige Transaktionsinformationen
-
+
Folgende Daten werden von dem Diensteanbieter benötigt. Bei Datenfeldern, die als "abwählbar" gekennzeichnet sind, können Sie entscheiden, ob Sie diese Daten übermitteln möchten.
-
+
Details
- SupportView
+ TechnologyInfo
-
-
- Support
-
-
-
-
- per E-Mail
-
-
-
-
- Sie können unseren E-Mail- Support erreichen unter: <a href="mailto:support@ausweisapp.de">support@ausweisapp.de</a>
-
-
-
-
- Per Telefon
-
-
-
-
- Sie können unsere E-Mail- Support erreichen unter: <a href="tel:+491805348743">+49 1805 348 743</a> (*14 ct./Minute, Mobilfunk kann abweichen)
-
-
-
-
- Erreichbarkeit
-
-
-
-
- Unser Support ist erreichbar von Montag bis Freitag 09:00-17:00, außer an Feiertagen.
+
+
+ Das Gerät %1 wurde entkoppelt, da es nicht auf Verbindungsversuche reagiert hat. Versuchen Sie das Gerät erneut zu koppeln wenn sie es zur Selbstauthentifizierung verwenden möchten.
- TitleBar
+ TechnologySwitch
-
-
- Ausweisen
+
+
+ NFC
+
+
+
+
+ WLAN
+
+
+
+
+ Bluetooth
+
+
+
+
+ WLAN Kartenlesegerät anstelle <br/>vom Bluetooth Kartenlesegerät verwenden
+
+
+
+
+ Bluetooth Kartenlesegerät anstelle <br/>vom WLAN Kartenlesegerät verwenden
TitleBarAction
-
+
Abbrechen
-
+
Bearbeiten
-
+
< Zurück
@@ -2066,57 +2362,52 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
UpdateWindow
-
+
Software-Aktualisierung
-
+
Eine aktuellere Version der AusweisApp2 ist verfügbar!
-
+
AusweisApp2 %1 ist jetzt verfügbar - Sie haben %2. Wollen Sie die neue Version jetzt herunterladen?
-
+
Die Aktualisierungsdatei finden Sie hier:
-
-
- <a href="%1">%1</a>
-
-
-
+
Aktualisierungshinweise:
-
+
Laden Sie die Aktualisierung herunter und beenden Sie die laufende "AusweisApp2". Installieren Sie das Update und starten "AusweisApp2" erneut.
-
+
Wenn Sie "Aktualisierung herunterladen" klicken, wird dieser Link in Ihrem Browser geöffnet.
-
+
Aktualisierung auslassen
-
+
Später erinnern
-
+
Aktualisierung herunterladen
@@ -2124,7 +2415,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
VersionInformation
-
+
Versionsinformationen
@@ -2132,27 +2423,27 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::AboutDialog
-
-
- Über %1
+
+
+ Weitere Informationen
-
-
- <b>Weitere Informationen:</b> %1
+
+
+ Version
-
-
- Die aktuellen Release-Notes finden Sie %1 hier. %2
+
+
+ Die aktuellen Release-Notes finden Sie %1 hier.%2
-
-
- <b>Version:</b> %1 (%2)
+
+
+ Über %1 - %2
-
+
Der Entwicklermodus richtet sich an Integratoren / Entwickler für neue Dienste. Aus diesem Grund funktioniert der Entwicklermodus lediglich in der Test-PKI. Durch Aktivierung des Entwicklermodus werden einige Sicherheitsprüfungen abgestellt. Die Authentisierung wird auch dann weitergeführt, wenn die AusweisApp2 im Normalbetrieb die Authentisierung mit einer Fehlermeldung abbrechen würde. Der übergangene Fehler im Entwicklermodus wird im angehängten Fenster unterhalb der AusweisApp2 angezeigt.
@@ -2160,165 +2451,165 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::AccessRoleAndRightsUtil
-
+
WRITE_DG17
-
+
WRITE_DG18
-
+
WRITE_DG19
-
+
WRITE_DG20
-
+
WRITE_DG21
-
-
+
+
Optionale Daten
-
+
Nebenbestimmungen II
-
+
Nebenbestimmungen I (nur eAT)
-
+
Pseudonym
-
+
Anschrift
-
+
Geburtsname
-
+
Geburtsdatum
-
+
Doktorgrad
-
+
Ordens- / Künstlername
-
+
Vorname(n)
-
+
Gültig bis
-
+
Ausstellender Staat
-
+
Wohnortbestätigung
+
-
RFU
-
+
Wohnort-ID
-
+
Geschlecht
-
+
Staatsangehörigkeit
-
+
Geburtsort
-
+
Familienname
-
+
Dokumentenart
-
+
Installation qualifizierter Signaturzertifikate
-
+
Installation von Signaturzertifikaten
-
+
PIN-Verwaltung
-
+
CAN erlaubt
-
+
Privilegiertes Terminal
-
+
Altersbestätigung
-
+
Unbekannt
@@ -2326,131 +2617,145 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::AppQtGui
-
+
AusweisApp2 wurde gestartet.
-
-
+
+
Diesen Hinweis nicht mehr anzeigen.
-
+
Öffnen
-
+
+
+ Aktualisierungen
+
+
+
+
+
+
+ Information
+
+
+
Der Entwicklermodus ist aktiviert.
-
+
Möchten Sie den Entwicklermodus deaktivieren?
-
+
Haben Sie Ihre Transport-PIN schon geändert? <br><br>Bevor Sie das erste mal die Online-Ausweisfunktion nutzen können, müssen Sie Ihre Transport-PIN durch eine persönliche, 6-stellige PIN ersetzen. Die Online-Ausweisfunktion ist mit der Transport-PIN nicht möglich.
-
+
Nein, PIN jetzt ändern
-
+
AusweisApp2 beenden
-
+
Die Benutzeroberfläche der %1 wird geschlossen.
-
+
Das Programm steht weiterhin im Infobereich zur Verfügung. Klicken Sie auf das Symbol der %1, um die Anwendung wieder zu öffnen.
+
+
+
+ Ihre Software ist auf dem aktuellen Stand.
+
governikus::AppQtMainWidget
-
-
- Datei speichern
-
-
-
+
https://www.ausweisapp.bund.de/service/haeufig-gestellte-fragen/
-
+
https://www.ausweisapp.bund.de/feedback/melden-sie-einen-fehler/
-
+
https://www.ausweisapp.bund.de/feedback/bewerten-sie-uns/
- governikus::CardReaderPage
+ governikus::CardInfo
-
-
- <div align="right">Schritt %1 von %2</div><div align="left">Kartenleser</div>
+
+
+ Karte
+ nicht eingelegt
-
-
-
+
+
+ Karte
+ unbekannter Typ
-
-
-
+
+
+ Ausweisdokument (PA/eAT)
governikus::CertificateDescriptionModel
-
+
Diensteanbieter
-
+
Aussteller des Berechtigungszertifikats
-
+
Name, Adresse und E-Mail vom Diensteanbieter
-
+
Zweck
-
+
Angabe der für den Dienstanbieter zuständigen Datenschutzaufsicht
-
+
Dienstanbieterinformationen
-
+
Gültigkeit
@@ -2458,7 +2763,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::CredentialDialog
-
+
Proxy-Sicherheit
@@ -2466,37 +2771,37 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::DeleteHistoryDialog
-
+
Verlauf löschen
-
+
Verlauf für diesen Zeitraum löschen:
-
+
Letzte Stunde
-
+
Letzter Tag
-
+
Letzte Woche
-
+
Letzte vier Wochen
-
+
Gesamter Zeitraum
@@ -2504,7 +2809,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::DetailDialog
-
+
Angaben zum Diensteanbieter
@@ -2512,12 +2817,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::DetailWidget
-
-
- Details
-
-
-
+
Dialog mit Details des Diensteanbieters
@@ -2525,17 +2825,17 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::DiagnosisController
-
+
pcsclite %1
-
+
unbekannt
-
+
nicht verfügbar
@@ -2543,32 +2843,32 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::DiagnosisDialog
-
+
Diagnose
-
+
Diagnoseergebnis speichern
-
-
- /AusweisApp2-Diagnose.txt
+
+
+ AusweisApp2-Diagnose.txt
-
+
Textdateien (*.txt)
-
+
Dateifehler
-
+
Beim Speichern der Datei ist ein Fehler aufgetreten.
@@ -2576,614 +2876,633 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::DiagnosisWidget
-
-
-
-
+
+
+
+
Diagnose läuft...
-
-
+
Diagnose
-
-
+
+
Betriebssystem
-
-
+
+
Kartenlesegerät
-
-
+
+
PC/SC
-
-
+
+
Diagnosezeitpunkt
-
-
-
-
+
+
+
+
Version: %1
-
+
Komponenten
-
+
Komponenten:
-
+
Treiber
-
+
Treiber:
-
-
+
+
keine erkannt
-
+
Basis-Kartenlesegerät
-
+
Standard-/Komfort-Kartenlesegerät
-
-
+
+
Typ: %1
-
-
- Karte
- keine eingesteckt
-
-
-
-
- Karte
- unbekannter Typ
-
-
-
-
- Ausweisdokument (PA/eAT)
-
-
-
-
+
+
Karte: %1
-
-
+
+
Fehlbedienungszähler: %1
-
-
- d. MMMM yyyy',' hh:mm:ss 'Uhr'
+
+
+ d. MMMM yyyy, HH:mm:ss Uhr
-
-
+
+
Hersteller: %1
-
-
+
+
Dateipfad: %1
-
- governikus::GeneralSettingsWidget
-
-
-
- Allgemein
-
-
governikus::GlobalStatus
-
+
Es ist kein Fehler aufgetreten.
-
+
Während der Verarbeitung ist ein unerwarteter Fehler aufgetreten.
-
+
Das Ausweisdokument wurde entfernt. Der Vorgang wird abgebrochen.
-
+
Die Echtheit Ihres Ausweisdokuments konnte nicht bestätigt werden.
-
+
Die Anwendung hat eine unbekannte Nachricht vom Server erhalten.
-
+
Die Anwendung hat eine nicht erwartete Nachricht vom Server erhalten.
-
+
Nach dreimaliger Falscheingabe ist Ihre PIN gesperrt. Die Nutzung der Online-Ausweisfunktion ist nun nicht mehr möglich.
-
+
Eine oder mehrere Zertifikatsprüfungen schlugen fehl.
-
+
Kein eindeutiges AT CVC
-
+
Kein eindeutiges DV CVC
-
+
Die Authentisierung ist fehlgeschlagen.
-
+
Keine Zertifikatsbeschreibung vorhanden.
-
+
Es konnte keine URL in der Zertifikatsbeschreibung gefunden werden.
-
+
Die Zertifikatsbeschreibung passt nicht zum Zertifikat.
-
+
Die URL in der Zertifikatsbeschreibung und die TCToken-URL erfüllen die Same-Origin-Policy nicht.
-
+
Die sichere Verbindung konnte nicht aufgebaut werden
-
+
Die Anwendung hat einen Fehler vom Server erhalten.
-
+
Hashwert des Zertifikats nicht in Zertifikatsbeschreibung
-
+
Keine Daten erhalten.
-
+
Ein Fehler ist aufgetreten. Bitte kontaktieren Sie unseren Support unter <a href="https://www.ausweisapp.bund.de/service/support/">AusweisApp2 Support</a>.
-
+
+
+ Die Authentisierung kann nicht gestartet werden. Es läuft bereits eine Operation.
+
+
+
Der Entwicklermodus darf nur in einer Testumgebung verwendet werden.
-
+
+
+ Der Dienst ist vorübergehend nicht verfügbar, bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.
+
+
+
Der Verbindungsaufbau dauert zu lange.
-
+
Der Verbindungsaufbau über den Proxy war nicht erfolgreich.
-
+
Die Verbindung zum Server ist fehlgeschlagen: Der Server hat eine nicht-standard Antwort gesendet.
-
+
Die Verbindung zum Server ist fehlgeschlagen: Es konnte keine sichere Verbindung aufgebaut werden.
-
+
Die Anwendung wurde mit den falschen Parametern aufgerufen.
-
+
Ein unbekannter Netzwerkfehler ist aufgetreten.
-
+
Das ausgewählte Kartenlesegerät kann nicht mehr angesprochen werden.
-
+
Bei der Kommunikation mit dem Kartenlesegerät ist ein Fehler aufgetreten.
-
+
Der Server lieferte keine oder nur unvollständige Informationen. Ihre persönlichen Daten konnten nicht ausgelesen werden.
-
+
Fehler bei der Verbindung mit dem Diensteanbieter. Der Verschlüsselungsalgorithmus oder die Länge des Schlüssels der SSL-Verbindung wird nicht unterstützt.
-
+
Fehler bei der Verbindung zum Server. Der Verschlüsselungsalgorithmus oder die Länge des Schlüssels im SSL-Zertifikat des Servers wird nicht unterstützt.
-
+
Leere Redirect-URL
-
+
Erwartete HTTP-redirect, tatsächlich erhalten: %1
-
+
Ungültiges URL-Schema: %1
-
+
Nicht wohlgeformte Redirect-URL: %1
-
+
Der Benutzer hat den Vorgang abgebrochen.
-
+
Bei der Eingabe wurde die maximale Zeit überschritten.
-
+
Karte nicht vorhanden
-
-
- Bei der Kommunikation mit dem Kartenlesegerät ist ein Fehler aufgetreten.
+
+
+ Bei der Kommunikation mit dem Ausweisdokument ist ein Fehler aufgetreten. Bitte überprüfen Sie, dass das Ausweisdokument korrekt aufgelegt ist und versuchen Sie es erneut.
-
-
- Ein Protokollfehler ist aufgetreten.
+
+
+ Ein Protokollfehler ist aufgetreten. Bitte überprüfen Sie, dass das Ausweisdokument korrekt aufgelegt ist und versuchen Sie es erneut. Wenn das Problem wieder auftritt kontaktieren Sie bitte unseren Support unter
-
+
+
+ https://www.ausweisapp.bund.de/service/support/
+
+
+
+
+ AusweisApp2 Support
+
+
+
Die eingegebene PIN ist ungültig.
-
+
Die eingegebene Zugangsnummer (CAN) ist ungültig.
-
+
Die eingegebene PUK ist ungültig.
-
+
Die PIN ist nach zu vielen Fehlversuchen gesperrt.
-
+
Die PIN ist nicht gesperrt.
-
+
Die eingegebene PUK wurde zehn Mal verwendet und ist außer Betrieb. Bitte kontaktieren Sie die für die Ausgabe Ihres Ausweisdokuments zuständige Behörde um Ihre PIN zu entsperren.
-
+
Die neue PIN und ihre Wiederholung stimmen nicht überein.
-
+
Die neue PIN hat eine ungültige Länge.
-
+
- Es ist ein Fehler während des Verbindungsaufbaus zu einem Kartenleser aufgetreten.
+ Es ist ein Fehler während des Verbindungsaufbaus zu einem Kartenlesegerät aufgetreten.
-
+
- Es ist ein Fehler während der Suche nach einem Kartenleser aufgetreten.
+ Es ist ein Fehler während der Suche nach einem Kartenlesegerät aufgetreten.
-
+
- Die Verbindung zum Remote-Lesegerät wurde ordnungsgemäß geschlossen.
+ Die Verbindung zum entfernten Kartenlesegerät wurde ordnungsgemäß geschlossen.
-
+
Die Verbindung zum Remote-Lesegerät wurde abgebrochen.
-
+
Unbekannter Fehler beim Beenden der Verbindung zum Remote-Lesegerät.
+
+
+
+ Die Verbindungsanforderung zum entfernten Kartenlesegerät enthält einen ungültigen Parameter.
+
+
+
+
+ Die Anforderung der erweiterten Verschlüsselung mit dem entfernten Kartenlesegerät enthält ein leeres Kennwort.
+
+
+
+
+ Die Verbindungsanforderung zum entfernten Kartenlesegerät enthält keine unterstützte API-Version.
+
+
+
+
+ Bei der Verbindung zum entfernten Kartenlesegerät kam es zu einer Zeitüberschreitung.
+
+
+
+
+ Bei der Verbindung zum entfernten Kartenlesegerät ist ein Fehler aufgetreten.
+
+
+
+
+ Das zu koppelnde Gerät hat die Verbindung verweigert. Überprüfen Sie bitte den Kopplungscode.
+
+
+
+
+ Datei nicht gefunden.
+
+
+
+
+ Speichern der Datei nicht möglich.
+
+
+
+
+ Die empfangenen Daten waren beschädigt.
+
governikus::GuiUtils
-
+
Falsche Zugangsnummer (CAN)
-
+
Die eingegebene Zugangsnummer (CAN) ist nicht korrekt. Sie haben noch eine weitere Möglichkeit die korrekte PIN einzugeben. Beachten Sie, dass Sie diesen letzten Versuch mit der Zugangsnummer (CAN) bestätigen müssen.
-
+
Falsche PUK
-
+
PUK ist außer Betrieb
-
+
Bitte geben Sie Ihre PUK erneut ein.
-
+
Sie haben die PUK zehn Mal korrekt eingegeben und damit die maximale Anzahl erreicht. Die PUK ist daher außer Betrieb und kann nicht mehr zum Entsperren der PIN verwendet werden. Bitte wenden Sie sich zum Entsperren der PIN an die zuständige Behörde, die Ihr Ausweisdokument ausgegeben hat.
-
+
Falsche PIN
-
+
Ihre PIN ist nach dreimaliger Fehleingabe gesperrt. Die Nutzung der Online-Ausweisfunktion ist in diesem Zustand nicht mehr möglich.</p><p>Sie können die PIN im folgenden Dialog entsperren. Die Anwendung unterstützt Sie in den nun notwendigen Schritten.
-
+
Die eingegebene PIN ist nicht korrekt. Sie haben noch eine weitere Möglichkeit die korrekte PIN einzugeben. Beachten Sie, dass Sie diesen letzten Versuch mit der Zugangsnummer (CAN) bestätigen müssen.
-
+
Die eingegebene PIN ist nicht korrekt. Sie haben noch %1 weitere Möglichkeiten die korrekte PIN einzugeben.
-
+
PIN gesperrt
-
+
Sie haben Ihre PIN dreimal falsch eingegeben. Die Online-Ausweisfunktion ist jetzt blockiert. Die Blockierung können Sie mit Ihrer Entsperrnummer (PUK) aufheben. Sie finden Ihre PUK in dem Schreiben, das Sie nach Beantragung Ihres Ausweisdokuments von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde erhalten haben. Bitte beachten Sie: Sie können mit Ihrer PUK lediglich Ihren Online-Ausweis entsperren. Sollten Sie Ihre PIN vergessen haben, können Sie von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde eine neue PIN setzen lassen.<br>Wollen Sie die Blockierung nun aufheben?
-
- governikus::HistoryDetailWidget
-
-
-
- Anbieterinformationen
-
-
governikus::HistoryModelSearchFilter
-
+
dd.MM.yyyy
governikus::HistoryWidget
-
-
- Verlauf
-
-
-
+
Datum
-
+
Details
-
-
-
-
+
+
dd.MM.yyyy HH:mm
-
+
Datum:
-
-
- <b>Diensteanbieter:</b>
+
+
+ Diensteanbieter
-
-
- <b>Zweck:</b>
+
+
+ Zweck
-
-
- <b>Daten:</b>
+
+
+ Daten
-
-
- Verlauf speichern
+
+
+ AusweisApp2.Verlauf.%1.pdf
-
-
- PDF Dokumente (*.pdf)
+
+
+ Speichern
+
+
+
+
+ PDF-Dokumente
governikus::LogFilesDialog
-
+
Protokoll
-
+
Akuelles Protokoll
-
-
- dd.MM.yyyy hh:mm:ss
+
+
+ dd.MM.yyyy HH:mm:ss
-
+
- Datei kann nicht geöffnet werden:
+ Datei kann nicht geöffnet werden:
-
+
- Die Datei ist größer als 3MB und kann nicht angezeigt werden:
+ Die Datei ist größer als 3MB und kann nicht angezeigt werden:
-
+
Protokolle löschen
-
+
Wolle Sie wirklich alle alten Protokolle löschen?
-
-
- Protokoll speichern
+
+
+ Speichern
-
-
- /AusweisApp2-logfile.log
-
-
-
-
- Textdateien (*.txt)
-
-
-
+
Dateifehler
-
+
Beim Speichern der Datei ist ein Fehler aufgetreten.
@@ -3191,58 +3510,35 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::LogHandler
-
+
Es ist ein Fehler bei der Protokollverwaltung aufgetreten: %1
-
- governikus::MainPage
-
-
-
- Ausweisen
-
-
-
-
- Anbieter
-
-
-
-
- Verlauf
-
-
-
-
- Einstellungen
-
-
governikus::NumberModel
-
-
- Sie haben eine falsche PIN eingegeben. Bitte versuchen Sie es erneut.
+
+
+ Die eingegebene PIN ist nicht korrekt. Sie haben noch 2 weitere Möglichkeiten die korrekte PIN einzugeben.
-
-
+
+
Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises.
-
+
Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein.
-
+
Sie haben eine falsche CAN eingegeben. Bitte versuchen Sie es erneut.
-
+
Sie haben eine falsche PUK eingegeben. Bitte versuchen Sie es erneut.
@@ -3250,73 +3546,87 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::PdfCreator
-
-
- Verlauf
-
-
-
+
Die AusweisApp2 ist ein Produkt der Governikus GmbH & Co. KG - im Auftrag des Bundesministeriums des Innern.
-
+
Mehr Information finden Sie auf <a href='https://www.ausweisapp.bund.de/'>https://www.ausweisapp.bund.de/</a>
- governikus::PdfExport
+ governikus::PdfExporter
-
-
- dd.MM.yyyy
-
-
-
-
- HH:mm
-
-
-
-
- Die folgenden Daten wurden hier %1 %2 gespeichert:
-
-
-
+
Datum
-
+
Details
-
-
+
+
dd.MM.yyyy HH:mm
-
+
Diensteanbieter:
-
+
Zweck:
-
+
Daten:
-
-
- governikus::PinSettingsInfoWidget
-
+
+
+
+ dd.MM.yyyy
+
+
+
+
+
+ HH:mm
+
+
+
+
+ Die folgenden Daten wurden hier %1 %2 gespeichert:
+
+
+
+
+ Verlauf
+
+
+
+
+ Eintrag
+
+
+
+
+ Inhalt
+
+
+
+
+ Die folgenden Daten wurden hier %1 %2 aus Ihrem Ausweisdokument ausgelesen:
+
+
+
Information
@@ -3324,89 +3634,85 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::PinSettingsWidget
-
-
- PIN-Verwaltung
-
-
-
-
-
-
-
+
+
+
+
+
Es sind nur Ziffern (0-9) erlaubt.
-
+
PUK eingeben
-
+
PIN ändern
-
+
Die PIN im Feld "%1" stimmt nicht mit der PIN im Feld "%2" überein.
-
-
+
+
+
Die PIN stimmt überein.
-
-
- Icon des Kartenlesers
+
+
+ Icon des Kartenlesegeräts
-
-
- Kein Kartenleser icon
+
+
+ Kein Kartenlesegerät icon
governikus::ProviderModel
-
+
%1 Sekunde frei, danach
-
+
Festnetzpreis %1;
-
+
Mobilfunkpreise abweichen.
-
+
Mobilfunkpreise max. %1
-
+
%1/min
-
+
%1/Anruf
-
+
%1 EUR
-
+
%1 ct
@@ -3414,17 +3720,12 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::ProviderWidget
-
-
- Diensteanbieter
-
-
-
+
Name
-
+
Adresse
@@ -3432,7 +3733,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::QmlExtension
-
+
Anwendungsprotokoll per E-Mail senden...
@@ -3440,273 +3741,355 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::RandomPinDialog
-
+
Bildschirmtastatur
- governikus::ReaderDriverDialog
+ governikus::ReaderDeviceDialog
-
+
Treiber für Kartenlesegeräte
- governikus::ReaderDriverWidget
+ governikus::ReaderDeviceWidget
-
-
- Treiber für Kartenlesegeräte
+
+
+ Kein Kartenlesegerät erkannt
-
-
- Gerät
+
+
+ Wählen Sie ein Kartenlesegerät aus, um mehr Informationen zu erhalten
-
-
- Status
-
-
-
-
-
- Installiert
-
-
-
-
-
- Ein passender Treiber wird gesucht...
-
-
-
-
- <html><body><p>Kein Kartenleser gefunden</p></body></html
-
-
-
-
- <html><body><p>Bitte wählen Sie ein Gerät aus, um sich mehr Informationen anzeigen zu lassen</p></body></html
-
-
-
-
- <html><body><p>Das Gerät ist korrekt installiert</p></body></html
-
-
-
-
- <html><body><p>Der Treiber für das Gerät ist nicht installiert, bitte installieren Sie den Treiber, den Sie über diese Adresse herunterladen können: <a href="%1">%1</a></p></body></html>
-
-
-
-
- Die Liste der Kartenlesegeräte wurde zuletzt am %1 aktualisiert.
-
-
-
+
HH:mm:ss
-
-
- Nicht installiert
+
+
+ Die Liste der Kartenlesegeräte wurde zuletzt um %1 aktualisiert.
+
+
+
+
+ Aktivieren Sie den Kopplungsmodus auf dem anderen Gerät wenn er noch nicht aktiviert sein sollte.
+
+
+
+
+ Kopplung
+
+
+
+ governikus::ReaderDriverModel
+
+
+
+ Angeschlossen mit Treiber
+
+
+
+
+ Angeschlossen ohne Treiber
+
+
+
+
+ Nicht angeschlossen
+
+
+
+
+ Gerät
+
+
+
+
+ Status
+
+
+
+
+ Das Kartenlesegerät ist korrekt installiert.
+
+
+
+
+ Für das Kartenlesegerät wurden keine Treiber erkannt, bitte installieren Sie den Treiber: %1
+
+
+
+ governikus::RemoteDeviceModel
+
+
+
+ Nicht verbunden
+
+
+
+
+ Gekoppelt und verfügbar
+
+
+
+
+ Gekoppelt aber nicht verfügbar
+
+
+
+
+ Nicht gekoppelt
+
+
+
+
+ Gerät
+
+
+
+
+ Status
+
+
+
+
+ dd.MM.yyyy HH:mm
+
+
+
+ governikus::RemotePinInputDialog
+
+
+
+ Es sind nur Ziffern (0-9) erlaubt.
+
+
+
+
+ Ein Kopplungscode besteht aus 4 Ziffern.
+
+
+
+ governikus::RemoteServiceModel
+
+
+
+ NFC ist auf Ihrem Gerät nicht verfügbar.
+
+
+
+
+ Bitte aktivieren Sie NFC, um den Fernzugriff zu benutzen.
+
+
+
+
+ Bitte verbinden Sie sich mit Ihrem WLAN, um den Fernzugriff zu benutzen.
+
+
+
+ governikus::RemoteServiceSettings
+
+
+
+ Entferntes Kartenlesegeräte
governikus::Result
-
+
Während der Verarbeitung ist ein unerwarteter Fehler aufgetreten.
-
+
Für die Operation fehlen die benötigten Rechte.
-
+
Während der Verarbeitung ist ein interner Fehler aufgetreten.
-
+
Ein fehlerhafter Parameter wurde übermittelt.
-
+
Die Schnittstellenfunktion ist unbekannt.
-
+
Die Schnittstelle ist nicht initialisiert.
-
-
+
+
Die aktuelle Sitzung wurde beendet.
-
-
-
+
+
+
Während der Verarbeitung ist ein Verbindungsfehler aufgetreten.
-
-
+
+
Der Vorgang wurde wegen einer Zeitüberschreitung abgebrochen.
-
+
Der Vorgang wurde wegen einer ungültigen Verbindung abgebrochen.
-
+
Es konnte keine sichere Verbindung hergestellt werden.
-
+
Der Vorgang wurde wegen der Verwendung eines unbekannten Protokolls abgebrochen.
-
+
Der Vorgang wurde wegen der Verwendung eines unbekannten Verschlüsselungsalgorithmus abgebrochen.
-
+
Der Vorgang wurde wegen der Verwendung eines unbekannten Webservice-Bindings abgebrochen.
-
+
Die Erzeugung eines Schlüssels für das Signaturzertifikat war nicht möglich.
-
-
+
+
Der Benutzer hat den Vorgang abgebrochen.
-
+
Eine oder mehrere Zertifikatsprüfungen schlugen fehl. Der Vorgang wird aus Sicherheitsgründen abgebrochen.
-
-
- Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweisdokuments ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
+
+
+ Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweisdokuments ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
-
+
Die Echtheit Ihres Ausweisdokuments konnte nicht überprüft werden. Bitte stellen Sie sicher, dass Sie ein echtes Ausweisdokument verwenden. Bitte beachten Sie, dass Sie bei Testanwendungen einen Testausweis verwenden müssen.
-
+
Die Altersverifikation war nicht erfolgreich.
-
+
Die Wohnortverifikation war nicht erfolgreich.
-
+
Das Ausweisdokument ist ungültig oder gesperrt.
- governikus::SelfAuthenticationData
+ governikus::SelfData
-
+
Diese Datengruppe wurde in dieser Chip-Generation nicht gespeichert.
-
-
- governikus::SelfAuthenticationModel
-
+
+
+ dd.MM.yyyy
+
+
+
Familienname
-
+
Geburtsname
-
+
Vorname(n)
-
+
Doktorgrad
-
-
- dd.MM.yyyy
-
-
-
+
Geburtsdatum
-
+
Geburtsort
-
+
+
+
- Anschrift
+ Adresse
-
+
Dokumentenart
-
+
Staatsangehörigkeit
-
+
Ordens- / Künstlername
-
+
Ausstellender Staat
-
+
Nebenbestimmungen I (nur eAT)
@@ -3714,114 +4097,27 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::SelfInfoWidget
-
-
- dd.MM.yyyy
-
-
-
-
- Dokumentenart:
-
-
-
-
- Ausstellender Staat:
-
-
-
-
- Doktorgrad:
-
-
-
-
- Vorname(n):
-
-
-
-
- Familienname:
-
-
-
-
- Ordens- / Künstlername:
-
-
-
-
-
-
- Anschrift:
-
-
-
-
- Geburtsname:
-
-
-
-
- Geburtsdatum:
-
-
-
-
- Geburtsort:
-
-
-
-
- Staatsangehörigkeit:
-
-
-
-
- Nebenbestimmungen I:
-
-
-
+
Als PDF speichern...
-
-
- dd.MM.yyyy
-
-
-
-
- HH:mm
-
-
-
-
- Die folgenden Daten wurden hier %1 %2 aus Ihrem Ausweisdokument ausgelesen:
-
-
-
-
- Eintrag
-
-
-
-
- Inhalt
-
-
-
+
Daten des Ausweisdokuments als PDF speichern
-
+
+
+ AusweisApp2.Selbstauskunft.%1.pdf
+
+
+
Speichern
-
+
PDF-Dokumente
@@ -3829,167 +4125,127 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::SelfInformationWidget
-
-
- Ausweisen
+
+
+ Testumgebung
governikus::SettingsWidget
-
-
- Einstellungen
-
-
-
+
Übernehmen
-
+
+
+ Entwicklereinstellungen
+
+
+
Einstellungen übernehmen?
-
+
Möchten Sie die Änderungen übernehmen?
+
+
+
+ OK
+
governikus::SetupAssistantWizard
-
-
- - Einrichtungsassistent
-
-
-
-
- <div align="right">Schritt %1 von %2</div><div align="left">Einleitung</div>
-
-
-
+
Willkommen zum Einrichtungsassistenten der AusweisApp2. Sie werden in %1 Schritten durch die Einrichtung geführt. Sie können diesen Einrichtungsassistenten jederzeit abbrechen und später über das Hilfe-Menü erneut starten.
-
-
- Einleitung Schritt %1 von %2. Willkommen zum Einrichtungsassistenten der AusweisApp2. Sie werden in %2 Schritten durch die Einrichtung geführt. Sie können diesen Einrichtungsassistenten jederzeit abbrechen und später über das Hilfe-Menü erneut starten.
-
-
-
-
- <br><b>Verlauf</b><br><br>Die AusweisApp2 bietet Ihnen die Möglichkeit, durchgeführte Authentisierungen in einem Verlauf zu speichern. Nachfolgend haben Sie die Möglichkeit, diese Option zu aktivieren.
-
-
-
-
- Verlauf. Die AusweisApp2 bietet Ihnen die Möglichkeit, durchgeführte Authentisierungen in einem Verlauf zu speichern. Nachfolgend haben Sie die Möglichkeit, diese Option zu aktivieren.
-
-
-
-
- <div align="right">Schritt %1 von %2</div><div align="left">Kartenleser</div>
-
-
-
-
- Kartenleser Schritt %1 von %2. Um die Online-Ausweisfunktion mit der AusweisApp2 nutzen zu können benötigen Sie ein Kartenlesegerät. Stellen Sie sicher, dass Sie ein geeignetes Kartenlesegerät angeschlossen haben und dass die für Ihr Kartenlesegerät benötigten Treiber auf Ihrem System installiert sind. Die folgende Übersicht zeigt alle geeigneten Kartenlesegeräte. Zu jedem Kartenlesegerät ist ein Link zur Herstellerseite angegeben, dort können die aktuellen Treiber heruntergeladen werden.
-
-
-
-
- <div align="right">Schritt %1 of %2</div><div align="left">Firefox-Erweiterung NoScript</div>
-
-
-
-
- Firefox-Erweiterung NoScript Schritt %1 von %2.
-
-
-
-
- <b>Persönliche 6-stellige PIN</b><br><br>Vor der ersten Nutzung der Online-Ausweisfunktion müssen Sie die Transport-PIN durch eine persönliche 6-stellige PIN ersetzen. Die PIN-Verwaltung der AusweisApp2 bietet Ihnen dazu die Möglichkeit. Für das Ersetzen der Transport-PIN benötigen Sie den PIN-Brief, welcher Ihnen von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde zugesandt wurde.
-
-
-
-
- Personal 6-digit PIN. Vor der ersten Nutzung der Online-Ausweisfunktion müssen Sie die Transport-PIN durch eine persönliche 6-stellige PIN ersetzen. Die PIN-Verwaltung der AusweisApp2 bietet Ihnen dazu die Möglichkeit. Für das Ersetzen der Transport-PIN benötigen Sie den PIN-Brief, welcher Ihnen von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde zugesandt wurde.
-
-
-
+
PIN ändern
-
-
- <br>Sie können die AusweisApp2 nun verwenden. Weitere Einstellungen können Sie über die Funktion "Einstellungen" im Navigationsbereich vornehmen. Die AusweisApp2 verwendet die in Ihrem System konfigurierten Proxy-Einstellungen. Sie können diesen Einrichtungsassistenten jederzeit über das Menü "Hilfe" erneut starten. Die Schaltfläche "Abschließen" schließt den Einrichtungsassistenten und öffnet die Dialogseite "Einstellungen".
-
-
-
-
- Fast fertig! Schritt %1 von %2. Sie können die AusweisApp2 nun verwenden. Weitere Einstellungen können Sie über die Funktion Einstellungen im Navigationsbereich vornehmen. Die AusweisApp2 verwendet die in Ihrem System konfigurierten Proxy-Einstellungen. Sie können diesen Einrichtungsassistenten jederzeit über das Menü Hilfe erneut starten. Die Schaltfläche Abschließen; schließt den Einrichtungsassistenten und öffnet die Dialogseite der Funktion Einstellungen.
-
-
-
-
- Um die Online-Ausweisfunktion mit der AusweisApp2 nutzen zu können benötigen Sie ein Kartenlesegerät. Stellen Sie sicher, dass Sie ein geeignetes Kartenlesegerät angeschlossen haben und dass die für Ihr Kartenlesegerät benötigten Treiber auf Ihrem System installiert sind. Die folgende Übersicht zeigt alle geeigneten Kartenlesegeräte. Zu jedem Kartenlesegerät ist ein Link zur Herstellerseite angegeben, dort können die aktuellen Treiber heruntergeladen werden.
-
-
-
-
- Kartenleser
-
-
-
-
-
- Name / Hersteller
-
-
-
-
- Webseite
-
-
-
-
- Kartenleser Icon
-
-
-
+
Die Firefox-Erweiterung NoScript wurde auf Ihrem System gefunden. Die Konfiguration dieser Erweiterung kann Authentisierungs-Aufrufe für die %1 blockieren. Weitere Informationen erhalten Sie in der Online-Hilfe.
-
-
- <div align="right">Schritt %1 von %2</div><div align="left">Fast fertig!</div>
+
+
+ Einrichtungsassistent
-
-
- Verlauf:
+
+
+
+ Schritt %1 von %2
-
+
+
+ Einleitung
+
+
+
+
+ Verlauf
+
+
+
+
+ Die AusweisApp2 bietet Ihnen die Möglichkeit, durchgeführte Authentisierungen in einem Verlauf zu speichern. Nachfolgend haben Sie die Möglichkeit, diese Option zu aktivieren.
+
+
+
speichern
-
+
Verlauf speichern
+
+
+
+ Kartenlesegeräte
+
+
+
+
+ Firefox-Erweiterung NoScript
+
+
+
+
+ Fast fertig!
+
+
+
+
+ Persönliche 6-stellige PIN
+
+
+
+
+ Vor der ersten Nutzung der Online-Ausweisfunktion müssen Sie die Transport-PIN durch eine persönliche 6-stellige PIN ersetzen. Die PIN-Verwaltung der AusweisApp2 bietet Ihnen dazu die Möglichkeit. Für das Ersetzen der Transport-PIN benötigen Sie den PIN-Brief, welcher Ihnen von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde zugesandt wurde.
+
+
+
+
+ Sie können die AusweisApp2 nun verwenden. Weitere Einstellungen können Sie über die Funktion "Einstellungen" im Navigationsbereich vornehmen. Die AusweisApp2 verwendet die in Ihrem System konfigurierten Proxy-Einstellungen. Sie können diesen Einrichtungsassistenten jederzeit über das Menü "Hilfe" erneut starten. Die Schaltfläche "Abschließen" schließt den Einrichtungsassistenten und öffnet die Dialogseite "Einstellungen".
+
governikus::StateChangePin
-
+
Sie haben Ihre PIN erfolgreich geändert.
@@ -3997,7 +4253,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::StateEstablishPacePuk
-
+
PIN erfolgreich entsperrt
@@ -4005,7 +4261,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::StateWriteHistory
-
+
Gültigkeit:
@@ -4015,7 +4271,12 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::StepAdviseUserToRemoveCardGui
-
+
+
+ Information
+
+
+
Sie können nun Ihr Ausweisdokument vom Kartenlesegerät entfernen.
@@ -4023,12 +4284,12 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::StepAuthenticationEac1Gui
-
+
Information
-
+
Bitte beachten Sie die Anzeige Ihres Kartenlesegeräts.
@@ -4036,121 +4297,130 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::StepAuthenticationEac1Widget
-
+
Gültigkeit:
%1 - %2
-
-
+
+
Es sind nur Ziffern (0-9) erlaubt.
-
+
Karte wird geprüft
-
+
Diensteanbieter wird geprüft
-
+
Daten werden gelesen
-
+
Diensteanbieter wird geprüft
-
-
-
-
-
-
+
+
+
+
+
Jetzt ausweisen
-
+
Weitere Details unter "mehr..."
-
+
OK
-
+
Ausweisen
-
+
Ausweisen erfolgreich
-
+
Der Benutzer hat den Vorgang abgebrochen
-
+
Ergebnis
-
+
Bitte beachten Sie die Anzeige auf Ihrem Kartenlesegerät.
-
+
Bitte geben Sie Ihre 6-stellige Zugangsnummer (CAN) und Ihre PIN ein, um sich auszuweisen.
-
+
Bitte geben Sie Ihre 6-stellige PIN ein, um sich auszuweisen
-
+
Diensteanbieter:
-
+
Aussteller des Berechtigungszertifikats:
-
+
+
+ Hier erhalten Sie Informationen über den Diensteanbieter, der die Daten aus Ihrem Personalausweis auslesen möchte. Für weitere Informationen drücken Sie bitte die Schaltfläche "mehr...".
+
+
+
+
+ Hier können Sie die Datenfelder an/abwählen, die ausgelesen werden sollen. Felder, die Sie nicht abwählen können, sind durch den Diensteanbieter als Pflichtfelder festgelegt worden. Diese Felder sind daher nicht abwählbar.
+
+
+
Zugangsnummer (CAN):
-
-
-
+
+
+
Öffnen Sie den Bildschirmtastatur-Passwortdialog
-
+
Weitere Informationen mit dem Tabulator
-
+
PIN:
@@ -4158,65 +4428,101 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::StepChooseCardGui
-
+
+
+ Information
+
+
+
Abbrechen
-
+
Diagnose
-
+
+
+ Einstellungen
+
+
+
Es wurde kein Kartenlesegerät erkannt. Bitte stellen Sie sicher, dass ein Kartenlesegerät angeschlossen ist.
-
+
+
+ Wenn Sie ein lokales oder entferntes Kartenlesegerät einrichten wollen, klicken Sie auf die Schaltfläche "Einstellungen", um den laufenden Vorgang abzubrechen und die Einstellungen für das Kartenlesegerät zu öffnen.
+
+
+
Wenn Sie Hilfe benötigen oder Probleme mit Ihrem Kartenlesegerät haben, klicken Sie auf die Schaltfläche "Diagnose" für weitere Informationen.
-
+
+
+
+ Extended Length wird nicht überstützt.
+
+
+
+
+ Ihr entferntes Kartenlesegerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt).
+
+
+
+
+ Mindestens eines Ihrer Kartenlesegeräte erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). Bitte platzieren Sie Ihren Ausweis auf einem anderen Kartenlesegerät.
+
+
+
Bitte legen Sie ein Ausweisdokument auf.
-
+
Sollten Sie bereits Ihr Ausweisdokument aufgelegt haben, klicken Sie auf die Schaltfläche "Diagnose" für weitere Informationen.
-
+
Bitte legen Sie nur ein Ausweisdokument auf.
-
+
Bitte stellen Sie sicher, dass an Ihrem Computer nur ein Kartenlesegerät mit aufliegendem Ausweisdokument angeschlossen ist. Sollten Sie bereits ein Ausweisdokument aufgelegt haben, klicken Sie auf die Schaltfläche "Diagnose" für weitere Informationen.
-
+
Die Online-Ausweisfunktion ist deaktiviert.
-
-
- Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweisdokuments ist nicht aktiviert. Bitte wenden Sie sich an Ihre zuständige Behörde, um die Online-Ausweisfunktion zu aktivieren.
+
+
+ Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweisdokuments ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren.
+
+
+
+
+ Das Gerät %1 wurde entkoppelt, da es nicht auf Verbindungsversuche reagiert hat. Versuchen Sie das Gerät erneut zu koppeln wenn sie es zur Selbstauthentifizierung verwenden möchten.
governikus::StepErrorGui
-
+
Entschuldigung, das hätte nicht passieren dürfen! Bitte kontaktieren Sie das Support Team.
-
+
Fehler
@@ -4224,7 +4530,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::StepShowSelfAuthenticationDataGui
-
+
Schließen
@@ -4232,22 +4538,12 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::UpdateWindow
-
-
- Ihre Software ist auf aktuellem Stand.
-
-
-
+
Der Link konnte im Browser nicht geöffnet werden. Bitte kopieren Sie den Link aus dieser Meldung und fügen Sie ihn manuell in die Adressleiste Ihres Browsers ein.
-
-
- Aktualisierungen
-
-
-
+
<h4>Herunterladen der Versionshinweise schlug fehl</h4>
@@ -4255,67 +4551,67 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::VersionInformationModel
-
+
Anwendungsname
-
+
Anwendungsversion
-
+
Organisation
-
+
Organisation Homepage
-
+
Build-Datum
-
+
Versions-Code
-
+
Systemversion
-
+
Kernel
-
+
Architektur
-
+
Kompilierte Architektur
-
+
Gerät
-
+
Qt-Version
-
+
OpenSSL-Version
@@ -4323,75 +4619,75 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::WebserviceActivationContext
-
-
-
+
+
+
Die Verbindung zum Browser ging verloren.
-
-
+
+
Authentisierungsvorgang kann nicht gestartet werden
-
+
Ein Vorgang ist bereits in Arbeit.
-
+
Möchten Sie es erneut versuchen?
-
+
Erneut versuchen
-
+
400 Ungültige Anfrage
-
+
404 Nicht gefunden
-
+
Ungültige Anfrage
-
+
Ihr Browser hat eine Anfrage gesendet, die nicht interpretiert werden konnte.
-
+
Fehlermeldung
-
+
Möchten Sie diesen Fehler melden?
-
+
https://www.ausweisapp.bund.de/feedback/melden-sie-einen-fehler/
-
+
Jetzt melden
-
+
Die Verbindung zum Browser ging verloren. Es konnte keine Weiterleitung durchgeführt werden. Bitte versuchen Sie die URL manuell aufzurufen: <a href='%1'>%2</a>
@@ -4399,63 +4695,62 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::WebserviceActivationHandler
-
+
Eine unbekannte Anwendung verwendet den benötigten Port (%1) bereits. Bitte beenden Sie zuerst die andere Anwendung und versuchen Sie es anschließend erneut!
-
+
Eine andere Anwendung (%1) verwendet den benötigten Port (%2) bereits. Bitte beenden Sie zuerst die andere Anwendung und versuchen Sie es anschließend erneut!
-
+
404 Nicht gefunden
-
+
Ungültige Anfrage
-
+
- Fehlermeldung
Ihr Browser hat eine Anfrage gesendet, die nicht interpretiert werden konnte.
-
+
Fehlermeldung
-
+
Unbekannte Anfrage: %1
-
+
Möchten Sie diesen Fehler melden?
-
+
https://www.ausweisapp.bund.de/feedback/melden-sie-einen-fehler/
-
+
Jetzt melden
-
+
Sie versuchen eine neuere Version (%1) der aktuell laufenden Anwendung zu starten. Bitte beenden Sie zuerst die andere Version (%2) und versuchen Sie es anschließend erneut!
-
+
Sie versuchen eine ältere Version (%1) der aktuell laufenden Anwendung zu starten. Bitte öffnen Sie die aktuell laufende Version (%2)!
@@ -4463,22 +4758,22 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::WorkflowAuthenticateQtGui
-
+
Ausweisen
-
+
Abbrechen
-
+
<b>Wollen Sie wirklich abbrechen?</b>
-
+
Sie können sich auch später ausweisen, indem Sie erneut auf die Internetseite des Diensteanbieters gehen.
@@ -4486,12 +4781,12 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::WorkflowQtWidget
-
+
Abbrechen
-
+
Weiter
@@ -4499,7 +4794,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
governikus::WorkflowSelfInfoQtGui
-
+
Ausweisen
@@ -4507,7 +4802,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe
main
-
+
Drücken Sie zweimal die Zurück-Taste, um die Anwendung zu schließen.
diff --git a/resources/updatable-files/reader/img_ACS_ACR122U.png b/resources/updatable-files/reader/img_ACS_ACR122U.png
new file mode 100644
index 0000000..1db843b
Binary files /dev/null and b/resources/updatable-files/reader/img_ACS_ACR122U.png differ
diff --git a/resources/updatable-files/reader/img_ACS_ACR122U_mit_ausweis.png b/resources/updatable-files/reader/img_ACS_ACR122U_mit_ausweis.png
new file mode 100644
index 0000000..b76259f
Binary files /dev/null and b/resources/updatable-files/reader/img_ACS_ACR122U_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_ACS_ACR1252U.png b/resources/updatable-files/reader/img_ACS_ACR1252U.png
new file mode 100644
index 0000000..d16198c
Binary files /dev/null and b/resources/updatable-files/reader/img_ACS_ACR1252U.png differ
diff --git a/resources/updatable-files/reader/img_ACS_ACR1252U_mit_ausweis.png b/resources/updatable-files/reader/img_ACS_ACR1252U_mit_ausweis.png
new file mode 100644
index 0000000..82645a9
Binary files /dev/null and b/resources/updatable-files/reader/img_ACS_ACR1252U_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_ACS_ACR1281U.png b/resources/updatable-files/reader/img_ACS_ACR1281U.png
new file mode 100644
index 0000000..a4a6a2c
Binary files /dev/null and b/resources/updatable-files/reader/img_ACS_ACR1281U.png differ
diff --git a/resources/updatable-files/reader/img_ACS_ACR1281U_mit_ausweis.png b/resources/updatable-files/reader/img_ACS_ACR1281U_mit_ausweis.png
new file mode 100644
index 0000000..ff2e55b
Binary files /dev/null and b/resources/updatable-files/reader/img_ACS_ACR1281U_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Cherry_TC_1200.png b/resources/updatable-files/reader/img_Cherry_TC_1200.png
new file mode 100644
index 0000000..f17e897
Binary files /dev/null and b/resources/updatable-files/reader/img_Cherry_TC_1200.png differ
diff --git a/resources/updatable-files/reader/img_Cherry_TC_1200_mit_ausweis.png b/resources/updatable-files/reader/img_Cherry_TC_1200_mit_ausweis.png
new file mode 100644
index 0000000..67736d2
Binary files /dev/null and b/resources/updatable-files/reader/img_Cherry_TC_1200_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Cherry_TC_1300.png b/resources/updatable-files/reader/img_Cherry_TC_1300.png
new file mode 100644
index 0000000..2b8479e
Binary files /dev/null and b/resources/updatable-files/reader/img_Cherry_TC_1300.png differ
diff --git a/resources/updatable-files/reader/img_Cherry_TC_1300_mit_ausweis.png b/resources/updatable-files/reader/img_Cherry_TC_1300_mit_ausweis.png
new file mode 100644
index 0000000..dec65ec
Binary files /dev/null and b/resources/updatable-files/reader/img_Cherry_TC_1300_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_FEIG_myAXXES_basic.png b/resources/updatable-files/reader/img_FEIG_myAXXES_basic.png
new file mode 100644
index 0000000..ddebb47
Binary files /dev/null and b/resources/updatable-files/reader/img_FEIG_myAXXES_basic.png differ
diff --git a/resources/updatable-files/reader/img_FEIG_myAXXES_basic_mit_ausweis.png b/resources/updatable-files/reader/img_FEIG_myAXXES_basic_mit_ausweis.png
new file mode 100644
index 0000000..b7a608c
Binary files /dev/null and b/resources/updatable-files/reader/img_FEIG_myAXXES_basic_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Gemalto_Prox_DU.png b/resources/updatable-files/reader/img_Gemalto_Prox_DU.png
new file mode 100644
index 0000000..40da58d
Binary files /dev/null and b/resources/updatable-files/reader/img_Gemalto_Prox_DU.png differ
diff --git a/resources/updatable-files/reader/img_Gemalto_Prox_DU_mit_ausweis.png b/resources/updatable-files/reader/img_Gemalto_Prox_DU_mit_ausweis.png
new file mode 100644
index 0000000..cdcbc09
Binary files /dev/null and b/resources/updatable-files/reader/img_Gemalto_Prox_DU_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Gemalto_Prox_SU.png b/resources/updatable-files/reader/img_Gemalto_Prox_SU.png
new file mode 100644
index 0000000..eb6ab50
Binary files /dev/null and b/resources/updatable-files/reader/img_Gemalto_Prox_SU.png differ
diff --git a/resources/updatable-files/reader/img_Gemalto_Prox_SU_mit_ausweis.png b/resources/updatable-files/reader/img_Gemalto_Prox_SU_mit_ausweis.png
new file mode 100644
index 0000000..9d13a00
Binary files /dev/null and b/resources/updatable-files/reader/img_Gemalto_Prox_SU_mit_ausweis.png differ
diff --git a/resources/images/reader/img_HID_Global_OMNIKEY_5321_V2.png b/resources/updatable-files/reader/img_HID_Global_OMNIKEY_5321_V2.png
similarity index 100%
rename from resources/images/reader/img_HID_Global_OMNIKEY_5321_V2.png
rename to resources/updatable-files/reader/img_HID_Global_OMNIKEY_5321_V2.png
diff --git a/resources/images/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png b/resources/updatable-files/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png
similarity index 100%
rename from resources/images/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png
rename to resources/updatable-files/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png
diff --git a/resources/updatable-files/reader/img_HID_Omnikey_5421.png b/resources/updatable-files/reader/img_HID_Omnikey_5421.png
new file mode 100644
index 0000000..b1d2882
Binary files /dev/null and b/resources/updatable-files/reader/img_HID_Omnikey_5421.png differ
diff --git a/resources/updatable-files/reader/img_HID_Omnikey_5421_mit_ausweis.png b/resources/updatable-files/reader/img_HID_Omnikey_5421_mit_ausweis.png
new file mode 100644
index 0000000..651f061
Binary files /dev/null and b/resources/updatable-files/reader/img_HID_Omnikey_5421_mit_ausweis.png differ
diff --git a/resources/images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png
similarity index 100%
rename from resources/images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png
rename to resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png
diff --git a/resources/images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL_mit_ausweis.png b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_4121_CL_mit_ausweis.png
similarity index 100%
rename from resources/images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL_mit_ausweis.png
rename to resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_4121_CL_mit_ausweis.png
diff --git a/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL.png b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL.png
new file mode 100644
index 0000000..0bf6c98
Binary files /dev/null and b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL.png differ
diff --git a/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL_mit_ausweis.png b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL_mit_ausweis.png
new file mode 100644
index 0000000..9ea5929
Binary files /dev/null and b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL.png b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL.png
new file mode 100644
index 0000000..0bf6c98
Binary files /dev/null and b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL.png differ
diff --git a/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL_mit_ausweis.png b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL_mit_ausweis.png
new file mode 100644
index 0000000..9ea5929
Binary files /dev/null and b/resources/updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Identive_Cloud_3700_F.png b/resources/updatable-files/reader/img_Identive_Cloud_3700_F.png
new file mode 100644
index 0000000..65f15e7
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_Cloud_3700_F.png differ
diff --git a/resources/updatable-files/reader/img_Identive_Cloud_3700_F_mit_ausweis.png b/resources/updatable-files/reader/img_Identive_Cloud_3700_F_mit_ausweis.png
new file mode 100644
index 0000000..6d21fda
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_Cloud_3700_F_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Identive_Cloud_4700_F.png b/resources/updatable-files/reader/img_Identive_Cloud_4700_F.png
new file mode 100644
index 0000000..fa36feb
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_Cloud_4700_F.png differ
diff --git a/resources/updatable-files/reader/img_Identive_Cloud_4700_F_mit_ausweis.png b/resources/updatable-files/reader/img_Identive_Cloud_4700_F_mit_ausweis.png
new file mode 100644
index 0000000..6fd89fd
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_Cloud_4700_F_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Identive_Cloud_4701_F.png b/resources/updatable-files/reader/img_Identive_Cloud_4701_F.png
new file mode 100644
index 0000000..fa36feb
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_Cloud_4701_F.png differ
diff --git a/resources/updatable-files/reader/img_Identive_Cloud_4701_F_mit_ausweis.png b/resources/updatable-files/reader/img_Identive_Cloud_4701_F_mit_ausweis.png
new file mode 100644
index 0000000..6fd89fd
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_Cloud_4701_F_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Identive_SCL011.png b/resources/updatable-files/reader/img_Identive_SCL011.png
new file mode 100644
index 0000000..bd66fab
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_SCL011.png differ
diff --git a/resources/updatable-files/reader/img_Identive_SCL011_mit_ausweis.png b/resources/updatable-files/reader/img_Identive_SCL011_mit_ausweis.png
new file mode 100644
index 0000000..55c4911
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_SCL011_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Identive_SCL3711.png b/resources/updatable-files/reader/img_Identive_SCL3711.png
new file mode 100644
index 0000000..9ca7631
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_SCL3711.png differ
diff --git a/resources/updatable-files/reader/img_Identive_SCL3711_mit_ausweis.png b/resources/updatable-files/reader/img_Identive_SCL3711_mit_ausweis.png
new file mode 100644
index 0000000..d083386
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_SCL3711_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Identive_SDI010.png b/resources/updatable-files/reader/img_Identive_SDI010.png
new file mode 100644
index 0000000..f8a35e7
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_SDI010.png differ
diff --git a/resources/updatable-files/reader/img_Identive_SDI010_mit_ausweis.png b/resources/updatable-files/reader/img_Identive_SDI010_mit_ausweis.png
new file mode 100644
index 0000000..03f28ab
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_SDI010_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Identive_SDI011.png b/resources/updatable-files/reader/img_Identive_SDI011.png
new file mode 100644
index 0000000..f8a35e7
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_SDI011.png differ
diff --git a/resources/updatable-files/reader/img_Identive_SDI011_mit_ausweis.png b/resources/updatable-files/reader/img_Identive_SDI011_mit_ausweis.png
new file mode 100644
index 0000000..03f28ab
Binary files /dev/null and b/resources/updatable-files/reader/img_Identive_SDI011_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_KOBIL_ID_Token.png b/resources/updatable-files/reader/img_KOBIL_ID_Token.png
new file mode 100644
index 0000000..2fa9471
Binary files /dev/null and b/resources/updatable-files/reader/img_KOBIL_ID_Token.png differ
diff --git a/resources/updatable-files/reader/img_KOBIL_ID_Token_mit_ausweis.png b/resources/updatable-files/reader/img_KOBIL_ID_Token_mit_ausweis.png
new file mode 100644
index 0000000..55110d6
Binary files /dev/null and b/resources/updatable-files/reader/img_KOBIL_ID_Token_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis.png b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis.png
new file mode 100644
index 0000000..c0922bd
Binary files /dev/null and b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis.png differ
diff --git a/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png
new file mode 100644
index 0000000..abb5554
Binary files /dev/null and b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort.png b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort.png
new file mode 100644
index 0000000..4b25072
Binary files /dev/null and b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort.png differ
diff --git a/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png
new file mode 100644
index 0000000..7c6949a
Binary files /dev/null and b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard.png b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard.png
new file mode 100644
index 0000000..b380c7b
Binary files /dev/null and b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard.png differ
diff --git a/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard_mit_ausweis.png b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard_mit_ausweis.png
new file mode 100644
index 0000000..19d690d
Binary files /dev/null and b/resources/updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_RemoteReader.png b/resources/updatable-files/reader/img_RemoteReader.png
new file mode 100644
index 0000000..dcbed16
Binary files /dev/null and b/resources/updatable-files/reader/img_RemoteReader.png differ
diff --git a/resources/updatable-files/reader/img_RemoteReader_mit_ausweis.png b/resources/updatable-files/reader/img_RemoteReader_mit_ausweis.png
new file mode 100644
index 0000000..8300272
Binary files /dev/null and b/resources/updatable-files/reader/img_RemoteReader_mit_ausweis.png differ
diff --git a/resources/updatable-files/reader/img_cyberjack_wave.png b/resources/updatable-files/reader/img_cyberjack_wave.png
new file mode 100644
index 0000000..a1aca61
Binary files /dev/null and b/resources/updatable-files/reader/img_cyberjack_wave.png differ
diff --git a/resources/updatable-files/reader/img_cyberjack_wave_mit_ausweis.png b/resources/updatable-files/reader/img_cyberjack_wave_mit_ausweis.png
new file mode 100644
index 0000000..12f6c74
Binary files /dev/null and b/resources/updatable-files/reader/img_cyberjack_wave_mit_ausweis.png differ
diff --git a/resources/updatable-files/supported-providers.json b/resources/updatable-files/supported-providers.json
new file mode 100644
index 0000000..f904c88
--- /dev/null
+++ b/resources/updatable-files/supported-providers.json
@@ -0,0 +1,952 @@
+{
+ "issueDate": "2017-12-14T12:00:00+1:00",
+ "callcosts" : [
+ {
+ "prefixes" : ["1371", "1375"],
+ "landline" : {
+ "per-call" : 14
+ }
+ },
+ {
+ "prefixes" : ["1372", "1373", "1374", "138"],
+ "landline" : {
+ "per-minute" : 14
+ }
+ },
+ {
+ "prefixes" : ["1376"],
+ "landline" : {
+ "per-call" : 25
+ }
+ },
+ {
+ "prefixes" : ["1377"],
+ "landline" : {
+ "per-call" : 100
+ }
+ },
+ {
+ "prefixes" : ["1378", "1379"],
+ "landline" : {
+ "per-call" : 50
+ }
+ },
+ {
+ "prefixes" : ["1801"],
+ "landline" : {
+ "per-minute" : 3.9
+ },
+ "mobile" : {
+ "per-minute" : 42
+ }
+ },
+ {
+ "prefixes": ["1802"],
+ "landline" : {
+ "per-call" : 6
+ },
+ "mobile" : {
+ "per-minute" : 42
+ }
+ },
+ {
+ "prefixes" : ["1803"],
+ "landline" : {
+ "per-minute" : 9
+ },
+ "mobile" : {
+ "per-minute" : 42
+ }
+ },
+ {
+ "prefixes" : ["1804"],
+ "landline" : {
+ "per-call" : 20
+ },
+ "mobile" : {
+ "per-minute" : 42
+ }
+ },
+ {
+ "prefixes" : ["1805"],
+ "landline" : {
+ "per-minute" : 14
+ },
+ "mobile" : {
+ "per-minute" : 42
+ }
+ },
+ {
+ "prefixes" : ["1806"],
+ "landline" : {
+ "per-call" : 20
+ },
+ "mobile" : {
+ "per-call" : 60
+ }
+ },
+ {
+ "prefixes" : ["1807"],
+ "free-seconds": 30,
+ "landline" : {
+ "per-minute" : 14
+ },
+ "mobile" : {
+ "per-minute" : 42
+ }
+ }
+ ],
+ "provider": [
+ {
+ "shortName": {"" : ":::(bit)kasten"},
+ "longDescription": {"": "Der :::(bit)kasten ist ein elektronischer Briefkasten, in dem Sie Ihre Post elektronisch von teilnehmenden Unternehmen und Behörden zum Beispiel Rechnungen, Vertragsunterlagen oder Bescheide sicher und rechtsverbindlich empfangen. Ihre Post erhalten Sie wie bisher anhand Ihrer Postanschrift, nur eben digital. Sie müssen keine persönliche Daten an Dritte herausgeben, Ihre Postadresse reicht für den elektronischen Versand an den :::(bit)kasten aus.
Eine Registrierung für den :::(bit)kasten ist nicht zwingend erforderlich. Ob Sie sich ein Konto anlegen möchten, entscheiden Sie selbst. Nach Login mit Ihrer Online-Ausweisfunktion können Sie Ihre Post abrufen und verwalten.
Da Ihre Post nicht mehr als Papierpost verschickt werden muss, sparen Sie Zeit und senken den Papierverbrauch."},
+ "address": "https://www.bitkasten.de/",
+ "homepage": "https://www.bitkasten.de/",
+ "phone": "+49 911 6000 2874",
+ "email": "nachricht@bitkasten.de",
+ "postalAddress": "Wallensteinstr. 63
90431 Nürnberg",
+ "category": "other",
+ "tcTokenUrl": "https://www.bitkasten.de/portal/api/login/npa/createRequest?returnUrl=https%3A%2F%2Fwww.bitkasten.de%2Fportal%2Fapi%2Flogin%2Fnpa%2Flogin.html",
+ "subjectUrls": ["https://www.bitkasten.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Akteneinsicht in Stasi-Unterlagen"},
+ "longName": {"" : "Akteneinsicht in Stasi-Unterlagen"},
+ "shortDescription": {"": "Antragstellung auf Einsicht in Stasi-Unterlagen für Privatpersonen."},
+ "longDescription": {"": "Privatpersonen können online mittels neuem Personalausweis ohne weitere Wege die Einsichtnahme in die von der Stasi angelegten Akten zur eigenen Person oder zu verstorbenen/vermissten nahen Angehörigen beantragen."},
+ "address": "https://www.bstu.bund.de/DE/Akteneinsicht/Privatpersonen/Online-Antrag/online-antrag_node.html",
+ "homepage": "https://www.bstu.bund.de",
+ "phone": "+49 30 23 24-7000",
+ "email": "post@bstu.bund.de",
+ "postalAddress": "Der Bundesbeauftragte für die Unterlagen des Staatssicherheitsdienstes der ehemaligen Deutschen Demokratischen Republik (BStU)
Karl-Liebknecht-Straße 31/33
10178 Berlin",
+ "image": "stasi_image.jpg",
+ "icon": "stasi_icon.png",
+ "category": "citizen",
+ "subjectUrls": ["https://www.bstu-formulare.de/lip"]
+ },
+ {
+ "exclude": ["ios", "android"],
+ "shortName": {"" : "Allianz Maklerportal"},
+ "address": "https://makler.allianz.de",
+ "homepage": "https://makler.allianz.de",
+ "phone": "+49 800/22 23 557 ",
+ "email": "zviss.makler@allianz.de",
+ "postalAddress": "Königinstraße 28
80802 München",
+ "category": "insurance",
+ "tcTokenUrl": "https://npa.allianz.de/azsecurity-npa-service/NpaEIDService/nparef/-wnfwSFGamtJotxe6_BKiLj",
+ "tcTokenUrlInfo" : "TcToken URL contains dynamic request id but is accepted anyway.",
+ "subjectUrls": ["https://npa.allianz.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Ausweis Auskunft des Bundes"},
+ "address": "https://www.buergerserviceportal.de/bund/ausweisapp/bspx_selbstauskunft",
+ "homepage": "https://www.buergerserviceportal.de/",
+ "phone": "+49 180-1-33 33 33",
+ "email": "eID_buergerservice@bmi.bund.de",
+ "postalAddress": "Bundesministerium des Innern
Alt-Moabit 101 D
10559 Berlin",
+ "category": "citizen",
+ "tcTokenUrl" : "https://www.buergerserviceportal.de:443/bund/ausweisapp/bspx_selbstauskunft/SamlAuthnRequestProvider",
+ "subjectUrls": ["https://www.buergerserviceportal.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Berlin"},
+ "longName": {"" : "BAföG Online Berlin"},
+ "shortDescription": {"": "BAföG-Anträge und Formblätter online ausfüllen und unterschreiben."},
+ "longDescription": {"": "Sie wollen einen Antrag auf Ausbildungsförderung nach dem BAföG stellen? Mit dem neuen Personalausweis / elektronischen Aufenthaltstitel können Sie Ihren Antrag elektronisch signieren und an das Amt übermitteln. Ebenso können Ihre Eltern und ggf. Ihr Ehepartner die nötigen Formulare signieren."},
+ "address": "https://www.berlin-bafoeg.de",
+ "homepage": "https://www.berlin-bafoeg.de",
+ "phone": "+49 30 939 39 - 70",
+ "email": "info@stw.berlin",
+ "postalAddress": "studierendenWERK BERLIN
BAföG-Amt
Behrenstraße 40/41
10117 Berlin",
+ "image": "BafoegBerlin_image.jpg",
+ "icon": "BafoegBerlin_icon.png",
+ "category": "citizen",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Hessen"},
+ "longName": {"" : "BAföG/AFBG hessenweit"},
+ "shortDescription": {"": "BAföG und AFBG Online-Antragstellung Hessen"},
+ "longDescription": {"": "Mit Hilfe dieses Angebotes können Antragstellende, Ehegatten / eingetragene Lebenspartner und Eltern die erforderlichen Antragsformblätter online ausfüllen, mit Hilfe der eID rechtswirksam unterschreiben und papierlos dem zuständigen Amt übermitteln."},
+ "address": "https://www.bafoeg-hessen.de",
+ "homepage": "http://www.hmwk.hessen.de",
+ "phone": "+49 611 32 - 3551",
+ "email": "hebav@hmwk.hessen.de",
+ "postalAddress": "Hessisches Ministerium für Wissenschaft und Kunst
Rheinstraße 23-25
65185 Wiesbaden ",
+ "image": "BafoegHessen_image.jpg",
+ "icon": "BafoegHessen_icon.png",
+ "category": "citizen",
+ "subjectUrls": ["https://www.bafoeg-hessen.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online"},
+ "address": "https://www.bafoegonline.bva.bund.de/",
+ "homepage": "http://www.bafoeg.bund.de/",
+ "longDescription": {"": "Mit Ihrer Online-Ausweisfunktion können Sie sich beim Bundesverwaltungsamt für das BAföG-Rückzahlungsverfahren anmelden und sowohl Ihre persönlichen Daten als auch die erforderlichen Nachweise sicher und schnell elektronisch übermitteln. Sie müssen die Nachweise nicht mehr per Post senden.
Die Online-Ausweisfunktion vereinfacht und beschleunigt das BAföG-Rückzahlungsverfahren."},
+ "phone": "+49 22899358 - 4500",
+ "email": "",
+ "postalAddress": "Bundesverwaltungsamt
BT-BAföG
50728 Köln",
+ "category": "citizen",
+ "tcTokenUrl" : "",
+ "clientUrl" : "https://www.bafoegonline.bva.bund.de/bafoeg-online/Bafoeg/flow/anmeldenMitNpaPreFlow",
+ "subjectUrls": ["https://e-id.bva.bund.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online Bayern (AKDB)"},
+ "longDescription": {"": "In Bayern können Sie Ihr BAföG für ein Studium bzw. eine Ausbildung in Bayern, Österreich, Liechtenstein oder der Schweiz nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch mit der Online-Ausweisfunktion bequem und schnell im Internet.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
+ "address": "https://afoegfofa.osrz-akdb.de",
+ "homepage": "https://afoegfofa.osrz-akdb.de",
+ "phone": "+49 89 / 5903 - 0",
+ "email": "",
+ "postalAddress": "Anstalt für Kommunale Datenverarbeitung in Bayern (AKDB)
Hansastraße 12-16
80686 München",
+ "category": "citizen",
+ "subjectUrls": ["https://www.buergerserviceportal.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online Bayern (Studentenwerk)"},
+ "address": "https://www.bafoeg-bayern.de",
+ "homepage": "https://www.bafoeg-bayern.de",
+ "phone": "+49 800-223 63 41",
+ "email": "webmaster@bafoeg-bayern.de",
+ "postalAddress": "Studentenwerk Niederbayern/Oberpfalz, Anstalt des öffentlichen Rechts
Administration BAföG-Bayern
Albertus-Magnus-Straße 4
93053 Regensburg",
+ "category": "citizen",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online Brandenburg"},
+ "longDescription": {"": "In Brandenburg können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
+ "address": "https://www.bafoeg-brandenburg.de",
+ "homepage": "https://www.bafoeg-brandenburg.de",
+ "phone": "+49 331 / 866 45 60",
+ "email": "mwfk@mwfk.brandenburg.de",
+ "postalAddress": "Ministerium für Wissenschaft, Forschung und Kultur
Presse- und Öffentlichkeitsarbeit ",
+ "category": "citizen",
+ "subjectUrls": ["https://www.bafoeg-brandenburg.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online Hamburg"},
+ "longDescription": {"": "In Hamburg können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die neue Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
+ "address": "https://bafoeg-online.hamburg.de",
+ "homepage": "https://bafoeg-online.hamburg.de",
+ "phone": "+49 800-223 63 41",
+ "email": "Marita.Porr@bwfg.hamburg.de",
+ "postalAddress": "Ressortleiter Online-Redaktion der Behörde für Wissenschaft, Forschung und Gleichstellung:
Kommunikation
Daniel Drexelius
Hamburger Straße 37
22083 Hamburg",
+ "category": "citizen",
+ "subjectUrls": ["https://bafoeg-online.hamburg.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online Mecklenburg-Vorpommern"},
+ "address": "http://www.bm.regierung-mv.de/bafoeg",
+ "homepage": "http://www.regierung-mv.de/",
+ "phone": "",
+ "email": "",
+ "postalAddress": "Ministerium für Bildung, Wissenschaft und Kultur Mecklenburg-Vorpommern
Werderstraße 124
19055 Schwerin",
+ "category": "citizen",
+ "subjectUrls": ["https://fms.mv-regierung.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online Nordrhein-Westfalen"},
+ "longDescription": {"": "In Nordrhein-Westfalen können Sie mit der Online-Ausweisfunktion Ihren Antrag auf BAföG für eine Ausbildung (Schulausbildung, Studium in Nordrhein-Westfalen sowie Studium in Belgien, den Niederlanden oder Luxemburg) oder Ihren Antrag auf Aufstiegsfortbildungsförderung (z. B. für die Meisterausbildung) in Nordrhein-Westfalen bequem und schnell im Internet stellen.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
+ "address": "https://www.bafoeg-online.nrw.de",
+ "homepage": "https://www.bafoeg-online.nrw.de",
+ "phone": "+49 385-588 7145",
+ "email": "m.boehm@bm.mv-regierung.de",
+ "postalAddress": "Ministerium für Bildung, Wissenschaft und Kultur Mecklenburg-Vorpommern
Abteilung 1
Referat 140
Werderstraße 124
19055 Schwerin",
+ "category": "citizen",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online Sachsen"},
+ "address": "https://fs.egov.sachsen.de/formserv/findform?shortname=bafoeg&formtecid=11&areashortname=SMWK_bafoeg",
+ "homepage": "http://www.studieren.sachsen.de/",
+ "phone": "+49 351 564-1080",
+ "email": "info@sk.sachsen.de",
+ "postalAddress": "Sächsische Staatskanzlei
Redaktion Amt24 / Bürgerbüro
01095 Dresden",
+ "category": "citizen",
+ "subjectUrls": ["https://fs.egov.sachsen.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "BAföG Online Schleswig-Holstein"},
+ "longDescription": {"": "In Schleswig-Holstein können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.
Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
+ "address": "https://bafoeg.schleswig-holstein.de/BAfoeGOnline/ABAfoeG/",
+ "homepage": "https://bafoeg.schleswig-holstein.de/",
+ "phone": "+49 431 988-0",
+ "email": "bafoeg@sozmi.landsh.de",
+ "postalAddress": "Ministerium für Soziales, Gesundheit, Wissenschaft und Gleichstellung des Landes Schleswig-Holstein
Abteilung VIII 5
Düsternbrooker Weg 104
24105 Kiel",
+ "category": "citizen"
+ },
+ {
+ "exclude": ["ios", "android"],
+ "shortName": {"" : "bahn.de"},
+ "address": "https://www.bahn.de/p/view/meinebahn/login.shtml",
+ "homepage": "https://www.bahn.de",
+ "phone": "+49 1806 - 996633",
+ "email": "reiseportal@bahn.de",
+ "postalAddress": "DB Vertrieb GmbH
Stephensonstraße 1
60326 Frankfurt am Main",
+ "category": "other",
+ "subjectUrls": ["https://www.bahn.de/"]
+ },
+ {
+ "shortName": {"" : "Beantragung Schwerbehindertenausweis Bayern"},
+ "longDescription": {"": "Einen Schwerbehindertenantrag können Sie bei der Landesbehörde Zentrum Bayern Familie und Soziales (ZBFS) mit der Online-Ausweisfunktion komplett papierlos stellen.
Der papierlose Antrag ist ein bedeutender Schritt auf dem Weg zur digitalen Verwaltung – online, schnell und unkompliziert.
Das Online-Verfahren hat weitere Vorteile. Gerade für sehbehinderte Menschen ist die papiergebundene Schriftform ein Hindernis. Digitale Angebote bieten ihnen die Chance, Behördenangelegenheiten ein Stück weit selbständiger erledigen zu können.
Zu 100 Prozent digital – ein bisschen weniger lästiger Papierkram. Digitalisierung ist somit ein Beitrag zur Inklusion."},
+ "address": "https://www.schwerbehindertenantrag.bayern.de",
+ "homepage": "http://www.zbfs.bayern.de/",
+ "phone": "+49 921 605-03",
+ "email": "poststelle@zbfs.bayern.de",
+ "postalAddress": "Zentrum Bayern Familie und Soziales
95440 Bayreuth",
+ "category": "citizen",
+ "subjectUrls": ["https://www.buergerserviceportal.de"]
+ },
+ {
+ "shortName": {"" : "Beantragung Schwerbehindertenausweis Saarland"},
+ "longDescription": {"": "Als erstes Bundesland bietet Ihnen das Saarland mit Schweb.NET Online die Möglichkeit, Ihren Erst- und Verschlimmerungsantrag auf Feststellung einer Behinderung nach dem Schwerbehindertenrecht online beim Landesamt für Soziales zu stellen.
Weite Wege werden dadurch vermieden. Bearbeitungszeiten und Arbeitsabläufe werden verkürzt.
Der Antrag ist selbsterklärend und nutzerfreundlich. "},
+ "address": "https://gatewaylas.saarland.de/FV/Onlineantrag",
+ "homepage": "http://www.saarland.de/index.htm",
+ "phone": "+49 681/9978-2181",
+ "email": "",
+ "postalAddress": "Ministerium für Soziales, Gesundheit, Frauen und Familie
Franz-Josef-Röder-Straße 23
66119 Saarbrücken",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://tbklas.saarland.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",
+ "homepage": "https://www.arbeitsagentur.de/",
+ "phone": "+49 911/179-0",
+ "email": "Zentrale@arbeitsagentur.de ",
+ "postalAddress": "Bundesagentur für Arbeit
Regensburger Straße 104
90478 Nürnberg",
+ "category": "other",
+ "tcTokenUrl" : "",
+ "clientUrl" : "https://formular.arbeitsagentur.de/eantrag/fallinfo-npa.page",
+ "subjectUrls": ["https://formular.arbeitsagentur.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bundestag ePetition"},
+ "longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich einfach und sicher am Petitionsportal des Deutschen Bundestages
- registrieren,
- eine Petition einreichen sowie
- eine Petition mitzeichnen."},
+ "address": "https://epetitionen.bundestag.de/epet/anmelden.html",
+ "homepage": "http://www.bundestag.de/",
+ "phone": "+49 30 227-35257",
+ "email": "post.pet@bundestag.de",
+ "postalAddress": "Sekretariat des Petitionsausschusses
Platz der Republik 1
11011 Berlin",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://epetitionen.bundestag.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bürgerantrag Bremen"},
+ "longDescription": {"": "Mit der Online-Ausweisfunktion können Sie im Bundesland Bremen Bürgeranträge elektronisch mitzeichnen oder Unterschriften für Ihren eigenen Bürgerantrag sammeln. Mit nur 5.000 Mitzeichnerinnen und Mitzeichnern – egal ob online oder auf Papier – können Sie Anträge direkt in den Bremische Bürgerschaft (Landtag) einbringen. Für die Stadtbürgerschaft Bremen genügen sogar 4.000 Unterschriften."},
+ "address": "https://www.buergerantrag.bremen.de",
+ "homepage": "http://www.bremische-buergerschaft.de/",
+ "phone": "",
+ "email": "webmaster@buergerschaft.bremen.de",
+ "postalAddress": "",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://servicekonto.bremen.de"]
+ },
+ {
+ "shortName": {"" : "Bürgerdienste der Stadt Münster"},
+ "longDescription": {"": "Die Stadt Münster bietet auf ihrer Webseite eine Reihe von Online-Diensten an. Dort können Sie mit der Online-Ausweisfunktion unter anderem:
- eine Personenstandsurkunde bestellen,
- Ihr Wunschkennzeichen beantragen,
- geografische Karten bestellen,
- Elektroschrott zur Abholung anmelden,
- eine Erklärung zum Elterneinkommen für die Festsetzung des Elternbeitrags für die Kindertagesbetreuung abgeben,
- eine Sondernutzungserlaubnis für private Baumaßnahmen an öffentlichen Straßen beantragen,
- eine Großanlage mit zentraler Trinkwassererwärmung anzeigen,
- einen Fahrradfund melden,
- ein Reitkennzeichen beantragen,
- Mietspiegel-Broschüren bestellen."},
+ "address": "https://www.stadt-muenster.de/rathaus/online-dienste.html",
+ "homepage": "http://www.muenster.de/",
+ "phone": "+49 251/4 92-0",
+ "email": "stadtverwaltung@stadt-muenster.de",
+ "postalAddress": "Stadt Münster
48127 Münster",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bürgerportal Baden-Württemberg"},
+ "longDescription": {"": "Das Bürgerportal ,mein service-bw' bietet Bürgerinnen und Bürgern mit dem Personalausweis praktische Anwendungen für die Online-Ausweisfunktion. Das Portal bietet seinen Nutzern unter anderem:
- sicheres Registrieren und Anmelden, um Behördengänge im Internet zu erledigen
- verschlüsselte Ablage persönlicher Daten und Dateien in einem Datenspeicher im Internet, dem sogenannten Dokumentensafe
- orts- und zeitunabhängiger Zugang zu den Daten im Dokumentensafe sowie die Möglichkeit, diese elektronisch an Behörden weiterzuleiten (z. B. für eine Gewerbeanmeldung)."},
+ "address": "http://service-bw.de/zfinder-bw-web/welcome.do?showMsbwDetails=1",
+ "homepage": "https://www.service-bw.de/",
+ "phone": "",
+ "email": "service-bw@im.bwl.de",
+ "postalAddress": "Ministerium für Inneres, Digitalisierung und Migration Baden-Württemberg
Willy-Brandt-Straße 41
70173 Stuttgart",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Unable to locate URL",
+ "subjectUrls": ["https://eid.service-bw.de"]
+ },
+ {
+ "shortName": {"" : "Bürgerportal Rheinland Pfalz"},
+ "longDescription": {"": "Über 80% der Meldebehörden und über 90% der Standesämter in Rheinland-Pfalz bieten Ihnen über das Portal www.rlpdirekt.de Verwaltungsleistungen mit der Online-Ausweisfunktion an, für die Sie nicht mehr zur Behörde gehen müssen, z. B.:
- Kfz abmelden
- Führungszeugnis beantragen,
- Meldebescheinigung beantragen,
- Aufenthaltsbescheinigung beantragen,
- Übermittlungssperre einrichten,
- Auskunft aus dem Gewerbezentralregister beantragen,
- Beurkundung im Personenstandswesen beantragen.
Welche Dienste in Ihrer Kommune mit der Online-Ausweisfunktion genutzt werden können, erfahren Sie, wenn Sie auf dem Portal unter \"Stadt/Ort\" Ihren Wohnort eingeben."},
+ "address": "http://www.rlpdirekt.de/rheinland-pfalz",
+ "homepage": "http://www.rlpdirekt.de/rheinland-pfalz/",
+ "phone": "+49 6131 / 6277-0",
+ "email": "support@kommwis.de",
+ "postalAddress": "KommWis GmbH
Gesellschaft für Kommunikation und Wissenstransfer mbH
Hindenburgplatz 3
55118 Mainz",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "PLZ required",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bürgerservice-Portal Kreis Herford"},
+ "longName": {"" : "Bürgerservice-Portal Kreis Herford"},
+ "shortDescription": {"": "Anträge an die Kreisverwaltung Herford online erfassen."},
+ "longDescription": {"": "In unserem Bürgerservice-Portal können Sie Anträge an die Kreisverwaltung Herford online erfassen und direkt zur weiteren Bearbeitung an die zuständigen Stellen übermitteln."},
+ "address": "https://www.buergerserviceportal.nrw/krz/lkrherford",
+ "homepage": "https://www.kreis-herford.de/",
+ "phone": "+49 5223/988 - 500",
+ "email": "portal@kreis-herford.de",
+ "postalAddress": "Kreis Herford
Amtshausstraße 3
32051 Herford",
+ "image": "KreisHerford_image.jpg",
+ "icon": "KreisHerford_icon.png",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.buergerserviceportal.nrw"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bürgerservice-Portal Kreis Minden-Lübbecke"},
+ "longName": {"" : "Bürgerservice-Portal Kreis Minden-Lübbecke"},
+ "shortDescription": {"": "Anträge an den Kreis Minden-Lübbecke online erfassen."},
+ "longDescription": {"": "In unserem Portal können Sie Ihren Antrag an den Kreis Minden-Lübbecke direkt online erfassen und elektronisch übermitteln."},
+ "address": "https://www.buergerserviceportal.nrw/krz/mindenluebbecke",
+ "homepage": "http://www.minden-luebbecke.de/",
+ "phone": "+49 571 807-0",
+ "email": "info@minden-luebbecke.de",
+ "postalAddress": "Kreis Minden-Lübbecke
Portastraße 13
32423 Minden",
+ "image": "KreisMindenLuebbeke_image.jpg",
+ "icon": "KreisMindenLuebbeke_icon.png",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.buergerserviceportal.nrw"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bürgerservice-Portal Stadt Lage"},
+ "longName": {"" : "Bürgerservice-Portal Stadt Lage"},
+ "shortDescription": {"": "Anträge online erfassen und an die Verwaltung weiterleiten."},
+ "longDescription": {"": "Das Bürgerservice-Portal bietet die Möglichkeit, Anträge an die Verwaltung der Stadt Lage online zu erfassen und elektronisch zur weiteren Bearbeitung weiterzuleiten."},
+ "address": "https://www.buergerserviceportal.nrw/krz/lage",
+ "homepage": "http://www.lage.de/",
+ "phone": "+49 5232/601300",
+ "email": "Buergerbuero@lage.de",
+ "postalAddress": "Bürgerbüro Lage
Bergstraße 21
32791 Lage",
+ "image": "StadtLage_image.jpg",
+ "icon": "StadtLage_icon.png",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.buergerserviceportal.nrw"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bürgerservice-Portal Stadt Norderstedt"},
+ "longDescription": {"": "In Norderstedt können Sie mit der Online-Ausweisfunktion über das Bürgerservice-Portal folgende Bürgerdienste nutzen:
- Meldebestätigung
- Aufenthaltsbescheinigung
- Übermittlungssperren
- Umzug innerhalb der Stadt
- Voranzeige einer Anmeldung
- Briefwahlunterlagen
- Führungszeugnis
Darüber hinaus können Sie Ihr persönliches Bürgerkonto einrichten. Nach Einrichtung des Bürgerkontos werden die bei einer Nutzung des Bürgerservice-Portals notwendigen persönlichen Daten komfortabel aus Ihrem Bürgerkonto übernommen. Damit sparen Sie Zeit und erleichtern den Behörden die Bearbeitung Ihres Antrags."},
+ "address": "https://norderstedt.de/digital",
+ "homepage": "https://www.norderstedt.de/",
+ "phone": "+49 40 - 535 95-0 ",
+ "email": "info@norderstedt.de",
+ "postalAddress": "Stadt Norderstedt
Rathausallee 50
22846 Norderstedt",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://sh.buergerserviceportal.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bürgerservice-Portal Wiesbaden"},
+ "longDescription": {"": "In Wiesbaden können Sie mit der Online-Ausweisfunktion über das Bürgerservice-Portal
- Briefwahlunterlagen,
- Meldebestätigungen,
- Aufenthaltsbescheinigungen,
- Übermittlungssperren,
- Führungszeugnisse und
- Auskünfte aus dem Gewerbezentralregister beantragen."},
+ "address": "https://www.buergerserviceportal.de/hessen/wiesbaden",
+ "homepage": "http://www.wiesbaden.de/",
+ "phone": "+49 611 / 31 - 8300",
+ "email": "buergeramt@wiesbaden.de",
+ "postalAddress": "Postfach 3920
65029 Wiesbaden",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.buergerserviceportal.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Bürgerservice-Portale der bayerischen Kommunen"},
+ "longDescription": {"": "Das BayernPortal ist das zentrale Verwaltungsportal für den Freistaat Bayern und die bayerischen Kommunen.
Es bietet Ihnen eine einheitliche Anlaufstelle sowie einen einheitlichen Zugang zu den staatlichen und kommunalen Verwaltungsdienstleistungen in Bayern. Sie erreichen darüber mehr als 150 Online-Dienstleistungen, mehr als 2.000 Fachdatenbanken, über 2.500 Formulare und Merkblätter sowie mehr als 20.000 Ansprechpartnerinnen und Ansprechpartner bei Behörden.
Über das BayernPortal können Sie sich zudem ein Servicekonto einrichten, das BayernID genannt wird und mit dem Sie die Verwaltungsdienstleistungen aller angeschlossenen Kommunen und des Freistaats Bayern einfach und sicher nutzen können. Die Einrichtung Ihrer BayernID und die Anmeldung an diesem persönlichen Servicekonto können Sie auch mit der Online-Ausweisfunktion vornehmen.
Ihre in Ihrem Servicekonto gespeicherten Daten werden automatisch in Ihre Anträge übernommen. Dadurch sparen Sie Zeit und erleichtern der Behörde die Bearbeitung Ihres Anliegens.
In Verbindung mit dem Bayerischen E-Government Gesetz bietet Ihnen die BayernID die Möglichkeit, die in vielen Fällen erforderliche Schriftform zu ersetzen und damit Ihre Anträge ohne handschriftliche Unterschrift, d. h. vollständig online abzuwickeln. Sie müssen nicht mehr zur Behörde gehen oder Unterlagen per Post senden."},
+ "address": "https://www.buergerserviceportal.de/bayern/classic/",
+ "homepage": "http://www.freistaat.bayern/",
+ "phone": "+49 (0)89 12 22 20",
+ "email": "direkt@bayern.de",
+ "postalAddress": "Postfach 22 00 03
80535 München",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.buergerserviceportal.de"]
+ },
+ {
+ "exclude": ["ios", "android"],
+ "shortName": {"" : "CosmosDirekt Kundenportal meinCosmosDirekt"},
+ "longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich einfach und sicher am Kundenportal ,mein Cosmos-Direkt' registrieren und anmelden. Im Portal haben Sie die Möglichkeit Ihre Versicherungen zu verwalten. Sie können online einen Antrag für ein Tagesgeldkonto stellen oder auch schnell und einfach Ihre persönlichen Daten, z.B. Ihre Adresse, ändern."},
+ "address": "https://www.cosmosdirekt.de/services/mcd-info",
+ "homepage": "https://www.cosmosdirekt.de/",
+ "phone": "+49 681-9 66 68 00",
+ "email": "info@cosmosdirekt.de",
+ "postalAddress": "CosmosDirekt
66101 Saarbrücken",
+ "image": "CosmosDirekt_image.jpg",
+ "icon": "CosmosDirekt_icon.png",
+ "category": "insurance",
+ "tcTokenUrl" : "https://www.cosmosdirekt.de/nPa/IdentifizierenNPA?back_url=https://www.cosmosdirekt.de/meincosmosdirekt-registrierung/*ident=1",
+ "subjectUrls": ["https://www.cosmosdirekt.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "d.velop – foxdox.de: Dokumente sicher ablegen"},
+ "longDescription": {"": "Dokumente, Verträge, Reiseunterlagen, Bilder und vieles mehr können Sie einfach in Ihren persönlichen foxdox-Account hochladen.
Sie melden sich mit der Online-Ausweisfunktion an und können von überall und jederzeit auf Ihre Dokumentenablage zugreifen, z. B. um sie innerhalb der Familie, Ihren Kollegen oder auch Ihrem Steuerberater zur Verfügung zu stellen.
Quittungen und Belege können Sie einfach fotografieren oder scannen, hochladen und sicher in Ihrem foxdox-Account mit übersichtlichem Ordner-System speichern. Eine separate Ablage oder Kopien sind nicht mehr notwendig. Alle Daten liegen sicher und verschlüsselt in einem Rechenzentrum in Deutschland.
Ein Standard-Account ist kostenfrei erhältlich."},
+ "address": "https://mein.foxdox.de/",
+ "homepage": "https://www.d-velop.de/foxdox/foxdox-home",
+ "phone": "+49 (0) 2542 9307-0",
+ "email": "support@foxdox.de",
+ "postalAddress": "d.velop business services GmbH
Schildarpstraße 6-8
48712 Gescher",
+ "category": "other",
+ "tcTokenUrl" : "https://mein.foxdox.de/npa_login?action=gettctoken&next=/documents",
+ "subjectUrls": ["https://mein.foxdox.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Datev - Arbeitnehmer online / Lohn- und Gehaltsabrechnung"},
+ "longDescription": {"": "Nach einmaliger Freischaltung durch den Arbeitgeber erhalten Sie Ihren persönlichen Aktivierungscode per Post. Mit dem Aktivierungscode registrieren Sie sich an dem Portal „DATEV Arbeitnehmer online“, dazu können Sie u.a. die Online-Ausweisfunktion nutzen. Danach können Sie jederzeit Ihre Brutto/Netto-Abrechnungen, Sozialversicherungsnachweise und Lohnsteuerbescheinigungen online abrufen. Sie haben dadurch jederzeit und überall einen schnellen Überblick über Ihre gesamten Lohn- und Gehaltsdokumente. "},
+ "address": "https://www.datev.de/ano/",
+ "homepage": "https://www.datev.de",
+ "phone": "+49 800 3283825",
+ "email": "info@datev.de",
+ "postalAddress": "DATEV eG
90329 Nürnberg",
+ "category": "other",
+ "tcTokenUrlInfo" : "Address is faulty",
+ "subjectUrls": ["https://secure6.datev.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Deutsche Post AG - POSTIDENT Verfahren"},
+ "longName": {"" : "Deutsche Post AG - POSTIDENT Verfahren"},
+ "shortDescription": {"": "Durch das Onlineverfahren POSTIDENT mit dem neuem Personalausweis, können Sie sich schnell und einfach online mit Ihrem neuen Personalausweis identifizieren."},
+ "longDescription": {"": "Durch das Onlineverfahren POSTIDENT mit dem neuem Personalausweis, können Sie sich schnell und einfach online mit Ihrem neuen Personalausweis z.B. zur Eröffnung eines Tagesgeldkontos identifizieren: Sie werden hierzu von Ihrer Bank automatisch auf das POSTIDENT Portal geleitet und können sich mithilfe Ihres neuen Personalausweises mit freigeschalteter Online-Ausweisfunktion, einem Kartenlesegerät sowie der AusweisApp2 in wenigen Minuten sicher identifizieren."},
+ "address": "https://www.deutschepost.de/de/p/postident/identifizierungsverfahren/postident-npa.html",
+ "homepage": "https://www.deutschepost.de/de/p/postident.html",
+ "email": "info@deutschepost.de",
+ "postalAddress": "Deutsche Post AG
Charles-de-Gaulle-Str. 20
53113 Bonn",
+ "image": "DeutschePost_image.jpg",
+ "icon": "DeutschePost_icon.png",
+ "category": "other"
+ },
+ {
+ "shortName": {"" : "Deutsche Rentenversicherung"},
+ "longDescription": {"": "Mit der Online-Ausweisfunktion im neuen Personalausweis können Sie ...
- auf Informationen Ihres Rentenkontos im Kundenbereich ,eService' sicher zugreifen (z. B. Versicherungsverlauf und Beitragsrechnung),
- Ihre Rentenauskunft online abrufen,
- schnell und einfach Ihre persönlichen Daten ändern (z. B. Ihre Adresse und Bankverbindung)."},
+ "address": "https://www.eservice-drv.de/OnlineDiensteWeb/init.do?npa=true",
+ "homepage": "http://www.deutsche-rentenversicherung.de/",
+ "phone": "+49 800 100 048070",
+ "email": "Online-Dienste@deutsche-rentenversicherung.de",
+ "postalAddress": "Ruhrstraße 2
10709 Berlin",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.eservice-drv.de"]
+ },
+ {
+ "exclude": ["ios", "android"],
+ "shortName": {"" : "eAntrag der Investitionsbank Berlin (IBB)"},
+ "longDescription": {"": "Im Kundenportal der Investitionsbank Berlin können Sie verschiedene Förder-Produkte durchgängig elektronisch beantragen:
- Berlin Kapital
- IBB Familienbaudarlehen
- IBB Wohnraum modernisieren
- KMU-Fonds über 25.000 Euro
- Liquiditätshilfen BERLIN
- Mikrokredit aus dem KMU-Fonds
- Pro FIT (Projektvorschlagsphase)
- Pro FIT (Frühphasenfinanzierung)
Für die rechtsverbindliche, fristwahrende Antragstellung der Produkte
- GRW
- Innovationsassistent
- PFI - Gemeinschaft
- PFI - KMU
- PFI - Netzwerk
- ProFIT (Projektantragsphase)
gilt aus verwaltungsrechtlichen Anforderungen das Schriftformerfordernis: Die elektronische Antragstellung ist zwingend nachträglich schriftlich zu bestätigen.
Mit der Online-Ausweisfunktion können Sie sich bequem und sicher elektronisch legitimieren und müssen dadurch Ihre Identität weder per Postident-Verfahren noch persönlich vor Ort nachweisen.
Nach Ihrer Legitimierung können Sie über eine persönliche Dokumentenablage die rechtsverbindliche Kommunikation mit Ihrem IBB-Ansprechpartner online – und unabhängig von Öffnungszeiten oder Postwegen – über das Kundenportal erledigen."},
+ "address": "https://www.ibb.de/de/service/eantrag/eantrag.html",
+ "homepage": "http://www.ibb.de/",
+ "phone": "+49 30 / 2125 - 0",
+ "email": "info@ibb.de",
+ "postalAddress": "Investitionsbank Berlin (IBB)
Bundesallee 210
10719 Berlin",
+ "category": "finance",
+ "tcTokenUrlInfo" : "Registration required.",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "easy Login - Der Zugang für Finanz- & Versicherungsvermittler"},
+ "address": "http://www.easy-login.de",
+ "homepage": "http://www.easy-login.de",
+ "phone": "+49 921 75758-555",
+ "email": "info@easy-login.de",
+ "postalAddress": "easy Login GmbH
Bindlacher Str. 4
95448 Bayreuth",
+ "category": "insurance",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://easy-login.vdg-portal.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "ELSTER"},
+ "longName": {"" : "ELSTER - Die elektronische Steuererklärung"},
+ "shortDescription": {"": "Abwicklung der Steuererklärungen und -anmeldungen über das Internet."},
+ "longDescription": {"": "ELSTER bietet im Rahmen der Registrierung, welche Voraussetzung für die Abwicklung der Steuererklärungen und Steueranmeldungen über das Internet ist, die Möglichkeit der Nutzung der Online-Ausweisfunktion."},
+ "address": "https://www.elster.de",
+ "homepage": "https://www.elster.de",
+ "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",
+ "icon": "elster_icon.png",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Registration required.",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "ERGO Direkt Lebensversicherung AG"},
+ "address": "https://ergodirekt.de/de/persoenlicherbereich.html#login",
+ "homepage": "https://ergodirekt.de",
+ "phone": "+49 800 / 444 1000",
+ "email": "beratung@ergodirekt.de",
+ "postalAddress": "Karl-Martell-Straße 60
90344 Nürnberg",
+ "category": "insurance",
+ "subjectUrls": ["https://ergodirekt.de"]
+ },
+ {
+ "shortName": {"" : "Feinstaubplakette beantragen"},
+ "longDescription": {"": "In Berlin können Sie eine Feinstaubplakette für alle Kraftfahrzeuge mit der Online-Ausweisfunktion beantragen. Der Antrag ist unabhängig davon, ob Ihr Fahrzeug in Berlin, bei einer anderen deutschen Zulassungsbehörde, oder im Ausland zugelassen ist.
Ihre persönlichen Daten werden verschlüsselt übertragen. Sie müssen Ihre Angaben nicht per Hand eingeben und die Behörde erhält zuverlässig korrekte Informationen, die rasch weiterverarbeitet werden können.
Auf der Internet-Seite Umweltzonen und Feinstaubplaketten der Senatsverwaltung für Stadtentwicklung und Umwelt können Sie sich vorab informieren, welche Plakette Ihrem Fahrzeug zugeteilt werden kann."},
+ "address": "http://www.berlin.de/labo/fahrzeuge/kfz-zulassung/feinstaubplakette/shop.85047.php",
+ "homepage": "https://www.berlin.de",
+ "phone": "+49 30 90269 – 0",
+ "email": "",
+ "postalAddress": "Direktorin Landesamt für Bürger- und Ordnungsangelegenheiten
Friedrichstr. 219
10958 Berlin",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Car lizence number required",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios", "android"],
+ "shortName": {"" : "Führungszeugnis und Auskunft aus dem Gewerbezentralregister"},
+ "longDescription": {"": "Sie benötigen ein Führungszeugnis oder eine Auskunft aus dem Gewerbezentralregister? Mit dem Personalausweis im Scheckkartenformat können Sie einen Behördengang sparen. Weitere Voraussetzungen sind die freigeschaltete Online-Ausweisfunktion und ein passendes Kartenlesegerät für Ihren Computer. Auf diese Weise kann eindeutig identifiziert werden, wer den Antrag stellt. Ausländische Mitbürger, die keinen deutschen Personalausweis besitzen, können in gleicher Weise die entsprechende Funktion ihres elektronischen Aufenthaltstitels nutzen.
Neben Führungszeugnissen können auch Auskünfte aus dem Gewerbezentralregister über das neue Online-Portal des BfJ beantragt werden. Solche Auskünfte benötigen Unternehmen, die sich in Ausschreibungsverfahren um öffentliche Aufträge bewerben, recht häufig. Auch hier kann das Online-Verfahren den Aufwand erheblich senken."},
+ "address": "https://www.fuehrungszeugnis.bund.de/",
+ "homepage": "https://www.bundesjustizamt.de",
+ "phone": "+49 228 99 410-40",
+ "email": "poststelle@bfj.bund.de",
+ "postalAddress": "Bundesamt für Justiz
53094 Bonn",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.fuehrungszeugnis.bund.de/ffw"]
+ },
+ {
+ "shortName": {"" : "Halterauskunft zu einem KFZ beantragen"},
+ "longDescription": {"": "In Berlin können Sie für Fahrzeuge, die bei der Zulassungsbehörde Berlin registriert sind, mit der Online-Ausweisfunktion eine Halterauskunft beantragen.
Ihre persönlichen Daten werden verschlüsselt übertragen. Sie müssen Ihre Angaben nicht per Hand eingeben und die Behörde erhält zuverlässig korrekte Informationen, die rasch weiterverarbeitet werden können.
Bitte beachten Sie, dass eine Halterauskunft nur erteilt werden kann, wenn diese der Geltendmachung oder Abwehr von Rechtsansprüchen dient, die sich aus der Teilnahme am Straßenverkehr ergeben, oder wenn sie zur Erhebung einer Privatklage aufgrund im Straßenverkehr begangener Verstöße benötigt wird."},
+ "address": "https://www.berlin.de/labo/mobilitaet/kfz-zulassung/halterauskunft/shop.86598.php",
+ "homepage": "https://www.berlin.de",
+ "phone": "+49 30 90269 – 0",
+ "email": "",
+ "postalAddress": "Direktorin Landesamt für Bürger- und Ordnungsangelegenheiten
Friedrichstr. 219
10958 Berlin",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Car lizence number required.",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Hamburg Service Online-Bürgerdienste"},
+ "longDescription": {"": "Über das Portal ,HamburgService' finden Sie auf einen Blick alle Online-Dienste der Freien und Hansestadt Hamburg. Für die Dienste, die mit sensiblen Daten arbeiten (Dienste der Sicherheitsstufe 2), müssen Sie sich nach der Registrierung einmalig identifizieren. Sie können dazu die Online-Ausweisfunktion Ihres Personalausweises nutzen. Eine persönliche Identifizierung in einem Kundenzentrum der Stadt Hamburg ist dann nicht mehr nötig."},
+ "address": "https://gateway.hamburg.de/HamburgGateway/FVP/Application/Index.aspx",
+ "homepage": "http://www.hamburg.de/",
+ "phone": "",
+ "email": "dataporthamburggateway-service@dataport.de",
+ "postalAddress": "Bürgermeister Olaf Scholz
Rathausmarkt 1
20095 Hamburg",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://gateway.hamburg.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Identitätsprüfungen nach dem Signaturgesetz und dem Geldwäschegesetz"},
+ "longDescription": {"": "Die identity Trust Management AG bietet Unternehmen die Möglichkeit, ihre Kunden schnell und sicher mit der Online-Ausweisfunktion zu identifizieren.
Kunden der Kooperationspartner der identity Trust Management AG können die Identitätsprüfung nach dem Signaturgesetz und dem Geldwäschegesetz auch direkt über die Internetseite der identity Trust Management AG vornehmen."},
+ "address": "https://www.identity.tm",
+ "homepage": "https://www.identity.tm",
+ "phone": "+49 211 68 77 3-0",
+ "email": "kontakt@identity.tm",
+ "postalAddress": "identity Trust Management AG
Lierenfelder Straße 51
40231 Düsseldorf",
+ "category": "other",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "ID-Safe des Landkreis Kitzingen"},
+ "longDescription": {"": "Die Stadt Kitzingen bietet bei verschiedenen Bürgerdiensten die Nutzung der Online-Ausweisfunktion in Verbindung mit elektronischen Antragsformularen an:
- Gewerbeanmeldung
- Gewerbeummeldung
- Gewerbeabmeldung
- Fischereischein
- Verkehrsrechtliche Anordnung
- Sondernutzung
- Parkerleichterung
- Mängelmeldung"},
+ "address": "https://www.buergerservice.org/ID-Safe-Kitzingen",
+ "homepage": "http://www.kitzingen.de/",
+ "phone": "+49 9321 / 928-0,",
+ "email": "info@kitzingen.de",
+ "postalAddress": "Landratsamt Kitzingen
Herr Thomas Langhojer
Kaiserstraße 4
97318 Kitzingen",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://www.buergerservice.org"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "ID-Safe des Landkreis Ostallgäu"},
+ "longDescription": {"": "Der Landkreis Ostallgäu bietet Ihnen bei verschiedenen Bürgerdiensten die Nutzung der Online-Ausweisfunktion in Verbindung mit elektronischen Antragsformularen an:
- Bauantrag digital
- Sperrmüll-Abholung
- An-, Um- oder Abmeldung einer Abfalltonne
- Antrag auf Dauergenehmigung und Feriengenehmigung für ein Segelboot oder Motorboot auf dem Forggensee
Der Landkreis Ostallgäu bietet Ihnen außerdem einen ID-Safe an. Hier können Sie die Daten aus Ihrer Online-Ausweisfunktion hinterlegen und um weitere Kontaktdaten ergänzen. Anschließend können Sie die elektronischen Antragsformulare des Landkreises automatisch mit Ihren hinterlegten Daten befüllen. Dadurch vermeiden Sie Tippfehler und können die Bearbeitung Ihres Vorgangs beschleunigen.
Darüber hinaus können Sie im Landkreis Ostallgäu über das bayerische Bürgerservice-Portal folgende Bürgerdienste online beantragen:
- Fahrzeug-Anmeldung
- Fahrzeug-Abmeldung
- Feinstaubplakette
- Wunschkennzeichen"},
+ "address": "https://www.sixform.com/ID-safe",
+ "homepage": "https://www.landkreis-ostallgaeu.de/",
+ "phone": "+49 83 42 · 9 11 - 0",
+ "email": "poststelle@lra-oal.bayern.de",
+ "postalAddress": "Landkreis Ostallgäu
Schwabenstraße 11
87616 Marktoberdorf",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://www.sixform.com"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "ID-Safe des Landkreis Würzburg"},
+ "address": "https://www.buergerservice.org/ID-Safe-Wuerzburg",
+ "homepage": "http://www.landkreis-wuerzburg.de/startseite.phtml",
+ "phone": "+49 931 8003-0 ",
+ "email": "poststelle@lra-wue.bayern.de",
+ "postalAddress": "Landratsamt Würzburg
Zeppelinstraße 15
97074 Würzburg",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://www.buergerservice.org"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Kraftfahrt-Bundesamt - Registerauskunft"},
+ "longDescription": {"": "Mit der Online-Ausweisfunktion können Sie beim Kraftfahrt-Bundesamt einfach und schnell eine Auskunft über Ihren Punktestand und die zu Ihrer Person gespeicherten Eintragungen im Fahreignungsregister (FAER) beantragen. Die erforderlichen Daten werden dann von Ihrem Personalausweis ausgelesen. Die Auskunft erhalten Sie innerhalb weniger Tage per Post."},
+ "address": "https://www.kba-online.de/registerauskunft/app/registeranfrage.html",
+ "homepage": "http://www.kba.de/",
+ "phone": "+49 461 316-0",
+ "email": "poststelle@kba.de",
+ "postalAddress": "Kraftfahrt-Bundesamt
Fördestraße 16
24944 Flensburg",
+ "category": "citizen",
+ "tcTokenUrl" : "https://www.kba-online.de:443/registerauskunft/app/eidstart.html;jsessionid=HZFFDC4E848A794D83A1D3032252F3F905?ref=HZFFDC4E848A794D83A1D3032252F3F905",
+ "tcTokenUrlInfo" : "TcToken URL contains dynamic request id but is accepted anyway.",
+ "subjectUrls": ["https://www.kba-online.de/registerauskunft"]
+ },
+ {
+ "shortName": {"" : "Kreis Borken"},
+ "longName": {"" : "Kreis Borken - Kfz-Abmeldung Internet"},
+ "shortDescription": {"": "Authentisierung für internetbasierte Kfz-Abmeldung."},
+ "longDescription": {"": "Für die internetbasierte Kfz-Abmeldung wird die eID-Funktionalität des neuen Personalausweises benötigt."},
+ "address": "https://formulare-extern.de/administrationCenter/Form-Solutions/05554004-0001/eID/eIDMandatory?directlink=https%3A%2F%2Fformulare-extern.de%2Fmetaform%2FForm-Solutions%2Fsid%2Fassistant%2F55dc839be4b054042fb93dba%3FeIDComplete%3Dtrue",
+ "homepage": "https://www.kreis-borken.de",
+ "phone": "+49 2861 / 82 - 2059",
+ "email": "zulassungsstelle@kreis-borken.de",
+ "postalAddress": "Kfz-Zulassungsstelle Borken
Burloer Str. 93
46325 Borken",
+ "image": "KreisBorken_image.png",
+ "icon": "KreisBorken_icon.svg",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "",
+ "subjectUrls": []
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Login Meine VBL"},
+ "longDescription": {"": "Bei der VBL können Sie sich mit dem Personalausweis am Kundenportal ,Meine VBL' registrieren und anmelden. Dadurch entfällt der Postversand eines Freischaltcodes - Sie sparen Zeit. Im Kundenkonto können Sie Ihre Vertragsdaten und Ihre persönlichen Daten einsehen und weitere Online-Dienste nutzen, z. B.
- Rentenantrag stellen,
- Beitragserstattung beantragen,
- Kontaktdaten ändern,
- persönliche Mitteilungen von der VBL erhalten."},
+ "address": "https://www.vbl.de/de/meine_vbl",
+ "homepage": "https://www.vbl.de/",
+ "phone": "+49 721 93 98 93 1",
+ "email": "info@vbl.de",
+ "postalAddress": "VBL. Kundenservice
76240 Karlsruhe",
+ "category": "other",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://www.vbl.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "LVM Versicherung - Kundenportal Meine LVM"},
+ "longDescription": {"": "Mit der Online-Ausweisfunktion im Personalausweis können Sie sich nach der Registrierung durch Ihre LVM-Agentur sicher am Kundenportal ,Meine LVM' anmelden. Ihre Versicherung können Sie nun selbst verwalten und beispielsweise sämtliche Vertragsdaten online einsehen. Darüber hinaus ist es möglich über das Portal Versicherungsbescheinigungen anzufordern sowie schnell und einfach Ihre persönlichen Daten wie Adresse oder Bankverbindung zu ändern."},
+ "address": "http://www.lvm.de/personalausweis",
+ "homepage": "http://www.lvm.de/",
+ "phone": "+49 251 702-0",
+ "email": "info@lvm.de",
+ "postalAddress": "LVM Versicherung
48126 Münster",
+ "category": "insurance",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://www.lvm.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Mentana-Claimsoft AG - Registrierung beim De-Mail Dienst"},
+ "address": "https://www.fp-demail.de/",
+ "homepage": "https://www.fp-demail.de/",
+ "phone": "+49 800-6368262",
+ "email": "de-mail.info@mentana.de",
+ "postalAddress": "Mentana-Claimsoft GmbH
Trebuser-Str. 47 Haus 1
D-15517 Fürstenwalde",
+ "category": "other",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.fp-demail.de"]
+ },
+ {
+ "shortName": {"" : "OpenPGP-eID"},
+ "longDescription": {"": "Durch die Verschlüsselung Ihrer Nachrichten mittels OpenPGP ist die Vertraulichkeit Ihrer Information gewährleistet. Aber kann ein Empfänger der Nachricht sicher sein, dass der Absender der ist, der er vorgibt zu sein? Die Antwortet lautet: Nein. Abhilfe schafft die Beglaubigung Ihres OpenPGP-Schlüssels durch eine Signatur. Sie benötigen hierfür einen Personalausweis bzw. elektronischen Aufenthaltstitel mit aktivierter Online-Ausweisfunktion. Diesen Dienst stellen wir im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik (BSI) zur Verfügung."},
+ "address": "https://pgp.governikus-eid.de/pgp/",
+ "homepage": "https://www.governikus.de/",
+ "phone": "+49 421 204 95-0",
+ "email": "kontakt@governikus.com",
+ "postalAddress": "Governikus GmbH & Co. KG
Am Fallturm 9
28359 Bremen",
+ "category": "other",
+ "tcTokenUrl" : "https://pgp.governikus-eid.de/pgp/EIDRequest",
+ "subjectUrls": ["https://pgp.governikus-eid.de"]
+ },
+ {
+ "exclude": ["ios", "android"],
+ "shortName": {"" : "Schufa – Auskunftsportal „Meine SCHUFA“"},
+ "longDescription": {"": "Wenn Sie Ihre Bonität gegenüber Dritten z. B. für einen Mietvertrag, belegen müssen, benötigen Sie dazu in der Regel eine SCHUFA-Auskunft. Mit der Online-Ausweisfunktion können Sie sich einfach und sicher am Kundenportal „MeineSCHUFA“ registrieren. Ohne weitere Verzögerungen haben Sie nach Anmeldung am Portal die Möglichkeit Ihre Schufa-Auskunft direkt online abzurufen oder auf dem Postweg Ihren Geschäftspartnern zukommen zu lassen. Der Personalausweis erspart Ihnen hierbei unnötige Wartezeit und gewährleistet dennoch eine verlässliche Identifizierung."},
+ "address": "https://www.meineschufa.de/index.php?site=30_2_1_pa#tabNPA",
+ "homepage": "https://www.meineschufa.de",
+ "phone": "+49 611 – 92780",
+ "email": "meineSCHUFA@SCHUFA.de",
+ "postalAddress": "SCHUFA Holding AG
Postfach 10 25 66
44725 Bochum",
+ "category": "citizen",
+ "tcTokenUrl" : "https://www.meineschufa.de/eID-Service-Connector-V2/createSamlRequest/Reg",
+ "subjectUrls": ["https://www.meineschufa.de"]
+ },
+ {
+ "shortName": {"" : "Selbstauskunft - „Meine Daten einsehen“"},
+ "longDescription": {"": "Die AusweisApp2 verfügt über die Funktion \"Meine Daten einsehen\". Mit dieser Funktion können die auf dem Personalausweis bzw. dem elektronischen Aufenthaltstitel gespeicherten Daten ausgelesen und angezeigt werden.
Sobald Sie die AusweisApp2 gestartet und ein geeignetes Kartenlesegerät angeschlossen haben, können Sie diese Funktion unter dem Menüpunkt \"Ausweisen\" aufrufen. Über voreingestellte Checkboxen können Sie steuern, ob Sie alle gespeicherten Daten oder nur spezielle Daten auslesen möchten.
Nach Ihrer PIN-Eingabe und erfolgreicher Datenübertragung werden die von Ihnen festgelegten Daten in der AusweisApp2 dargestellt.
Bitte beachten Sie, dass Sie für diesen Vorgang eine Internetverbindung benötigen. Dies hat folgenden Hintergrund: Für jedes Auslesen der Daten aus dem Personalausweis oder dem elektronischen Aufenthaltstitel muss gesetzlich der Zweck des Auslesevorgangs angegeben werden. Dieser Zweck wird Ihnen auf einem speziellen Zertifikat angezeigt (Berechtigungszertifikat). Diese Zertifikate werden individuell durch die Vergabestelle für Berechtigungszertifikate beim Bundesverwaltungsamt genehmigt. Damit Sie also jederzeit genau wissen, wer zu welchem Zweck einen Auslesevorgang startet, wird eine Internetverbindung zu einem vertrauenswürdigen Authentisierungsserver aufgebaut. Die Berechtigungszertifikate dienen Ihrem Schutz!"},
+ "address": "https://www.ausweisapp.bund.de/ausweisapp2/ausprobieren-meine-daten-einsehen/",
+ "homepage": "https://www.ausweisapp.bund.de/",
+ "phone": "+49 1805 - 348743",
+ "email": "support@ausweisapp.de",
+ "postalAddress": "Governikus GmbH & Co. KG
- im Auftrag des Bundesministeriums des Innern -
Am Fallturm 9
D-28359 Bremen",
+ "image": "Selbstauskunft.jpg",
+ "icon": "npa.svg",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml",
+ "subjectUrls": ["https://www.autentapp.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Service-Portal \"Auto\" Kreis Lippe"},
+ "longName": {"" : "Service-Portal \"Auto\" Kreis Lippe"},
+ "shortDescription": {"": "Das Service-Portal bietet Online-Dienste rund um die KFZ-Zulassung."},
+ "longDescription": {"": "Im Service-Portal \"Auto\" können Sie Ihr Auto online abmelden. Weitere Angebote wie die komplette online KFZ-Wiederzulassung und -Zulassung sind im Aufbau."},
+ "address": "https://www.buergerserviceportal.nrw/krz/lkrlippe",
+ "homepage": "http://www.kreis-lippe.de/",
+ "phone": "+49 5231/62-0",
+ "email": "stva@kreis-lippe.de",
+ "postalAddress": "Kreis Lippe
Felix-Fechenbach-Straße 5
32756 Detmold",
+ "image": "KreisLippe_image.jpg",
+ "icon": "KreisLippe_icon.png",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://www.buergerserviceportal.nrw"]
+ },
+ {
+ "shortName": {"" : "SkIDentity Service"},
+ "longName": {"" : "SkIDentity Service"},
+ "longDescription": {"": "SkIDentity unterstützt die Umsetzung der Cyber-Sicherheitsstrategie der Bundesregierung und macht den elektronischen Personalausweis im Internet sehr leicht und mobil nutzbar. Der SkIDentity-Dienst bietet „Mobile eID as a Service“ und leitet bei Bedarf aus elektronischen Ausweisdokumenten kryptographisch geschützte „Cloud Identitäten“ ab, die auf beliebige Smartphones übertragen und dort sicher mobil genutzt werden können. Darüber hinaus kann auch die bislang aufwändige eID-Integration in einem komfortablen Portal erfolgen und die vertrauenswürdigen Identitäten kommen nun selbst aus einer vom Bundesamt für Sicherheit in der Informationstechnik (BSI) zertifizierten „Secure Cloud Infrastructure“."},
+ "address": "https://skidentity.de/service",
+ "homepage": "https://www.skidentity.de",
+ "phone": "+49 9571 604 8014",
+ "email": "detlef.huehnlein@ecsec.de",
+ "postalAddress": "ecsec GmbH
Sudetenstraße 16
96247 Michelau",
+ "category": "other",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": []
+ },
+ {
+ "shortName": {"" : "Stadt Nürnberg: Online-Bürgerdienste Service"},
+ "longDescription": {"": "Die Stadt Nürnberg bietet Ihnen mit ihrem Bürgerserviceportal ,Mein.Nürnberg' erstmals die Möglichkeit, Ihre Verwaltungsangelegenheiten komplett elektronisch abzuwickeln – von der Antragstellung bis zur Rückmeldung der Bescheide oder Schriftstücke in Ihren persönlichen Bereich auf dem Portal. Alle Online-Dienste der Stadt Nürnberg wurden zudem für die Nutzung mit mobilen Endgeräten optimiert.
Bei immer mehr Verfahren akzeptiert die Stadtverwaltung einen Unterschriftersatz durch die Online-Ausweisfunktion.
Jeder Online-Dienst der Stadt Nürnberg, der die Online-Ausweisfunktion nutzt, ist an dem Hinweis \"mit eID\" erkennbar. Derzeit sind dies z. B.:
- Aufenthaltstitel beantragen
- Gaststättenrechtliche Erlaubnis für den Ausschank von Alkohol beantragen
- Hunde – Negativzeugnis für Kampfhunde beantragen
- Kfz-Halterauskunft beantragen
- Melderegister – Widerspruch gegen Datenübermittlung
- Veranstaltung, Messe, Markt beantragen"},
+ "address": "http://www.nuernberg.de/internet/onlinedienste",
+ "homepage": "http://www.nuernberg.de/",
+ "phone": "+49 9 11 / 2 31-8613",
+ "email": "poststelle@stadt.nuernberg.de",
+ "postalAddress": "Amt für Organisation, Informationsverarbeitung und Zentrale Dienste
E-Government-Büro
Rathausplatz 2
III. OG
90403 Nürnberg",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://meinkonto.nuernberg.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Standesamt Online Mecklenburg-Vorpommern"},
+ "longDescription": {"": "In Mecklenburg-Vorpommern können Sie in immer mehr Kommunen Urkunden mit der Online-Ausweisfunktion beantragen:
- Geburtsurkunden
- Eheurkunden
- Lebenspartnerschaftsurkunden
- Sterbeurkunden"},
+ "address": "https://portal.ego-mv.de/",
+ "homepage": "http://www.ego-mv.de/",
+ "phone": "+49 3 85 77 33 47-0",
+ "email": "info@ego-mv.de",
+ "postalAddress": "Zweckverband Elektronische Verwaltung in Mecklenburg-Vorpommern (eGo-MV)
Eckdrift 103
19061 Schwerin",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://tbk.ego-mv.de/BuergerKontoWeb"]
+ },
+ {
+ "shortName": {"" : "Techniker Krankenkasse"},
+ "longDescription": {"": "Die Online-Ausweisfunktion des Personalausweises ermöglicht Ihnen die schnelle und sichere Registrierung am Kundenportal \"Meine TK\". Damit können Sie online verbindlich Anträge stellen und Ihre Unterlagen anfordern (z. B. eine neue Versichertenkarte). Außerdem lassen sich persönliche Daten wie Kontoverbindung oder Adresse selbstständig ändern und verwalten. Wenn Sie \"Meine TK\" mit der Online-Ausweisfunktion nutzen, sparen Sie Zeit und Aufwand."},
+ "address": "https://www.tk.de/tk/118032",
+ "homepage": "https://www.tk.de/",
+ "phone": "+49 800 - 285 85 85",
+ "email": "service@tk.de",
+ "postalAddress": "Techniker Krankenkasse
Bramfelder Straße 140
22305 Hamburg",
+ "category": "insurance",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://www.tk.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Telekom DeMail"},
+ "longName": {"" : "Telekom DeMail für Privat- und Geschäftskunden"},
+ "address": "https://www.telekom.de/de-mail",
+ "homepage": "https://www.telekom.de/",
+ "phone": "+49 800 33 01000",
+ "email": "",
+ "postalAddress": "Telekom Deutschland GmbH
Landgrabenweg 151
53227 Bonn",
+ "category": "other",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://www.de-mail.t-online.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "T-Systems DeMail für Großkunden"},
+ "address": "https://www.t-systems.de/de-mail",
+ "homepage": "https://www.t-systems.de/",
+ "phone": "+49 69 20060 - 0",
+ "email": "de-mail@t-systems.com",
+ "postalAddress": "T-Systems International GmbH
Hahnstraße 43d
60528 Frankfurt am Main",
+ "category": "other",
+ "tcTokenUrlInfo" : "Registration required",
+ "subjectUrls": ["https://www.de-mail.t-systems.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Urkundenservice Köln"},
+ "longDescription": {"": "Bei der Stadt Köln können Sie mit der Online-Ausweisfunktion folgende Urkunden beantragen:
- Geburtsurkunden
- Eheurkunden
- Lebenspartnerschaftsurkunden
- Sterbeurkunden
Dabei werden die Adressatenangaben in den Online-Formularen automatisch befüllt."},
+ "address": "http://www.stadt-koeln.de/service/produkt/urkundenservice-des-standesamtes",
+ "homepage": "http://www.stadt-koeln.de/",
+ "phone": "+49 221 / 221-26530",
+ "email": "standesamt@stadt-koeln.de",
+ "postalAddress": "Gülichplatz 1-3
50667 Köln",
+ "category": "citizen",
+ "tcTokenUrl" : "https://ea.stadt-koeln.de/Gastzugang/EIDServiceProvider/Request.ashx?appID=7",
+ "subjectUrls": ["https://ea.stadt-koeln.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Virtuelles Rathaus Stadt Dortmund"},
+ "longDescription": {"": "Sie wollen städtische Dienstleistungen in Anspruch nehmen, sich zunächst nur informieren oder Sie suchen bereits ein bestimmtes Formular?
Wir haben für Sie ein umfassendes Informationsangebot über Produkte und Leistungen (Services) der Stadt Dortmund gegliedert nach Themen und der Behördenstruktur bereitgestellt."},
+ "address": "https://rathaus.dortmund.de/",
+ "homepage": "https://rathaus.dortmund.de/",
+ "phone": "+49 231 / 50-25650",
+ "email": "domap-feedback@stadtdo.de",
+ "postalAddress": "Stadt Dortmund
Dortmunder Systemhaus
Deggingstraße 42
44122 Dortmund",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
+ "subjectUrls": ["https://rathaus.dortmund.de"]
+ },
+ {
+ "exclude": ["ios"],
+ "shortName": {"" : "Vollstreckungsportal"},
+ "longDescription": {"": "Herzlich willkommen auf dem Gemeinsamen Vollstreckungsportal der Länder."},
+ "address": "https://www.vollstreckungsportal.de/auskunft/priv/anmelden.jsf?type=npa",
+ "homepage": "https://www.vollstreckungsportal.de/",
+ "phone": "",
+ "email": "bundesportal@ag-hagen.nrw.de",
+ "postalAddress": "Land Nordrhein-Westfalen
vertreten durch das Justizministerium
Martin-Luther-Platz 40
40212 Düsseldorf",
+ "category": "citizen",
+ "tcTokenUrlInfo" : "Registration required.",
+ "subjectUrls": ["https://www.vollstreckungsportal.de"]
+ }
+ ]
+}
diff --git a/resources/updatable-files/supported-readers.json b/resources/updatable-files/supported-readers.json
new file mode 100644
index 0000000..f38fe84
--- /dev/null
+++ b/resources/updatable-files/supported-readers.json
@@ -0,0 +1,488 @@
+{
+ "SupportedDevices":
+ [
+ {
+ "VendorId": "0x0000",
+ "ProductId": "0x0000",
+ "Name": "Smartphone als Kartenlesegerät",
+ "Pattern": "^NFC.*",
+ "Icon": "img_RemoteReader.png",
+ "IconWithNPA": "img_RemoteReader_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}, {"os": "mac"}, {"os": "unknown"}],
+ "URL": "https://play.google.com/store/apps/details?id=com.governikus.ausweisapp2"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x0C4B",
+ "ProductId": "0x0501",
+ "Name": "REINER SCT cyberJack RFID komfort",
+ "Pattern": "REINER SCT cyberJack RFID komfort",
+ "Icon": "img_Reiner_SCT_cyberjack_RFID_komfort.png",
+ "IconWithNPA": "img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=Windows&productGroup=77304735&product=77304822&q=driver#choice5"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=MacOS&productGroup=77304735&product=77304822&q=driver#choice5"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=Linux&productGroup=77304735&product=77304822&q=driver#choice5"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x0C4B",
+ "ProductId": "0x0500",
+ "Name": "REINER SCT cyberJack RFID standard",
+ "Pattern": "REINER SCT cyberJack RFID standard",
+ "Icon": "img_Reiner_SCT_cyberjack_RFID_standard.png",
+ "IconWithNPA": "img_Reiner_SCT_cyberjack_RFID_standard_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=Windows&productGroup=77304735&product=77304820&q=driver#choice5"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=MacOS&productGroup=77304735&product=77304820&q=driver#choice5"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=Linux&productGroup=77304735&product=77304820&q=driver#choice5"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x0C4B",
+ "ProductId": "0x9102",
+ "Name": "REINER SCT cyberJack RFID basis",
+ "Pattern": "REINER SCT cyberJack RFID basis",
+ "Icon": "img_Reiner_SCT_cyberjack_RFID_basis.png",
+ "IconWithNPA": "img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=Windows&productGroup=77304735&product=77304856&q=driver#choice5"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=MacOS&productGroup=77304735&product=77304856&q=driver#choice5"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=Linux&productGroup=77304735&product=77304856&q=driver#choice5"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x0C4B",
+ "ProductId": "0x0505",
+ "Name": "REINER SCT cyberJack wave",
+ "Pattern": "REINER SCT cyberJack wave",
+ "Icon": "img_cyberjack_wave.png",
+ "IconWithNPA": "img_cyberjack_wave_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=Windows&productGroup=77304735&product=77304828&q=driver#choice5"
+ },
+ {
+ "Platforms": [{"os": "mac", "min": "10.11"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=MacOS&productGroup=77304735&product=77304828&q=driver#choice5"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://www.reiner-sct.com/support/support-anfrage/?os=Linux&productGroup=77304735&product=77304828&q=driver#choice5"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x0D46",
+ "ProductId": "0x301D",
+ "Name": "KOBIL IDToken",
+ "Pattern": "KOBIL (Systems )?IDToken",
+ "Icon": "img_KOBIL_ID_Token.png",
+ "IconWithNPA": "img_KOBIL_ID_Token_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://www.kobil.com/de/support_de/#drivers_de"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "https://www.kobil.com/de/support_de/#drivers_de"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://www.kobil.com/de/support_de/#drivers_de"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x04E6",
+ "ProductId": "0x512B",
+ "Name": "SDI011 Contactless Reader",
+ "Pattern": "SDI011 (USB )?(Smart Card|Contactless) Reader",
+ "Icon": "img_Identive_SDI011.png",
+ "IconWithNPA": "img_Identive_SDI011_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "mac", "min": "10.11", "max": "10.11"}],
+ "URL": "https://support.identiv.com/sdi010-011/"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://support.identiv.com/sdi010-011/"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x04E6",
+ "ProductId": "0x5292",
+ "Name": "SCL01x Contactless Reader",
+ "Pattern": "(SCM Microsystems Inc. )?SCL011 Contactless Reader",
+ "Icon": "img_Identive_SCL011.png",
+ "IconWithNPA": "img_Identive_SCL011_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win", "min": "10.0"}],
+ "URL": "https://support.identiv.com/scl010-scl011/"
+ },
+ {
+ "Platforms": [{"os": "mac", "min": "10.11", "max": "10.11"}],
+ "URL": "https://support.identiv.com/scl010-scl011/"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://support.identiv.com/scl010-scl011/"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x04E6",
+ "ProductId": "0x5790",
+ "Name": "Identiv Cloud 3700 F",
+ "Pattern": "(CLOUD 3700 F Contactless Reader|Identiv uTrust 3700 F CL Reader)",
+ "Icon": "img_Identive_Cloud_3700_F.png",
+ "IconWithNPA": "img_Identive_Cloud_3700_F_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://support.identiv.com/3700f/"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "https://support.identiv.com/3700f/"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://support.identiv.com/3700f/"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x04E6",
+ "ProductId": "0x5591",
+ "Name": "Identiv SCL3711",
+ "Pattern": "SCL3711",
+ "Icon": "img_Identive_SCL3711.png",
+ "IconWithNPA": "img_Identive_SCL3711_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://support.identiv.com/scl3711/"
+ },
+ {
+ "Platforms": [{"os": "mac", "max": "10.11"}],
+ "URL": "https://support.identiv.com/scl3711/"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://support.identiv.com/scl3711/"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x04E6",
+ "ProductId": "0x5720",
+ "Name": "Identiv Cloud 4700 F",
+ "Pattern": "(CLOUD 4700 F Contactless Reader|Identiv uTrust 4700 F Dual Interface Reader)",
+ "Icon": "img_Identive_Cloud_4700_F.png",
+ "IconWithNPA": "img_Identive_Cloud_4700_F_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "http://www.scm-pc-card.de/index.php?lang=en&page=download&function=show_downloads&product_id=832"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "http://www.scm-pc-card.de/index.php?lang=en&page=download&function=show_downloads&product_id=832"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "http://www.scm-pc-card.de/index.php?lang=en&page=download&function=show_downloads&product_id=832"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x04E6",
+ "ProductId": "0x5724",
+ "Name": "Identiv Cloud 4701 F",
+ "Pattern": "(CLOUD 4701 F Contactless Reader|Identiv uTrust 4701 F Dual Interface Reader)",
+ "Icon": "img_Identive_Cloud_4701_F.png",
+ "IconWithNPA": "img_Identive_Cloud_4701_F_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://support.identiv.com/4701f/"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "https://support.identiv.com/4701f/"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://support.identiv.com/4701f/"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x072F",
+ "ProductId": "0x2200",
+ "Name": "ACS ACR122U",
+ "Pattern": "ACS ACR122U",
+ "Icon": "img_ACS_ACR122U.png",
+ "IconWithNPA": "img_ACS_ACR122U_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}, {"os": "mac"}],
+ "URL": "https://www.acs.com.hk/en/products/3/acr122u-usb-nfc-reader/"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x072F",
+ "ProductId": "0x0901",
+ "Name": "ACS ACR1281U",
+ "Pattern": "ACS ACR1281 PICC Reader",
+ "Icon": "img_ACS_ACR1281U.png",
+ "IconWithNPA": "img_ACS_ACR1281U_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "http://www.acs.com.hk/en/driver/151/acr1281u-npa-contactless-reader/"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "http://www.acs.com.hk/en/driver/151/acr1281u-npa-contactless-reader/"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x072F",
+ "ProductId": "0x223B",
+ "Name": "ACS ACR1252U",
+ "Pattern": "ACS ACR1252 Dual Reader|ACS ACR1252 1S CL Reader",
+ "Icon": "img_ACS_ACR1252U.png",
+ "IconWithNPA": "img_ACS_ACR1252U_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "http://www.acs.com.hk/en/products/342/acr1252u-usb-nfc-reader-iii-nfc-forum-certified-reader/#tab_downloads"
+ },
+ {
+ "Platforms": [{"os": "mac", "min": "10.13", "max": "10.13"}],
+ "URL": "http://www.acs.com.hk/en/products/342/acr1252u-usb-nfc-reader-iii-nfc-forum-certified-reader/#tab_downloads"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x076B",
+ "ProductId": "0x5340",
+ "Name": "OMNIKEY 5021-CL",
+ "Pattern": "OMNIKEY CardMan 5x21-CL|OMNIKEY CardMan \\(076B:5340\\) 5021 CL",
+ "Icon": "img_HID_Omnikey_Mobile_Reader_5021_CL.png",
+ "IconWithNPA": "img_HID_Omnikey_Mobile_Reader_5021_CL_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://www.hidglobal.com/drivers?field_brand_tid=24&product_id=4077&os=All"
+ },
+ {
+ "Platforms": [{"os": "mac", "min": "10.11", "max": "10.11"}, {"os": "mac", "min": "10.13", "max": "10.13"}],
+ "URL": "https://www.hidglobal.com/drivers?field_brand_tid=24&product_id=4077&os=All"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://www.hidglobal.com/drivers?field_brand_tid=24&product_id=4077&os=All"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x076B",
+ "ProductId": "0x5421",
+ "Name": "OMNIKEY 5421",
+ "Pattern": "OMNIKEY CardMan \\(076B:5421\\) 5421|OMNIKEY Smart Card Reader USB",
+ "Icon": "img_HID_Omnikey_5421.png",
+ "IconWithNPA": "img_HID_Omnikey_5421_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "https://www.hidglobal.com/drivers?field_brand_tid=24&product_id=4077&os=All"
+ },
+ {
+ "Platforms": [{"os": "mac", "min": "10.11", "max": "10.11"}, {"os": "mac", "min": "10.13", "max": "10.13"}],
+ "URL": "https://www.hidglobal.com/drivers?field_brand_tid=24&product_id=4077&os=All"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "https://www.hidglobal.com/drivers?field_brand_tid=24&product_id=4077&os=All"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x0AB1",
+ "ProductId": "0x0003",
+ "Name": "OBID RFID-Reader",
+ "Pattern": "FEIG ELECTRONIC GmbH OBID myAXXESS basic",
+ "Icon": "img_FEIG_myAXXES_basic.png",
+ "IconWithNPA": "img_FEIG_myAXXES_basic_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "http://www.feig.de/downloads/"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x08E6",
+ "ProductId": "0x5504",
+ "Name": "Gemalto Prox-SU Contactless",
+ "Pattern": "Gemalto Prox( |-)SU",
+ "Icon": "img_Gemalto_Prox_SU.png",
+ "IconWithNPA": "img_Gemalto_Prox_SU_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win", "max": "6.1"}, {"os": "win", "min": "10.0"}],
+ "URL": "http://support.gemalto.com/index.php?id=prox-du_prox-su#msdrivers"
+ },
+ {
+ "Platforms": [{"os": "mac", "min": "10.13", "max": "10.13"}],
+ "URL": "http://support.gemalto.com/index.php?id=prox-du_prox-su#macosxdrivers"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x08E6",
+ "ProductId": "0x5503",
+ "Name": "Prox-DU HID",
+ "Pattern": "Gemalto Prox(-DU| Dual)($| USB| Contactless_)",
+ "Icon": "img_Gemalto_Prox_DU.png",
+ "IconWithNPA": "img_Gemalto_Prox_DU_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win", "max": "6.1"}, {"os": "win", "min": "10.0"}],
+ "URL": "http://support.gemalto.com/index.php?id=prox-du_prox-su#.WOIQijvyjyQ"
+ },
+ {
+ "Platforms": [{"os": "mac"}],
+ "URL": "http://support.gemalto.com/index.php?id=prox-du_prox-su#.WOIQijvyjyQ"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x046A",
+ "ProductId": "0x0091",
+ "Name": "Cherry TC-1200",
+ "Pattern": "(Cherry TC 1200($|[^-])|TC 12xx-CL 0|Cherry SC Reader \\(046A:0091\\))",
+ "Icon": "img_Cherry_TC_1200.png",
+ "IconWithNPA": "img_Cherry_TC_1200_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "http://www.cherry.de/cid/download.php"
+ },
+ {
+ "Platforms": [{"os": "mac", "min": "10.11", "max": "10.11"}, {"os": "mac", "min": "10.13", "max": "10.13"}],
+ "URL": "http://www.cherry.de/cid/download.php"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "http://www.cherry.de/cid/download.php"
+ }
+ ]
+ },
+
+ {
+ "VendorId": "0x046A",
+ "ProductId": "0x0092",
+ "Name": "Cherry TC-1300",
+ "Pattern": "(Cherry TC 1300|Cherry Smartcard Terminal TC 13xx-CL 0|Cherry SC Reader \\(046A:0092\\))",
+ "Icon": "img_Cherry_TC_1300.png",
+ "IconWithNPA": "img_Cherry_TC_1300_mit_ausweis.png",
+ "Drivers":
+ [
+ {
+ "Platforms": [{"os": "win"}],
+ "URL": "http://www.cherry.de/cid/download.php"
+ },
+ {
+ "Platforms": [{"os": "mac", "min": "10.11", "max": "10.11"}, {"os": "mac", "min": "10.13", "max": "10.13"}],
+ "URL": "http://www.cherry.de/cid/download.php"
+ },
+ {
+ "Platforms": [{"os": "unknown"}],
+ "URL": "http://www.cherry.de/cid/download.php"
+ }
+ ]
+ }
+ ]
+}
diff --git a/resources/windows.rc b/resources/windows.rc
deleted file mode 100644
index 3b8ebf4..0000000
--- a/resources/windows.rc
+++ /dev/null
@@ -1,55 +0,0 @@
-// http://msdn.microsoft.com/en-us/library/aa381058(VS.85).aspx
-#include
-
-IDR_MAINFRAME ICON "images\\npa.ico"
-
-#define STR_HELPER(x) #x
-#define STR(x) STR_HELPER(x)
-
-#define COMPANY "Governikus GmbH & Co. KG"
-#define PRODUCT "AusweisApp2"
-#define EXECUTABLE "AusweisApp2.exe"
-#define COPYRIGHT "\251 2014 " COMPANY
-#define VERSION_STR STR(VERSION)
-
-
-1 VERSIONINFO
-FILEVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,VERSION_TWEAK
-PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,VERSION_TWEAK
-FILEOS VOS_NT_WINDOWS32
-FILETYPE VFT_APP
-
-BEGIN
- BLOCK "StringFileInfo"
-
- BEGIN
- BLOCK "040704B0" // LANG_GERMAN/SUBLANG_DEFAULT, Unicode CP
- BEGIN
- VALUE "CompanyName", COMPANY
- VALUE "FileDescription", PRODUCT
- VALUE "FileVersion", VERSION_STR
- VALUE "InternalName", PRODUCT
- VALUE "LegalCopyright", COPYRIGHT
- VALUE "OriginalFilename", EXECUTABLE
- VALUE "ProductName", PRODUCT
- VALUE "ProductVersion", VERSION_STR
- END
-
- BLOCK "040904B0" // LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP
- BEGIN
- VALUE "CompanyName", COMPANY
- VALUE "FileDescription", PRODUCT
- VALUE "FileVersion", VERSION_STR
- VALUE "InternalName", PRODUCT
- VALUE "LegalCopyright", COPYRIGHT
- VALUE "OriginalFilename", EXECUTABLE
- VALUE "ProductName", PRODUCT
- VALUE "ProductVersion", VERSION_STR
- END
- END
-
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x0407, 0x04B0
- END
-END
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 63ab7c3..2b63ed3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,27 +1,54 @@
ADD_SUBDIRECTORY(external)
ADD_SUBDIRECTORY(global)
+ADD_SUBDIRECTORY(secure_storage)
+ADD_SUBDIRECTORY(configuration)
+ADD_SUBDIRECTORY(settings)
ADD_SUBDIRECTORY(card)
ADD_SUBDIRECTORY(network)
-ADD_SUBDIRECTORY(settings)
ADD_SUBDIRECTORY(services)
ADD_SUBDIRECTORY(activation)
ADD_SUBDIRECTORY(core)
ADD_SUBDIRECTORY(jsonapi)
ADD_SUBDIRECTORY(websocket)
ADD_SUBDIRECTORY(aidl)
+ADD_SUBDIRECTORY(remote_device)
+ADD_SUBDIRECTORY(file_provider)
+ADD_SUBDIRECTORY(export)
IF(DESKTOP)
ADD_SUBDIRECTORY(cli)
- ADD_SUBDIRECTORY(export)
ENDIF()
-ADD_SUBDIRECTORY(qml)
+
+IF(TARGET Qt5::Qml)
+ ADD_SUBDIRECTORY(qml)
+ENDIF()
# Use this if we can use QSvgPlugin without Widgets
# IF(TARGET Qt5::Widgets)
# https://bugreports.qt.io/browse/QTBUG-41884
IF(DESKTOP)
- ADD_SUBDIRECTORY(gui)
+ ADD_SUBDIRECTORY(widget)
+ IF(TARGET Qt5::UiPlugin)
+ ADD_SUBDIRECTORY(widgetDesignerPlugin)
+ ENDIF()
ENDIF()
+FUNCTION(CONFIGURE_CONFIG_H)
+ IF(VENDOR_GOVERNIKUS)
+ SET(VENDOR_DOMAIN governikus.com)
+ ELSE()
+ SET(VENDOR_DOMAIN)
+ ENDIF()
+
+ IF(VERSION_DVCS)
+ SET(VERSION ${VERSION_DVCS})
+ ELSE()
+ SET(VERSION ${PROJECT_VERSION})
+ ENDIF()
+
+ SET(PRODUCT ${EXECUTABLE_BASE_NAME})
+
+ CONFIGURE_FILE(config.h.in config.h @ONLY)
+ENDFUNCTION()
FILE(GLOB TRANSLATION_FILES ${RESOURCES_DIR}/translations/*.ts)
@@ -61,67 +88,65 @@ IF(IOS)
SET(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION})
SET(MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION})
- FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
- FILE(COPY ${QT_HOST_PREFIX}/qml/${entry} DESTINATION ${CMAKE_BINARY_DIR}/qml PATTERN "lib*" EXCLUDE)
- LIST(APPEND IOS_RESOURCES ${CMAKE_BINARY_DIR}/qml/${entry})
- ENDFOREACH()
-
LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/qml)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/packaging/ios/de.lproj)
LIST(APPEND IOS_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/translations)
LIST(APPEND IOS_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/config.json)
- LIST(APPEND IOS_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/default-providers.json)
LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/qtlogging.ini)
# Attention: the file names correspond to values in the Info.plist
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon29x29@2x.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon29x29@2x~ipad.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon29x29@3x.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon29x29~ipad.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon40x40@2x.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon40x40@2x~ipad.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon40x40@3x.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon40x40~ipad.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon60x60@2x.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon60x60@3x.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon76x76@2x~ipad.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/icon76x76~ipad.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchIcons/launchIcon.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchIcons/launchIcon6.png)
- LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchIcons/launchIcon6p.png)
+ IF(BUILD_PREVIEW)
+ MESSAGE(FATAL_ERROR "iOS preview not implemented")
+ ELSEIF(IS_DEVELOPER_VERSION)
+ SET(IOS_APPICON_PATH "beta/")
+ ELSE()
+ SET(IOS_APPICON_PATH "")
+ ENDIF()
+
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}iconSmall.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}iconSmall@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}iconSmall@3x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}iconSmall40.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}iconSmall40@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}iconSmall40@3x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}icon60@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}icon60@3x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}icon76.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}icon76@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}icon83.5@2x.png)
+
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/Default-568h@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage568@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage568@3x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage667@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage667@3x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage736@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage736@3x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1024@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1024@3x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1112@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1112@3x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1366@2x.png)
+ LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1366@3x.png)
LIST(APPEND IOS_RESOURCES ${RCC})
SET_SOURCE_FILES_PROPERTIES(${RCC} PROPERTIES GENERATED TRUE)
ENDIF()
-SET(MAIN_CPP "main.cpp")
FILE(GLOB MAIN_FILES *.cpp)
IF(ANDROID)
ADD_LIBRARY(AusweisApp SHARED ${MAIN_FILES} ${QM_FILES})
ELSEIF(IOS)
ADD_EXECUTABLE(AusweisApp MACOSX_BUNDLE ${MAIN_FILES} ${IOS_RESOURCES} ${QM_FILES})
ELSE()
- ADD_EXECUTABLE(AusweisApp WIN32 ${MAIN_FILES} ${WINDOWS_RC} ${QM_FILES})
- IF(WIN32)
- SET_PROPERTY(SOURCE ${WINDOWS_RC} APPEND_STRING PROPERTY COMPILE_FLAGS " -DVERSION_MAJOR=${PROJECT_VERSION_MAJOR} -DVERSION_MINOR=${PROJECT_VERSION_MINOR} -DVERSION_PATCH=${PROJECT_VERSION_PATCH} -DVERSION_TWEAK=${PROJECT_VERSION_TWEAK}")
- ENDIF()
+ ADD_EXECUTABLE(AusweisApp WIN32 ${MAIN_FILES} windows.rc ${QM_FILES})
ENDIF()
ADD_DEPENDENCIES(AusweisApp AusweisAppRcc)
+CONFIGURE_CONFIG_H()
-ADD_STRING_DEFINITION("${VENDOR}" "VENDOR" ${MAIN_CPP})
-IF(VENDOR_GOVERNIKUS)
- ADD_STRING_DEFINITION("governikus.com" "VENDOR_DOMAIN" ${MAIN_CPP})
-ENDIF()
-
-
-IF(VERSION_DVCS)
- ADD_STRING_DEFINITION(${VERSION_DVCS} "VERSION" ${MAIN_CPP} ${WINDOWS_RC})
-ELSE()
- ADD_STRING_DEFINITION(${PROJECT_VERSION} "VERSION" ${MAIN_CPP} ${WINDOWS_RC})
-ENDIF()
-
-TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCard AusweisAppCore AusweisAppGlobal AusweisAppExternalHttpParser AusweisAppNetwork AusweisAppActivation AusweisAppActivationInternal)
+TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCard AusweisAppCore AusweisAppGlobal AusweisAppNetwork AusweisAppActivation AusweisAppActivationInternal)
SET_TARGET_PROPERTIES(AusweisApp PROPERTIES OUTPUT_NAME "${EXECUTABLE_BASE_NAME}")
SET_TARGET_PROPERTIES(AusweisApp PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME AusweisApp2)
SET_TARGET_PROPERTIES(AusweisApp PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER com.governikus.ausweisapp2)
@@ -129,43 +154,56 @@ SET_TARGET_PROPERTIES(AusweisApp PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER com.gov
IF(IOS)
+ TARGET_LINK_LIBRARIES(AusweisApp OpenSSL::SSL) # remove this if iOS uses shared libraries
TARGET_LINK_LIBRARIES(AusweisApp -L${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks)
TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/plugins/platforms)
TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/plugins/imageformats)
TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/lib)
- TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick.2)
- TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Dialogs)
- TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Layouts)
- TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Window.2)
- TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQml/Models.2)
- TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQml/StateMachine)
- TARGET_LINK_LIBRARIES(AusweisApp -lQt5Network -lQt5Gui -lQt5Core -lQt5Bluetooth -lQt5Svg -lQt5Quick -lQt5Qml)
- TARGET_LINK_LIBRARIES(AusweisApp -lqtlibpng -lQt5GraphicsSupport -lQt5FontDatabaseSupport -lQt5ClipboardSupport)
- TARGET_LINK_LIBRARIES(AusweisApp -lqios -lqsvg -lqtpcre -lqtfreetype -lqtquick2plugin -ldialogplugin -lqquicklayoutsplugin -lmodelsplugin -lwindowplugin -lqtqmlstatemachine)
+ TARGET_LINK_LIBRARIES(AusweisApp -lQt5Network -lQt5Gui -lQt5Core -lQt5Bluetooth -lQt5Svg -lQt5Quick -lQt5Qml -lQt5QuickTemplates2 -lQt5QuickControls2)
+ TARGET_LINK_LIBRARIES(AusweisApp -lqtpcre2 -lqtlibpng -lQt5GraphicsSupport -lQt5FontDatabaseSupport -lQt5ClipboardSupport -lqios -lqsvg -lqjpeg -lqtfreetype)
TARGET_LINK_LIBRARIES(AusweisApp "-lc++ -lz -lm -u _qt_registerPlatformPlugin")
TARGET_LINK_LIBRARIES(AusweisApp ${IOS_ASSETSLIBRARY} ${IOS_UIKIT} ${IOS_COREBLUETOOTH} ${IOS_COREFOUNDATION} ${IOS_OPENGLES} ${IOS_FOUNDATION} ${IOS_QUARTZCORE} ${IOS_CORETEXT} ${IOS_COREGRAPHICS} ${IOS_SECURITY} ${IOS_SYSTEMCONFIGURATION} ${IOS_MOBILECORESERVICES} ${IOS_AUDIOTOOLBOX})
TARGET_LINK_LIBRARIES(AusweisApp -Wl,-e,_qt_main_wrapper)
- TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtGraphicalEffects/private)
- TARGET_LINK_LIBRARIES(AusweisApp -lqtgraphicaleffectsprivate)
- TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtGraphicalEffects)
- TARGET_LINK_LIBRARIES(AusweisApp -lqtgraphicaleffectsplugin)
+ # Do not delete the comments to avoid searching for the path/filename
- #TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Templates.2)
- #TARGET_LINK_LIBRARIES(AusweisApp -lqtquicktemplates2plugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQml/Models.2 -lmodelsplugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQml/StateMachine -lqtqmlstatemachine)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtGraphicalEffects/private -lqtgraphicaleffectsprivate)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtGraphicalEffects -lqtgraphicaleffectsplugin)
- #TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Controls.2)
- #TARGET_LINK_LIBRARIES(AusweisApp -lqtquickcontrols2plugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Controls -lqtquickcontrolsplugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Controls/Styles/Flat -lqtquickextrasflatplugin)
- #TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Controls/Styles/Flat)
- #TARGET_LINK_LIBRARIES(AusweisApp -lqtquickextrasflatplugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Controls.2 -lqtquickcontrols2plugin)
+# TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Controls.2/Material -lqtquickcontrols2materialstyleplugin)
+# TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Controls.2/Universal -lqtquickcontrols2universalstyleplugin)
+
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Dialogs -ldialogplugin)
+# TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Dialogs/Private -ldialogsprivateplugin)
+
+# TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Extras -lqtquickextrasplugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Layouts -lqquicklayoutsplugin)
+# TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/LocalStorage -lqmllocalstorageplugin)
+# TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Particles.2 -lparticlesplugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Templates.2 -lqtquicktemplates2plugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick/Window.2 -lwindowplugin)
+ TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/qml/QtQuick.2 -lqtquick2plugin)
SET_TARGET_PROPERTIES(AusweisApp PROPERTIES RESOURCE "${IOS_RESOURCES}")
+ SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_ARCHS "arm64")
SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2")
- SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "8.0")
+ SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "10.0")
SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
+ IF(USE_DISTRIBUTION_PROFILE)
+ SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "iOS Release (Distribution)")
+ SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Distribution: Governikus GmbH & Co. KG (G7EQCJU4BR)")
+ ELSE()
+ SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "iOS Development")
+ SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer: Marco von der Puetten (46ZK7WV8QR)")
+ ENDIF()
# prevent xcode to convert multiple png files to tiff
SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_COMBINE_HIDPI_IMAGES "NO")
@@ -181,27 +219,34 @@ IF(ANDROID)
TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCardNfc AusweisAppActivationIntent)
ENDIF()
-IF(ANDROID OR IOS OR (LINUX AND CMAKE_BUILD_TYPE STREQUAL "DEBUG"))
+IF(ANDROID OR IOS)
TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCardBluetooth)
+ELSEIF(LINUX)
+ TARGET_LINK_LIBRARIES(AusweisApp debug AusweisAppCardBluetooth)
ENDIF()
IF(WIN32)
TARGET_LINK_LIBRARIES(AusweisApp ${WIN_DEFAULT_LIBS})
ENDIF()
-IF(IOS OR ANDROID OR WINDOWS_STORE OR ${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
+IF(IOS OR ANDROID OR WINDOWS_STORE)
TARGET_LINK_LIBRARIES(AusweisApp AusweisAppQml)
TARGET_LINK_LIBRARIES(AusweisApp AusweisAppAidl)
+ELSE()
+ TARGET_LINK_LIBRARIES(AusweisApp debug AusweisAppQml)
+ TARGET_LINK_LIBRARIES(AusweisApp debug AusweisAppAidl)
ENDIF()
+
IF(DESKTOP)
TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCardPcsc AusweisAppCardDrivers AusweisAppActivationWebservice)
TARGET_LINK_LIBRARIES(AusweisApp AusweisAppWidget AusweisAppCli)
ENDIF()
-IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
- TARGET_LINK_LIBRARIES(AusweisApp AusweisAppWebSocket)
-ENDIF()
+TARGET_LINK_LIBRARIES(AusweisApp debug AusweisAppWebSocket)
+IF(NOT WINDOWS_STORE)
+ TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCardRemote)
+ENDIF()
INCLUDE(Install)
diff --git a/src/CommandLineParser.cpp b/src/CommandLineParser.cpp
index cc97dae..ea2de87 100644
--- a/src/CommandLineParser.cpp
+++ b/src/CommandLineParser.cpp
@@ -1,10 +1,9 @@
/*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "CommandLineParser.h"
-#include "LanguageLoader.h"
#include "LogHandler.h"
#include "NetworkManager.h"
#include "SingletonHelper.h"
@@ -35,16 +34,20 @@ Q_DECLARE_LOGGING_CATEGORY(cmdline)
namespace
{
-static QString prefixUi = QStringLiteral("UIPlugIn");
+QString getPrefixUi()
+{
+ return QStringLiteral("UIPlugIn");
+}
+
QString defaultUi(const QVector& pPlugins)
{
QStringList list;
for (auto entry : pPlugins)
{
- list << QString(getEnumName(entry)).remove(prefixUi);
+ list << QString(getEnumName(entry)).remove(getPrefixUi());
}
- return list.join(',');
+ return list.join(QLatin1Char(','));
}
@@ -52,14 +55,13 @@ QString defaultUi(const QVector& pPlugins)
CommandLineParser::CommandLineParser()
: mParser()
- , mOptionKeepLog("keep", "Keep log file.")
- , mOptionShowWindow("show", "Show window on startup.")
- , mOptionProxy("no-proxy", "Disable system proxy.")
- , mOptionLanguage("language", "Force UI language.", LanguageLoader::getDefaultLanguage().uiLanguages().join(','))
- , mOptionUi("ui", "Use given UI plugin.", defaultUi(UILoader::getInstance().getDefault()))
- , mOptionPort("port", "Use listening port.", "24727")
+ , mOptionKeepLog(QStringLiteral("keep"), QStringLiteral("Keep log file."))
+ , mOptionShowWindow(QStringLiteral("show"), QStringLiteral("Show window on startup."))
+ , mOptionProxy(QStringLiteral("no-proxy"), QStringLiteral("Disable system proxy."))
+ , mOptionUi(QStringLiteral("ui"), QStringLiteral("Use given UI plugin."), defaultUi(UILoader::getInstance().getDefault()))
+ , mOptionPort(QStringLiteral("port"), QStringLiteral("Use listening port."), QStringLiteral("24727"))
#ifndef QT_NO_DEBUG
- , mOptionPortWebSocket("port-websocket", "Use listening port for websocket.", QString::number(UIPlugInWebSocket::WEBSOCKET_DEFAULT_PORT))
+ , mOptionPortWebSocket(QStringLiteral("port-websocket"), QStringLiteral("Use listening port for websocket."), QString::number(UIPlugInWebSocket::WEBSOCKET_DEFAULT_PORT))
#endif
{
addOptions();
@@ -89,7 +91,6 @@ void CommandLineParser::addOptions()
#endif
mParser.addOption(mOptionProxy);
- mParser.addOption(mOptionLanguage);
mParser.addOption(mOptionUi);
mParser.addOption(mOptionPort);
@@ -127,20 +128,6 @@ void CommandLineParser::parse(QCoreApplication* pApp)
NetworkManager::lockProxy(true);
}
- if (mParser.isSet(mOptionLanguage))
- {
- const auto& language = mParser.value(mOptionLanguage);
- const auto& locale = QLocale(language);
- if (locale == QLocale::C)
- {
- qCWarning(cmdline) << "Cannot detect language:" << language;
- }
- else
- {
- LanguageLoader::setDefaultLanguage(locale);
- }
- }
-
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
if (mParser.isSet(mOptionPort))
{
@@ -187,7 +174,7 @@ void CommandLineParser::parseUiPlugin()
{
for (auto availablePluginEntry : availablePlugins)
{
- if (parsedUiOption.compare(QString(getEnumName(availablePluginEntry)).remove(prefixUi), Qt::CaseInsensitive) == 0)
+ if (parsedUiOption.compare(QString(getEnumName(availablePluginEntry)).remove(getPrefixUi()), Qt::CaseInsensitive) == 0)
{
selectedPlugins << availablePluginEntry;
}
diff --git a/src/CommandLineParser.h b/src/CommandLineParser.h
index 3801d91..70d2420 100644
--- a/src/CommandLineParser.h
+++ b/src/CommandLineParser.h
@@ -1,7 +1,7 @@
/*
* \brief Provides and parses command line options.
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -19,7 +19,6 @@ class CommandLineParser
const QCommandLineOption mOptionKeepLog;
const QCommandLineOption mOptionShowWindow;
const QCommandLineOption mOptionProxy;
- const QCommandLineOption mOptionLanguage;
const QCommandLineOption mOptionUi;
const QCommandLineOption mOptionPort;
#ifndef QT_NO_DEBUG
diff --git a/src/MetaTypeRegister.cpp b/src/MetaTypeRegister.cpp
deleted file mode 100644
index a3fd421..0000000
--- a/src/MetaTypeRegister.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
- * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG
- */
-
-#include "MetaTypeRegister.h"
-
-#include "DatagramHandler.h"
-#include "ReaderManagerWorker.h"
-
-#include "command/BaseCardCommand.h"
-#include "command/CreateCardConnectionCommand.h"
-
-#if (defined(Q_OS_LINUX) && !defined(QT_NO_DEBUG)) || defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
- #include "messages/BluetoothMessage.h"
-#endif
-
-#if defined(Q_OS_IOS)
-#include
-#include
-#include
-#endif
-
-namespace governikus
-{
-
-namespace MetaTypes
-{
-void registerMetaTypes()
-{
- DatagramHandler::registerMetaTypes();
- ReaderManagerWorker::registerMetaTypes();
-
- BaseCardCommand::registerMetaTypes();
- CreateCardConnectionCommand::registerMetaTypes();
-
-#if defined(Q_OS_IOS)
- // Used in card/bluetooth/BluetoothReaderManagerPlugin_p_ios
- // TODO: These types should be registered by Qt but apparently they are not.
- qRegisterMetaType("QBluetoothDeviceInfo");
- qRegisterMetaType("QLowEnergyCharacteristic");
- qRegisterMetaType("QLowEnergyDescriptor");
-#endif
-
-#if (defined(Q_OS_LINUX) && !defined(QT_NO_DEBUG)) || defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
- BluetoothMessage::registerMetaTypes();
-#endif
-}
-
-
-}
-}
diff --git a/src/MetaTypeRegister.h b/src/MetaTypeRegister.h
deleted file mode 100644
index edea70e..0000000
--- a/src/MetaTypeRegister.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*!
- * \brief Function to register all meta types to be used with Qt.
- *
- * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG
- */
-
-
-#pragma once
-
-namespace governikus
-{
-namespace MetaTypes
-{
-void registerMetaTypes();
-}
-}
diff --git a/src/activation/base/ActivationContext.cpp b/src/activation/base/ActivationContext.cpp
index fa26be4..97ddcb2 100644
--- a/src/activation/base/ActivationContext.cpp
+++ b/src/activation/base/ActivationContext.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#include "ActivationContext.h"
diff --git a/src/activation/base/ActivationContext.h b/src/activation/base/ActivationContext.h
index 4a80f7f..840cd8f 100644
--- a/src/activation/base/ActivationContext.h
+++ b/src/activation/base/ActivationContext.h
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
diff --git a/src/activation/base/ActivationHandler.cpp b/src/activation/base/ActivationHandler.cpp
index 81d2493..c27db25 100644
--- a/src/activation/base/ActivationHandler.cpp
+++ b/src/activation/base/ActivationHandler.cpp
@@ -1,26 +1,26 @@
/*!
- * ActivationHandler.cpp
- *
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "ActivationHandler.h"
-#include "MetaTypeHelper.h"
+#include "ActivationContext.h"
+#include "Initializer.h"
#include
#include
#include
#include
-REGISTER_META_TYPE(StatusFormat)
-REGISTER_META_TYPE(UiModule)
-
-
using namespace governikus;
Q_DECLARE_LOGGING_CATEGORY(activation)
+static Initializer::Entry X([] {
+ qRegisterMetaType("UiModule");
+ qRegisterMetaType >("QSharedPointer");
+ });
+
ActivationHandler::ActivationHandler()
{
diff --git a/src/activation/base/ActivationHandler.h b/src/activation/base/ActivationHandler.h
index 5774069..4d6f537 100644
--- a/src/activation/base/ActivationHandler.h
+++ b/src/activation/base/ActivationHandler.h
@@ -1,12 +1,9 @@
/*!
- * ActivationHandler.h
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
-#include "ActivationContext.h"
#include "EnumHelper.h"
#include
@@ -15,12 +12,15 @@
namespace governikus
{
+class ActivationContext;
+
/*!
* UI modules that can be requested to show.
*/
defineEnumType(UiModule,
CURRENT,
DEFAULT,
+ IDENTIFY,
SETTINGS,
PINMANAGEMENT
)
@@ -83,7 +83,7 @@ class ActivationHandler
Q_SIGNALS:
void fireShowUserInformation(const QString& pErrorMessage = QString());
void fireShowUiRequest(UiModule pModule);
- void fireAuthenticationRequest(ActivationContext* pActivationContext);
+ void fireAuthenticationRequest(const QSharedPointer& pActivationContext);
};
} /* namespace governikus */
diff --git a/src/activation/customscheme/CustomSchemeActivationContext.cpp b/src/activation/customscheme/CustomSchemeActivationContext.cpp
index 3e2b343..db3ea5b 100644
--- a/src/activation/customscheme/CustomSchemeActivationContext.cpp
+++ b/src/activation/customscheme/CustomSchemeActivationContext.cpp
@@ -1,7 +1,5 @@
/*!
- * CustomSchemeActivationContext.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "CustomSchemeActivationContext.h"
@@ -55,18 +53,15 @@ bool CustomSchemeActivationContext::sendProcessing()
bool CustomSchemeActivationContext::sendOperationAlreadyActive()
{
- // probably we emit a signal, that will be caught by the AppController
- // so that then UI can display some message or so?
+ Q_EMIT fireShowUserInformation(GlobalStatus(GlobalStatus::Code::Workflow_AlreadyInProgress_Error).toErrorDescription());
return true;
}
-bool CustomSchemeActivationContext::sendErrorPage(HttpStatusCode pStatusCode, const GlobalStatus& pStatus)
+bool CustomSchemeActivationContext::sendErrorPage(HttpStatusCode, const GlobalStatus&)
{
- Q_UNUSED(pStatusCode);
- Q_UNUSED(pStatus);
- // probably we emit a signal, that will be caught by the AppController
- // so that then UI can display some message or so?
+ // The error is displayed in the application,
+ // so here is nothing to be done in this case.
return true;
}
diff --git a/src/activation/customscheme/CustomSchemeActivationContext.h b/src/activation/customscheme/CustomSchemeActivationContext.h
index 5f4a57d..eb3ff00 100644
--- a/src/activation/customscheme/CustomSchemeActivationContext.h
+++ b/src/activation/customscheme/CustomSchemeActivationContext.h
@@ -1,7 +1,5 @@
/*!
- * CustomSchemeActivationContext.h
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -30,6 +28,9 @@ class CustomSchemeActivationContext
bool sendOperationAlreadyActive() override;
bool sendErrorPage(HttpStatusCode pStatusCode, const GlobalStatus& pStatus) override;
bool sendRedirect(const QUrl& pRedirectAddress, const GlobalStatus& pResult) override;
+
+ Q_SIGNALS:
+ void fireShowUserInformation(const QString& pMessage);
};
} /* namespace governikus */
diff --git a/src/activation/customscheme/CustomSchemeActivationHandler.cpp b/src/activation/customscheme/CustomSchemeActivationHandler.cpp
index 4474f51..8e4a803 100644
--- a/src/activation/customscheme/CustomSchemeActivationHandler.cpp
+++ b/src/activation/customscheme/CustomSchemeActivationHandler.cpp
@@ -1,7 +1,5 @@
/*!
- * CustomSchemeActivationHandler.cpp
- *
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "CustomSchemeActivationHandler.h"
@@ -43,30 +41,16 @@ void CustomSchemeActivationHandler::onCustomUrl(const QUrl& pUrl)
qCDebug(activation) << "Got new request";
qCDebug(activation) << "Request URL:" << pUrl;
- if (pUrl.port() != 24727 || (pUrl.host() != QLatin1String("127.0.0.1") && pUrl.host() != QLatin1String("localhost")))
+ if (pUrl.port() != 24727 ||
+ (pUrl.host() != QLatin1String("127.0.0.1") && pUrl.host() != QLatin1String("localhost")) ||
+ (pUrl.path() != QLatin1String("/eID-Client")))
{
qCWarning(activation) << "Request type: unknown";
return;
}
- if (pUrl.path() == QLatin1String("/eID-Client"))
- {
- const auto urlParameter = getQueryParameter(pUrl);
-
- if (urlParameter.contains(QStringLiteral("showui")))
- {
- qCDebug(activation) << "Request type: showui";
- UiModule module = Enum::fromString(urlParameter.value(QStringLiteral("showui")).toUpper(), UiModule::DEFAULT);
- Q_EMIT fireShowUiRequest(module);
- return;
- }
- else if (urlParameter.contains(QStringLiteral("tctokenurl")))
- {
- qCDebug(activation) << "Request type: authentication";
- Q_EMIT fireAuthenticationRequest(new CustomSchemeActivationContext(pUrl));
- return;
- }
- }
-
- qCWarning(activation) << "Request type: unknown";
+ qCDebug(activation) << "Request type: authentication";
+ QSharedPointer context(new CustomSchemeActivationContext(pUrl));
+ connect(context.data(), &CustomSchemeActivationContext::fireShowUserInformation, this, &ActivationHandler::fireShowUserInformation);
+ Q_EMIT fireAuthenticationRequest(context);
}
diff --git a/src/activation/customscheme/CustomSchemeActivationHandler.h b/src/activation/customscheme/CustomSchemeActivationHandler.h
index b1b22f1..10e35dd 100644
--- a/src/activation/customscheme/CustomSchemeActivationHandler.h
+++ b/src/activation/customscheme/CustomSchemeActivationHandler.h
@@ -1,7 +1,5 @@
/*!
- * CustomSchemeActivationHandler.h
- *
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -23,7 +21,7 @@ class CustomSchemeActivationHandler
Q_PLUGIN_METADATA(IID "governikus.ActivationHandler" FILE "metadata.json")
Q_INTERFACES(governikus::ActivationHandler)
- private:
+ private Q_SLOTS:
void onCustomUrl(const QUrl& pUrl);
public:
diff --git a/src/activation/intent/AusweisApp2Service.java b/src/activation/intent/AusweisApp2Service.java
index fa85509..7c0f890 100644
--- a/src/activation/intent/AusweisApp2Service.java
+++ b/src/activation/intent/AusweisApp2Service.java
@@ -1,3 +1,7 @@
+/*
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
+ */
+
package com.governikus.ausweisapp2;
import android.content.Intent;
@@ -26,12 +30,6 @@ public class AusweisApp2Service
}
- public NFCConnector getNfcConnector()
- {
- return NFCConnector.getInstance(this);
- }
-
-
@Override
public IBinder onBind(Intent intent)
{
@@ -56,7 +54,6 @@ public class AusweisApp2Service
// register the broadcast receiver after loading the C++ library in super.onCreate()
AndroidBluetoothReceiver.register(this);
- NfcAdapterStateChangeReceiver.register(this);
}
@@ -67,7 +64,6 @@ public class AusweisApp2Service
// unregister the broadcast receiver before unloading the C++ library in super.onDestroy()
AndroidBluetoothReceiver.unregister(this);
- NfcAdapterStateChangeReceiver.unregister(this);
super.onDestroy();
diff --git a/src/activation/intent/IntentActivationContext.cpp b/src/activation/intent/IntentActivationContext.cpp
index 3b058df..2d76325 100644
--- a/src/activation/intent/IntentActivationContext.cpp
+++ b/src/activation/intent/IntentActivationContext.cpp
@@ -1,9 +1,10 @@
/*!
- * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG, Germany
*/
#include "IntentActivationContext.h"
+#include "GlobalStatus.h"
#include "UrlUtil.h"
#include
@@ -52,9 +53,7 @@ bool IntentActivationContext::sendProcessing()
bool IntentActivationContext::sendOperationAlreadyActive()
{
- // TODO: handle this
- // probably we emit a signal, that will be caught by the AppController
- // so that then UI can display some message or so?
+ Q_EMIT fireShowUserInformation(GlobalStatus(GlobalStatus::Code::Workflow_AlreadyInProgress_Error).toErrorDescription());
return true;
}
diff --git a/src/activation/intent/IntentActivationContext.h b/src/activation/intent/IntentActivationContext.h
index a7aca5d..a5c4108 100644
--- a/src/activation/intent/IntentActivationContext.h
+++ b/src/activation/intent/IntentActivationContext.h
@@ -2,7 +2,7 @@
* \brief Implementation of ActivationContext for Intent
* based activation on Android systems.
*
- * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -16,12 +16,14 @@ namespace governikus
class IntentActivationContext
: public ActivationContext
{
+ Q_OBJECT
+
const QUrl mActivationUrl;
QUrl mRedirectAddress;
public:
IntentActivationContext(const QUrl& pActivationUrl);
- virtual ~IntentActivationContext();
+ virtual ~IntentActivationContext() override;
QUrl getActivationURL() const override;
@@ -29,6 +31,9 @@ class IntentActivationContext
bool sendOperationAlreadyActive() override;
bool sendErrorPage(HttpStatusCode pStatusCode, const GlobalStatus& pStatus) override;
bool sendRedirect(const QUrl& pRedirectAddress, const GlobalStatus& pResult) override;
+
+ Q_SIGNALS:
+ void fireShowUserInformation(const QString& pMessage);
};
} /* namespace governikus */
diff --git a/src/activation/intent/IntentActivationHandler.cpp b/src/activation/intent/IntentActivationHandler.cpp
index e043ee5..b63feb8 100644
--- a/src/activation/intent/IntentActivationHandler.cpp
+++ b/src/activation/intent/IntentActivationHandler.cpp
@@ -1,7 +1,5 @@
/*!
- * IntentActivationHandler.cpp
- *
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
#include "IntentActivationHandler.h"
@@ -45,7 +43,9 @@ void IntentActivationHandler::onIntent(const QUrl& pUrl)
{
qCDebug(activation) << "Got new authentication request";
qCDebug(activation) << "Request URL:" << pUrl;
- Q_EMIT fireAuthenticationRequest(new IntentActivationContext(pUrl));
+ QSharedPointer context(new IntentActivationContext(pUrl));
+ connect(context.data(), &IntentActivationContext::fireShowUserInformation, this, &ActivationHandler::fireShowUserInformation);
+ Q_EMIT fireAuthenticationRequest(context);
}
diff --git a/src/activation/intent/IntentActivationHandler.h b/src/activation/intent/IntentActivationHandler.h
index 4c9f8e0..9d38f4f 100644
--- a/src/activation/intent/IntentActivationHandler.h
+++ b/src/activation/intent/IntentActivationHandler.h
@@ -1,7 +1,5 @@
/*!
- * IntentActivationHandler.h
- *
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
diff --git a/src/activation/intent/MainActivity.java b/src/activation/intent/MainActivity.java
index 94c06fb..5f629b4 100644
--- a/src/activation/intent/MainActivity.java
+++ b/src/activation/intent/MainActivity.java
@@ -1,3 +1,7 @@
+/*
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
+ */
+
package com.governikus.ausweisapp2;
import android.app.Activity;
@@ -12,6 +16,10 @@ import android.nfc.tech.IsoDep;
import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
+import android.view.Window;
+import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
+
import org.qtproject.qt5.android.bindings.QtActivity;
@@ -84,12 +92,6 @@ public class MainActivity extends QtActivity
}
- public NFCConnector getNfcConnector()
- {
- return NFCConnector.getInstance(this);
- }
-
-
@Override
public void onCreate(Bundle savedInstanceState)
{
@@ -99,11 +101,8 @@ public class MainActivity extends QtActivity
// register the broadcast receiver after loading the C++ library in super.onCreate()
AndroidBluetoothReceiver.register(this);
- NfcAdapterStateChangeReceiver.register(this);
mNfcForegroundDispatcher = new NfcForegroundDispatcher(this);
- Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
- getNfcConnector().updateNfcTag(tag);
setRequestedOrientation(isTablet() ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
@@ -115,9 +114,6 @@ public class MainActivity extends QtActivity
Log.d(TAG, "onNewIntent (subsequent invocation of application): " + newIntent);
super.onNewIntent(newIntent);
- Tag tag = newIntent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- getNfcConnector().updateNfcTag(tag);
-
triggerActivation(newIntent.getDataString());
}
@@ -145,12 +141,25 @@ public class MainActivity extends QtActivity
// unregister the broadcast receiver before unloading the C++ library in super.onDestroy()
AndroidBluetoothReceiver.unregister(this);
- NfcAdapterStateChangeReceiver.unregister(this);
super.onDestroy();
}
+ public void keepScreenOn(boolean pActivate)
+ {
+ Log.d(TAG, "Keep screen on: " + pActivate);
+ if (pActivate)
+ {
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ }
+ else
+ {
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ }
+ }
+
+
// required by UIPlugInQml::getPlatformSelectors()
public boolean isTablet()
{
diff --git a/src/activation/internal/InternalActivationContext.cpp b/src/activation/internal/InternalActivationContext.cpp
index 8f14792..7afbd05 100644
--- a/src/activation/internal/InternalActivationContext.cpp
+++ b/src/activation/internal/InternalActivationContext.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#include "InternalActivationContext.h"
diff --git a/src/activation/internal/InternalActivationContext.h b/src/activation/internal/InternalActivationContext.h
index ba313e8..f8c3864 100644
--- a/src/activation/internal/InternalActivationContext.h
+++ b/src/activation/internal/InternalActivationContext.h
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -19,7 +19,7 @@ class InternalActivationContext
public:
InternalActivationContext(const QUrl& pUrl);
- virtual ~InternalActivationContext();
+ virtual ~InternalActivationContext() override;
QUrl getActivationURL() const override;
bool sendProcessing() override;
diff --git a/src/activation/internal/InternalActivationHandler.cpp b/src/activation/internal/InternalActivationHandler.cpp
index ba15254..728d9bf 100644
--- a/src/activation/internal/InternalActivationHandler.cpp
+++ b/src/activation/internal/InternalActivationHandler.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#include "InternalActivationHandler.h"
@@ -26,7 +26,7 @@ void InternalActivationHandler::stop()
}
-void InternalActivationHandler::runAuthentication(InternalActivationContext* pContext)
+void InternalActivationHandler::runAuthentication(const QSharedPointer& pContext)
{
Q_EMIT fireAuthenticationRequest(pContext);
}
diff --git a/src/activation/internal/InternalActivationHandler.h b/src/activation/internal/InternalActivationHandler.h
index cf36227..6eef314 100644
--- a/src/activation/internal/InternalActivationHandler.h
+++ b/src/activation/internal/InternalActivationHandler.h
@@ -1,7 +1,7 @@
/*!
* \brief ActivationHandler for Internal usage like JSON API.
*
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -21,12 +21,12 @@ class InternalActivationHandler
public:
InternalActivationHandler();
- virtual ~InternalActivationHandler();
+ virtual ~InternalActivationHandler() override;
virtual bool start() override;
virtual void stop() override;
- void runAuthentication(InternalActivationContext* pContext);
+ void runAuthentication(const QSharedPointer& pContext);
};
} /* namespace governikus */
diff --git a/src/activation/webservice/Template.cpp b/src/activation/webservice/Template.cpp
index e22c746..c683b91 100644
--- a/src/activation/webservice/Template.cpp
+++ b/src/activation/webservice/Template.cpp
@@ -1,7 +1,5 @@
/*!
- * Template.cpp
- *
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#include "Template.h"
diff --git a/src/activation/webservice/Template.h b/src/activation/webservice/Template.h
index 61e7daa..ccc5f27 100644
--- a/src/activation/webservice/Template.h
+++ b/src/activation/webservice/Template.h
@@ -1,9 +1,7 @@
/*!
- * Template.h
- *
* A simple template renderer.
*
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
diff --git a/src/activation/webservice/WebserviceActivationContext.cpp b/src/activation/webservice/WebserviceActivationContext.cpp
index 2cb5760..54abad9 100644
--- a/src/activation/webservice/WebserviceActivationContext.cpp
+++ b/src/activation/webservice/WebserviceActivationContext.cpp
@@ -1,7 +1,5 @@
/*!
- * WebserviceActivationContext.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "WebserviceActivationContext.h"
diff --git a/src/activation/webservice/WebserviceActivationContext.h b/src/activation/webservice/WebserviceActivationContext.h
index ca5a264..1378cde 100644
--- a/src/activation/webservice/WebserviceActivationContext.h
+++ b/src/activation/webservice/WebserviceActivationContext.h
@@ -1,7 +1,5 @@
/*!
- * WebserviceActivationContext.h
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -26,7 +24,7 @@ class WebserviceActivationContext
public:
WebserviceActivationContext(const QSharedPointer& pRequest);
- virtual ~WebserviceActivationContext();
+ virtual ~WebserviceActivationContext() override;
QUrl getActivationURL() const override;
diff --git a/src/activation/webservice/WebserviceActivationHandler.cpp b/src/activation/webservice/WebserviceActivationHandler.cpp
index ce0f304..77639ce 100644
--- a/src/activation/webservice/WebserviceActivationHandler.cpp
+++ b/src/activation/webservice/WebserviceActivationHandler.cpp
@@ -1,12 +1,10 @@
/*!
- * WebserviceActivationHandler.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "WebserviceActivationHandler.h"
-#include "EnvHolder.h"
+#include "Env.h"
#include "HttpServerStatusParser.h"
#include "Template.h"
#include "VersionInfo.h"
@@ -42,7 +40,7 @@ void WebserviceActivationHandler::stop()
bool WebserviceActivationHandler::start()
{
- mServer = EnvHolder::shared();
+ mServer = Env::getShared();
if (mServer->isListening())
{
@@ -58,7 +56,7 @@ bool WebserviceActivationHandler::start()
{
qCDebug(activation) << "We are already started... calling ShowUI";
HttpServerRequestor requestor;
- if (requestor.request(HttpServerRequestor::createUrl("ShowUI=" + UiModule::CURRENT, port)).isNull())
+ if (requestor.request(HttpServerRequestor::createUrl(QStringLiteral("ShowUI=") + UiModule::CURRENT, port)).isNull())
{
qCWarning(activation) << "ShowUI request timed out";
}
@@ -101,7 +99,7 @@ void WebserviceActivationHandler::onNewRequest(const QSharedPointer
else if (urlParameter.contains(QLatin1String("tctokenurl")))
{
qCDebug(activation) << "Request type: authentication";
- Q_EMIT fireAuthenticationRequest(new WebserviceActivationContext(pRequest));
+ Q_EMIT fireAuthenticationRequest(QSharedPointer::create(pRequest));
return;
}
}
@@ -143,7 +141,7 @@ void WebserviceActivationHandler::handleShowUiRequest(UiModule pUiModule, const
QString userAgent = QString::fromLatin1(pRequest->getHeader(QByteArrayLiteral("user-agent")));
if (userAgent.startsWith(QCoreApplication::applicationName()))
{
- QString version = userAgent.remove(QCoreApplication::applicationName() + '/').split(' ').at(0);
+ QString version = userAgent.remove(QCoreApplication::applicationName() + QLatin1Char('/')).split(QLatin1Char(' ')).at(0);
VersionNumber callerVersion(version);
if (callerVersion > VersionNumber::getApplicationVersion())
diff --git a/src/activation/webservice/WebserviceActivationHandler.h b/src/activation/webservice/WebserviceActivationHandler.h
index 1f47dc5..e60fc02 100644
--- a/src/activation/webservice/WebserviceActivationHandler.h
+++ b/src/activation/webservice/WebserviceActivationHandler.h
@@ -1,7 +1,5 @@
/*!
- * WebserviceActivationHandler.h
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -41,7 +39,7 @@ class WebserviceActivationHandler
public:
WebserviceActivationHandler();
- virtual ~WebserviceActivationHandler();
+ virtual ~WebserviceActivationHandler() override;
virtual bool start() override;
virtual void stop() override;
diff --git a/src/aidl/AidlBinder.java b/src/aidl/AidlBinder.java
index cb29d26..4fc0c03 100644
--- a/src/aidl/AidlBinder.java
+++ b/src/aidl/AidlBinder.java
@@ -1,5 +1,11 @@
+/*
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
+ */
+
package com.governikus.ausweisapp2;
+import android.content.Intent;
+import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.os.DeadObjectException;
import android.os.IBinder;
@@ -9,6 +15,8 @@ import java.lang.Throwable;
import java.util.HashMap;
import java.util.Map;
+import org.qtproject.qt5.android.QtNative;
+
class AidlBinder extends IAusweisApp2Sdk.Stub
{
public final static String LOG_TAG = AusweisApp2Service.LOG_TAG;
@@ -124,12 +132,17 @@ class AidlBinder extends IAusweisApp2Sdk.Stub
public synchronized boolean updateNfcTag(String pSessionId, Tag pTag)
{
+ Log.d(LOG_TAG, "Android service: Received nfc tag from client");
+
if (!isValidSessionId(mCallbackSessionId))
{
return false;
}
- mService.getNfcConnector().updateNfcTag(pTag);
+ Intent newIntent = new Intent();
+ newIntent.putExtra(NfcAdapter.EXTRA_TAG, pTag);
+ QtNative.onNewIntent(newIntent);
+
return true;
}
diff --git a/src/aidl/PskManager.cpp b/src/aidl/PskManager.cpp
index d694fb2..3a79b4e 100644
--- a/src/aidl/PskManager.cpp
+++ b/src/aidl/PskManager.cpp
@@ -1,7 +1,5 @@
/*!
- * PskManager.cpp
- *
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#include "PskManager.h"
diff --git a/src/aidl/PskManager.h b/src/aidl/PskManager.h
index 59b389a..fa41296 100644
--- a/src/aidl/PskManager.h
+++ b/src/aidl/PskManager.h
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
diff --git a/src/aidl/UIPlugInAidl.cpp b/src/aidl/UIPlugInAidl.cpp
index dc78f93..3f6eaf6 100644
--- a/src/aidl/UIPlugInAidl.cpp
+++ b/src/aidl/UIPlugInAidl.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#include "UIPlugInAidl.h"
diff --git a/src/aidl/UIPlugInAidl.h b/src/aidl/UIPlugInAidl.h
index 137246b..2139b0f 100644
--- a/src/aidl/UIPlugInAidl.h
+++ b/src/aidl/UIPlugInAidl.h
@@ -1,7 +1,7 @@
/*!
* \brief UIPlugIn implementation of the AIDL UI.
*
- * \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2016-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -32,7 +32,7 @@ class UIPlugInAidl
public:
UIPlugInAidl();
- virtual ~UIPlugInAidl();
+ virtual ~UIPlugInAidl() override;
static UIPlugInAidl* getInstance(bool pBlock = true);
bool isSuccessfullInitialized();
diff --git a/src/card/CMakeLists.txt b/src/card/CMakeLists.txt
index d8ffa35..2719ab3 100644
--- a/src/card/CMakeLists.txt
+++ b/src/card/CMakeLists.txt
@@ -2,10 +2,9 @@ ADD_SUBDIRECTORY(base)
IF(DESKTOP)
ADD_SUBDIRECTORY(pcsc)
- ADD_SUBDIRECTORY(drivers)
ENDIF()
-IF(ANDROID)
+IF(TARGET Qt5::Nfc)
ADD_SUBDIRECTORY(nfc)
ENDIF()
@@ -13,4 +12,5 @@ IF(LINUX OR ANDROID OR IOS)
ADD_SUBDIRECTORY(bluetooth)
ENDIF()
+ADD_SUBDIRECTORY(drivers)
ADD_SUBDIRECTORY(remote)
diff --git a/src/card/base/Apdu.cpp b/src/card/base/Apdu.cpp
index a94b869..6c4ae43 100644
--- a/src/card/base/Apdu.cpp
+++ b/src/card/base/Apdu.cpp
@@ -1,12 +1,14 @@
/*!
- * Apdu.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "Apdu.h"
+
+#include "Commands.h"
+
#include
+
using namespace governikus;
@@ -36,8 +38,9 @@ const QByteArray& Apdu::getBuffer() const
}
-CommandApdu::CommandApdu(const QByteArray& pBuffer)
+CommandApdu::CommandApdu(const QByteArray& pBuffer, bool pUpdateRetryCounter)
: Apdu(pBuffer)
+ , mUpdateRetryCounter(pUpdateRetryCounter)
{
}
@@ -48,7 +51,7 @@ bool CommandApdu::isExtendedLength() const
// no data, short le: size == 5
// no data, extended le: size == 7, high order le byte == 0
// data, with/without le: high order size byte == 0 <=> extended data length
- return length() > 5 && mBuffer.at(4) == char(0x00);
+ return length() > 5 && mBuffer.at(4) == '\0';
}
@@ -72,6 +75,7 @@ CommandApdu::CommandApdu(const QByteArray& pHeader, const QByteArray& pData, int
CommandApdu::CommandApdu(char pCla, char pIns, char pP1, char pP2, const QByteArray& pData, int pLe)
: Apdu(QByteArray())
+ , mUpdateRetryCounter(false)
{
if (pData.size() > EXTENDED_MAX_LC)
{
@@ -96,7 +100,7 @@ CommandApdu::CommandApdu(char pCla, char pIns, char pP1, char pP2, const QByteAr
{
if (CommandApdu::isExtendedLength(pData, pLe))
{
- mBuffer += char(0x00);
+ mBuffer += '\0';
mBuffer += static_cast(pData.size() >> 8 & 0xff);
mBuffer += static_cast(pData.size() & 0xff);
}
@@ -114,7 +118,7 @@ CommandApdu::CommandApdu(char pCla, char pIns, char pP1, char pP2, const QByteAr
{
if (pData.isEmpty())
{
- mBuffer += char(0x00);
+ mBuffer += '\0';
}
mBuffer += static_cast(pLe >> 8 & 0xff);
}
@@ -130,25 +134,25 @@ CommandApdu::~CommandApdu()
char CommandApdu::getCLA() const
{
- return length() > 0 ? mBuffer.at(0) : 0;
+ return length() > 0 ? mBuffer.at(0) : '\0';
}
char CommandApdu::getINS() const
{
- return length() > 1 ? mBuffer.at(1) : 0;
+ return length() > 1 ? mBuffer.at(1) : '\0';
}
char CommandApdu::getP1() const
{
- return length() > 2 ? mBuffer.at(2) : 0;
+ return length() > 2 ? mBuffer.at(2) : '\0';
}
char CommandApdu::getP2() const
{
- return mBuffer.size() > 3 ? mBuffer.at(3) : 0;
+ return mBuffer.size() > 3 ? mBuffer.at(3) : '\0';
}
@@ -223,6 +227,12 @@ QByteArray CommandApdu::getData() const
}
+bool CommandApdu::isUpdateRetryCounter() const
+{
+ return mUpdateRetryCounter;
+}
+
+
ResponseApdu::ResponseApdu(const QByteArray& pBuffer)
: Apdu(pBuffer)
{
@@ -242,7 +252,7 @@ void ResponseApdu::setBuffer(const QByteArray& pBuffer)
QByteArray ResponseApdu::getData() const
{
- if (length() < 2)
+ if (length() < RETURN_CODE_LENGTH)
{
return QByteArray();
}
@@ -253,27 +263,59 @@ QByteArray ResponseApdu::getData() const
int ResponseApdu::getDataLength() const
{
- return length() - 2;
+ return length() - RETURN_CODE_LENGTH;
}
StatusCode ResponseApdu::getReturnCode() const
{
- // avoid "undefined-behavior" with explicit "uint" variable
- const uint sw1 = static_cast(getSW1());
- const uchar sw2 = static_cast(getSW2());
- return StatusCode((sw1 << 8) + sw2);
+ if (mBuffer.isEmpty())
+ {
+ return StatusCode::EMPTY;
+ }
+
+ const int returnCodeAsInt = getReturnCodeAsHex().toInt(nullptr, 16);
+ return Enum::isValue(returnCodeAsInt) ? StatusCode(returnCodeAsInt) : StatusCode::INVALID;
}
-char ResponseApdu::getSW1() const
+QByteArray ResponseApdu::getReturnCodeAsHex() const
{
- if (length() < 2)
+ return mBuffer.right(RETURN_CODE_LENGTH).toHex();
+}
+
+
+int ResponseApdu::getRetryCounter() const
+{
+ StatusCode statusCode = getReturnCode();
+ if (statusCode == StatusCode::SUCCESS)
+ {
+ return 3;
+ }
+ if (statusCode == StatusCode::PIN_RETRY_COUNT_2)
+ {
+ return 2;
+ }
+ if (statusCode == StatusCode::PIN_SUSPENDED)
+ {
+ return 1;
+ }
+ if (statusCode == StatusCode::PIN_BLOCKED || statusCode == StatusCode::PIN_DEACTIVATED)
{
- qCCritical(card) << "Buffer too short, returning 0";
return 0;
}
- return mBuffer.at(length() - 2);
+ return -1;
+}
+
+
+SW1 ResponseApdu::getSW1() const
+{
+ if (length() < RETURN_CODE_LENGTH)
+ {
+ qCCritical(card) << "Buffer too short, returning 0";
+ return SW1::INVALID;
+ }
+ return SW1(mBuffer.at(length() - RETURN_CODE_LENGTH));
}
diff --git a/src/card/base/Apdu.h b/src/card/base/Apdu.h
index ee7885f..f78bbc9 100644
--- a/src/card/base/Apdu.h
+++ b/src/card/base/Apdu.h
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -10,7 +10,9 @@
namespace governikus
{
-defineEnumType(StatusCode,
+defineTypedEnumType(StatusCode, quint16,
+ EMPTY = 0x0000,
+ INVALID = 0x0001,
SUCCESS = 0x9000,
NO_PKCS15_APP = 0x6200,
END_OF_FILE = 0x6282,
@@ -57,7 +59,10 @@ defineEnumType(StatusCode,
* As defined in ISO-7816-4 Table-5
*/
defineEnumType(SW1,
+ INVALID = 0x00,
+ MORE_DATA_AVAILABLE = 0x61,
ERROR_COMMAND_NOT_ALLOWED = 0x69,
+ WRONG_LE_FIELD = 0x6c,
)
class Apdu
@@ -85,10 +90,12 @@ class CommandApdu
: public Apdu
{
private:
+ bool mUpdateRetryCounter;
+
inline bool isExtendedLength() const;
public:
- CommandApdu(const QByteArray& pBuffer);
+ CommandApdu(const QByteArray& pBuffer, bool pUpdateRetryCounter = false);
CommandApdu(const QByteArray& pHeader, const QByteArray& pData, int pLe);
CommandApdu(char pCla, char pIns, char pP1, char pP2, const QByteArray& pData = QByteArray(), int pLe = NO_LE);
virtual ~CommandApdu();
@@ -100,6 +107,7 @@ class CommandApdu
int getLc() const;
int getLe() const;
QByteArray getData() const;
+ bool isUpdateRetryCounter() const;
static bool isExtendedLength(const QByteArray& pData, int pLe);
static bool isSecureMessaging(const QByteArray& pCommandBuffer);
@@ -109,6 +117,9 @@ class ResponseApdu
: public Apdu
{
+ private:
+ static const int RETURN_CODE_LENGTH = 2;
+
public:
ResponseApdu(const QByteArray& pBuffer = QByteArray());
virtual ~ResponseApdu();
@@ -117,7 +128,9 @@ class ResponseApdu
QByteArray getData() const;
int getDataLength() const;
StatusCode getReturnCode() const;
- char getSW1() const;
+ QByteArray getReturnCodeAsHex() const;
+ int getRetryCounter() const;
+ SW1 getSW1() const;
char getSW2() const;
};
diff --git a/src/card/base/CMakeLists.txt b/src/card/base/CMakeLists.txt
index 5213ab6..018eec7 100644
--- a/src/card/base/CMakeLists.txt
+++ b/src/card/base/CMakeLists.txt
@@ -1,4 +1,3 @@
ADD_PLATFORM_LIBRARY(AusweisAppCard)
-TARGET_INCLUDE_DIRECTORIES(AusweisAppCard SYSTEM PUBLIC ${OPENSSL_INCLUDE_DIR})
-TARGET_LINK_LIBRARIES(AusweisAppCard Qt5::Core AusweisAppGlobal ${OPENSSL_LIBRARIES})
+TARGET_LINK_LIBRARIES(AusweisAppCard Qt5::Core OpenSSL::Crypto AusweisAppGlobal AusweisAppConfiguration AusweisAppCardDrivers)
diff --git a/src/card/base/Card.cpp b/src/card/base/Card.cpp
index b8ef63e..51abf04 100644
--- a/src/card/base/Card.cpp
+++ b/src/card/base/Card.cpp
@@ -1,8 +1,7 @@
/*!
- * Card.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
+
#include "Card.h"
#include
@@ -22,9 +21,9 @@ Card::~Card()
}
-CardReturnCode Card::establishPaceChannel(PACE_PIN_ID pPinId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPACEChannelOutput& pChannelOutput, quint8 pTimeoutSeconds)
+CardReturnCode Card::establishPaceChannel(PACE_PASSWORD_ID pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPACEChannelOutput& pChannelOutput, quint8 pTimeoutSeconds)
{
- Q_UNUSED(pPinId);
+ Q_UNUSED(pPasswordId);
Q_UNUSED(pChat);
Q_UNUSED(pCertificateDescription);
Q_UNUSED(pChannelOutput);
diff --git a/src/card/base/Card.h b/src/card/base/Card.h
index 479fa24..352c5be 100644
--- a/src/card/base/Card.h
+++ b/src/card/base/Card.h
@@ -1,9 +1,7 @@
/*!
- * Card.h
- *
* \brief Class representing a smart card
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -55,7 +53,7 @@ class Card
/*!
* Establishes a PACE channel, i.e. the corresponding reader is no basic reader.
*/
- virtual CardReturnCode establishPaceChannel(PACE_PIN_ID pPinId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPACEChannelOutput& pChannelOutput, quint8 pTimeoutSeconds = 60);
+ virtual CardReturnCode establishPaceChannel(PACE_PASSWORD_ID pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPACEChannelOutput& pChannelOutput, quint8 pTimeoutSeconds = 60);
/*!
* Destroys an existing PACE channel, i.e. the corresponding reader is no basic reader.
diff --git a/src/card/base/CardConnection.cpp b/src/card/base/CardConnection.cpp
index 092cd65..13b4ac1 100644
--- a/src/card/base/CardConnection.cpp
+++ b/src/card/base/CardConnection.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "CardConnection.h"
@@ -29,6 +29,14 @@ const ReaderInfo& CardConnection::getReaderInfo()
}
+bool CardConnection::stopSecureMessaging()
+{
+ bool result;
+ QMetaObject::invokeMethod(mCardConnectionWorker.data(), "stopSecureMessaging", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result));
+ return result;
+}
+
+
UpdateRetryCounterCommand* CardConnection::createUpdateRetryCounterCommand()
{
return new UpdateRetryCounterCommand(mCardConnectionWorker);
@@ -41,9 +49,9 @@ UnblockPinCommand* CardConnection::createUnblockPinCommand(const QString& pPuk)
}
-EstablishPaceChannelCommand* CardConnection::createEstablishPaceChannelCommand(PACE_PIN_ID pPacePinId, const QString& pPacePin, const QByteArray& pEffectiveChat, const QByteArray& pCertificateDescription)
+EstablishPaceChannelCommand* CardConnection::createEstablishPaceChannelCommand(PACE_PASSWORD_ID pPacePasswordId, const QString& pPacePassword, const QByteArray& pEffectiveChat, const QByteArray& pCertificateDescription)
{
- return new EstablishPaceChannelCommand(mCardConnectionWorker, pPacePinId, pPacePin, pEffectiveChat, pCertificateDescription);
+ return new EstablishPaceChannelCommand(mCardConnectionWorker, pPacePasswordId, pPacePassword, pEffectiveChat, pCertificateDescription);
}
@@ -77,7 +85,7 @@ DidAuthenticateEAC2Command* CardConnection::createDidAuthenticateEAC2Command(
void CardConnection::onReaderInfoChanged(const ReaderInfo& pReaderInfo)
{
mReaderInfo = pReaderInfo;
- Q_EMIT fireReaderInfoChanged();
+ Q_EMIT fireReaderInfoChanged(mReaderInfo);
}
diff --git a/src/card/base/CardConnection.h b/src/card/base/CardConnection.h
index e3d8ef5..73c3ea5 100644
--- a/src/card/base/CardConnection.h
+++ b/src/card/base/CardConnection.h
@@ -1,9 +1,7 @@
/*!
- * CardConnection.h
- *
* \brief Contains a card connection object
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -52,7 +50,7 @@ class CardConnection
UpdateRetryCounterCommand* createUpdateRetryCounterCommand();
UnblockPinCommand* createUnblockPinCommand(const QString& pPuk);
- EstablishPaceChannelCommand* createEstablishPaceChannelCommand(PACE_PIN_ID pPacePinId, const QString& pPacePin, const QByteArray& pEffectiveChat, const QByteArray& pCertificateDescription);
+ EstablishPaceChannelCommand* createEstablishPaceChannelCommand(PACE_PASSWORD_ID pPacePasswordId, const QString& pPacePassword, const QByteArray& pEffectiveChat, const QByteArray& pCertificateDescription);
SetEidPinCommand* createSetEidPinCommand(const QString& pNewPin, quint8 pTimeoutSeconds);
DestroyPaceChannelCommand* createDestroyPaceChannelCommand();
@@ -102,6 +100,7 @@ class CardConnection
*/
const ReaderInfo& getReaderInfo();
+ bool stopSecureMessaging();
template
QMetaObject::Connection callDidAuthenticateEAC1Command(const typename QtPrivate::FunctionPointer::Object* pReceiver, T pFunc)
@@ -134,9 +133,9 @@ class CardConnection
template
QMetaObject::Connection callEstablishPaceChannelCommand(const typename QtPrivate::FunctionPointer::Object* pReceiver, T pFunc,
- PACE_PIN_ID pPacePinId, const QString& pPacePin, const QByteArray& pEffectiveChat = QByteArray(), const QByteArray& pCertificateDescription = QByteArray())
+ PACE_PASSWORD_ID pPacePasswordId, const QString& pPacePassword, const QByteArray& pEffectiveChat = QByteArray(), const QByteArray& pCertificateDescription = QByteArray())
{
- auto command = createEstablishPaceChannelCommand(pPacePinId, pPacePin, pEffectiveChat, pCertificateDescription);
+ EstablishPaceChannelCommand* command = createEstablishPaceChannelCommand(pPacePasswordId, pPacePassword, pEffectiveChat, pCertificateDescription);
return call(command, pReceiver, pFunc);
}
@@ -177,7 +176,7 @@ class CardConnection
Q_SIGNALS:
- void fireReaderInfoChanged();
+ void fireReaderInfoChanged(const ReaderInfo& pReaderInfo);
};
} /* namespace governikus */
diff --git a/src/card/base/CardConnectionWorker.cpp b/src/card/base/CardConnectionWorker.cpp
index 3a06905..a5c3f82 100644
--- a/src/card/base/CardConnectionWorker.cpp
+++ b/src/card/base/CardConnectionWorker.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "CardConnectionWorker.h"
@@ -18,7 +18,6 @@ CardConnectionWorker::CardConnectionWorker(Reader* pReader)
, mReader(pReader)
, mSecureMessaging()
{
- connect(this, &CardConnectionWorker::fireRetryCounterPotentiallyChanged, mReader.data(), &Reader::onRetryCounterPotentiallyChanged);
connect(mReader, &Reader::fireCardInserted, this, &CardConnectionWorker::onReaderInfoChanged);
connect(mReader, &Reader::fireCardRemoved, this, &CardConnectionWorker::onReaderInfoChanged);
connect(mReader, &Reader::fireCardRetryCounterChanged, this, &CardConnectionWorker::onReaderInfoChanged);
@@ -78,18 +77,30 @@ CardReturnCode CardConnectionWorker::transmit(const CommandApdu& pCommandApdu, R
return CardReturnCode::CARD_NOT_FOUND;
}
+ CardReturnCode returnCode;
+
if (mSecureMessaging)
{
CommandApdu securedCommandApdu = mSecureMessaging->encrypt(pCommandApdu);
ResponseApdu securedResponseApdu;
- CardReturnCode returnCode = mReader->getCard()->transmit(securedCommandApdu, securedResponseApdu);
+ returnCode = mReader->getCard()->transmit(securedCommandApdu, securedResponseApdu);
if (!mSecureMessaging->decrypt(securedResponseApdu, pResponseApdu))
{
return CardReturnCode::COMMAND_FAILED;
}
- return returnCode;
}
- return mReader->getCard()->transmit(pCommandApdu, pResponseApdu);
+ else
+ {
+ returnCode = mReader->getCard()->transmit(pCommandApdu, pResponseApdu);
+ }
+
+ if (pCommandApdu.isUpdateRetryCounter())
+ {
+ int retryCounter = pResponseApdu.getRetryCounter();
+ mReader->setRetryCounter(retryCounter);
+ }
+
+ return returnCode;
}
@@ -145,16 +156,16 @@ bool CardConnectionWorker::stopSecureMessaging()
}
-CardReturnCode CardConnectionWorker::establishPaceChannel(PACE_PIN_ID pPinId,
- const QString& pPinValue,
+CardReturnCode CardConnectionWorker::establishPaceChannel(PACE_PASSWORD_ID pPasswordId,
+ const QString& pPasswordValue,
EstablishPACEChannelOutput& pChannelOutput)
{
- return establishPaceChannel(pPinId, pPinValue, nullptr, nullptr, pChannelOutput);
+ return establishPaceChannel(pPasswordId, pPasswordValue, nullptr, nullptr, pChannelOutput);
}
-CardReturnCode CardConnectionWorker::establishPaceChannel(PACE_PIN_ID pPinId,
- const QString& pPinValue,
+CardReturnCode CardConnectionWorker::establishPaceChannel(PACE_PASSWORD_ID pPasswordId,
+ const QString& pPasswordValue,
const QByteArray& pChat,
const QByteArray& pCertificateDescription,
EstablishPACEChannelOutput& pChannelOutput)
@@ -165,13 +176,15 @@ CardReturnCode CardConnectionWorker::establishPaceChannel(PACE_PIN_ID pPinId,
}
CardReturnCode returnCode;
- qCInfo(support) << "Starting PACE for" << pPinId;
+ qCInfo(support) << "Starting PACE for" << pPasswordId;
if (mReader->getReaderInfo().isBasicReader())
{
- Q_ASSERT(!pPinValue.isEmpty());
+ Q_ASSERT(!pPasswordValue.isEmpty());
PaceHandler paceHandler(sharedFromThis());
paceHandler.setChat(pChat);
- returnCode = paceHandler.establishPaceChannel(pPinId, pPinValue);
+ returnCode = paceHandler.establishPaceChannel(pPasswordId, pPasswordValue);
+ pChannelOutput.setPaceReturnCode(returnCode);
+ pChannelOutput.setStatusMseSetAt(paceHandler.getStatusMseSetAt());
if (returnCode == CardReturnCode::OK)
{
@@ -185,12 +198,12 @@ CardReturnCode CardConnectionWorker::establishPaceChannel(PACE_PIN_ID pPinId,
}
else
{
- Q_ASSERT(pPinValue.isNull());
- returnCode = mReader->getCard()->establishPaceChannel(pPinId, pChat, pCertificateDescription, pChannelOutput);
+ Q_ASSERT(pPasswordValue.isNull());
+ returnCode = mReader->getCard()->establishPaceChannel(pPasswordId, pChat, pCertificateDescription, pChannelOutput);
+ pChannelOutput.setPaceReturnCode(returnCode);
}
- Q_EMIT fireRetryCounterPotentiallyChanged();
- qCInfo(support) << "Finished PACE for" << pPinId << "with result" << returnCode;
+ qCInfo(support) << "Finished PACE for" << pPasswordId << "with result" << returnCode;
return returnCode;
}
@@ -208,7 +221,9 @@ CardReturnCode CardConnectionWorker::destroyPaceChannel()
stopSecureMessaging();
MSEBuilder builder(MSEBuilder::P1::ERASE, MSEBuilder::P2::DEFAULT_CHANNEL);
ResponseApdu response;
- return mReader->getCard()->transmit(builder.build(), response);
+ CardReturnCode cardReturnCode = mReader->getCard()->transmit(builder.build(), response);
+ qCDebug(card) << "Destroying PACE channel with invalid command causing 6700 as return code";
+ return cardReturnCode;
}
else
{
diff --git a/src/card/base/CardConnectionWorker.h b/src/card/base/CardConnectionWorker.h
index 06f9cc3..21eeeb3 100644
--- a/src/card/base/CardConnectionWorker.h
+++ b/src/card/base/CardConnectionWorker.h
@@ -1,7 +1,7 @@
/*!
* \brief Worker for \ref CardConnection that will do the job in \ref ReaderManagerWorker
*
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -77,8 +77,8 @@ class CardConnectionWorker
* If the Reader is a basic reader and the PACE channel is successfully established, the subsequent transmits will be secured using, secure messaging.
* I. e., a secure messaging channel is established.
*/
- virtual CardReturnCode establishPaceChannel(PACE_PIN_ID pPinId,
- const QString& pPinValue,
+ virtual CardReturnCode establishPaceChannel(PACE_PASSWORD_ID pPasswordId,
+ const QString& pPasswordValue,
EstablishPACEChannelOutput& pChannelOutput);
/*!
@@ -86,8 +86,8 @@ class CardConnectionWorker
* If the Reader is a basic reader and the PACE channel is successfully established, the subsequent transmits will be secured using, secure messaging.
* I. e., a secure messaging channel is established.
*/
- virtual CardReturnCode establishPaceChannel(PACE_PIN_ID pPinId,
- const QString& pPinValue,
+ virtual CardReturnCode establishPaceChannel(PACE_PASSWORD_ID pPasswordId,
+ const QString& pPasswordValue,
const QByteArray& pChat,
const QByteArray& pCertificateDescription,
EstablishPACEChannelOutput& pChannelOutput);
@@ -100,12 +100,11 @@ class CardConnectionWorker
/*!
* Destroys an established secure messaging channel, if there is one.
*/
- virtual bool stopSecureMessaging();
+ Q_INVOKABLE virtual bool stopSecureMessaging();
virtual CardReturnCode setEidPin(const QString& pNewPin, quint8 pTimeoutSeconds);
Q_SIGNALS:
- void fireRetryCounterPotentiallyChanged();
void fireReaderInfoChanged(const ReaderInfo& pReaderInfo);
};
diff --git a/src/card/base/CardInfo.cpp b/src/card/base/CardInfo.cpp
index dd76db6..211ed94 100644
--- a/src/card/base/CardInfo.cpp
+++ b/src/card/base/CardInfo.cpp
@@ -1,15 +1,14 @@
/*!
- * CardInfo.cpp
- *
* \brief CardInfo holds smart card information, such as the type and some contained data structure (currently only the EF.CardAccess).
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
+#include "CardInfo.h"
+
#include "asn1/PACEInfo.h"
#include "asn1/SecurityInfos.h"
#include "CardConnectionWorker.h"
-#include "CardInfo.h"
#include
#include
@@ -21,7 +20,11 @@ Q_DECLARE_LOGGING_CATEGORY(card)
using namespace governikus;
-CardInfo::CardInfo(CardType pCardType, QSharedPointer pEfCardAccess, int pRetryCounter, bool pPinDeactivated, bool pPukInoperative)
+
+const int CardInfo::UNDEFINED_RETRY_COUNTER = -1;
+
+
+CardInfo::CardInfo(CardType pCardType, const QSharedPointer& pEfCardAccess, int pRetryCounter, bool pPinDeactivated, bool pPukInoperative)
: mCardType(pCardType)
, mEfCardAccess(pEfCardAccess)
, mRetryCounter(pRetryCounter)
@@ -31,9 +34,33 @@ CardInfo::CardInfo(CardType pCardType, QSharedPointer pEfCar
}
-CardType CardInfo::getCardType() const
+QString CardInfo::getCardTypeString() const
{
- return mCardType;
+ switch (mCardType)
+ {
+ case CardType::NONE:
+ return tr("not inserted", "Karte");
+
+ case CardType::UNKNOWN:
+ return tr("unknown type", "Karte");
+
+ case CardType::EID_CARD:
+ return tr("ID card (PA/eAT)");
+ }
+
+ Q_UNREACHABLE();
+}
+
+
+bool CardInfo::isAvailable() const
+{
+ return mCardType != CardType::NONE;
+}
+
+
+bool CardInfo::isEid() const
+{
+ return mCardType == CardType::EID_CARD;
}
@@ -55,6 +82,12 @@ int CardInfo::getRetryCounter() const
}
+bool CardInfo::isRetryCounterDetermined() const
+{
+ return mRetryCounter != UNDEFINED_RETRY_COUNTER;
+}
+
+
bool CardInfo::isPinDeactivated() const
{
return mPinDeactivated;
@@ -194,3 +227,22 @@ bool CardInfoFactory::checkEfCardAccess(const QSharedPointer& pEfC
return true;
}
+
+
+namespace governikus
+{
+
+
+QDebug operator<<(QDebug pDbg, const CardInfo& pCardInfo)
+{
+ QDebugStateSaver saver(pDbg);
+ pDbg.nospace() << "{Type: " << pCardInfo.mCardType
+ << ", Retry counter: " << pCardInfo.mRetryCounter
+ << ", Pin deactivated: " << pCardInfo.mPinDeactivated << "}";
+ // Skipping mEfCardAccess since there is no pretty formating available.
+
+ return pDbg;
+}
+
+
+}
diff --git a/src/card/base/CardInfo.h b/src/card/base/CardInfo.h
index 30fbbb3..16a7439 100644
--- a/src/card/base/CardInfo.h
+++ b/src/card/base/CardInfo.h
@@ -1,9 +1,7 @@
/*!
- * CardInfo.h
- *
* \brief Contains the CardInfo and the CardInfoFactory
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -11,6 +9,7 @@
#include "asn1/SecurityInfos.h"
#include "SmartCardDefinitions.h"
+#include
#include
namespace governikus
@@ -27,17 +26,25 @@ class ReaderInfo;
*/
class CardInfo
{
- CardType mCardType;
- QSharedPointer mEfCardAccess;
- int mRetryCounter;
- bool mPinDeactivated;
- bool mPukInoperative;
+ Q_DECLARE_TR_FUNCTIONS(governikus::CardInfo)
+
+ private:
+ CardType mCardType;
+ QSharedPointer mEfCardAccess;
+ int mRetryCounter;
+ bool mPinDeactivated;
+ bool mPukInoperative;
+ static const int UNDEFINED_RETRY_COUNTER;
+
+ friend QDebug operator<<(QDebug, const CardInfo&);
public:
- CardInfo(CardType pCardType, QSharedPointer = QSharedPointer(),
- int pRetryCounter = -1, bool pPinDeactivated = false, bool pPukInoperative = false);
+ CardInfo(CardType pCardType, const QSharedPointer& = QSharedPointer(),
+ int pRetryCounter = UNDEFINED_RETRY_COUNTER, bool pPinDeactivated = false, bool pPukInoperative = false);
- CardType getCardType() const;
+ QString getCardTypeString() const;
+ bool isAvailable() const;
+ bool isEid() const;
QSharedPointer getEfCardAccess() const;
@@ -45,6 +52,8 @@ class CardInfo
int getRetryCounter() const;
+ bool isRetryCounterDetermined() const;
+
/*!
* The online identification function has not been activated by the competent authority.
*/
@@ -90,4 +99,7 @@ class CardInfoFactory
};
+QDebug operator<<(QDebug pDbg, const CardInfo& pCardInfo);
+
+
} /* namespace governikus */
diff --git a/src/card/base/CardOperationResult.h b/src/card/base/CardOperationResult.h
new file mode 100644
index 0000000..0077572
--- /dev/null
+++ b/src/card/base/CardOperationResult.h
@@ -0,0 +1,42 @@
+/*!
+ * \brief Generic class representing the result of a card operation, or an error.
+ *
+ * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG, Germany
+ */
+
+#pragma once
+
+#include "CardReturnCode.h"
+
+namespace governikus
+{
+template
+class CardOperationResult
+{
+ private:
+ const CardReturnCode mReturnCode;
+ const T mPayload;
+
+ public:
+ CardOperationResult(const CardReturnCode& pReturnCode, const T& pPayload)
+ : mReturnCode(pReturnCode)
+ , mPayload(pPayload)
+ {
+ }
+
+
+ const CardReturnCode& getReturnCode() const
+ {
+ return mReturnCode;
+ }
+
+
+ const T& getPayload() const
+ {
+ return mPayload;
+ }
+
+
+};
+
+} /* namespace governikus */
diff --git a/src/card/base/Commands.cpp b/src/card/base/Commands.cpp
index fc083be..a5a900e 100644
--- a/src/card/base/Commands.cpp
+++ b/src/card/base/Commands.cpp
@@ -1,7 +1,5 @@
/*!
- * Commands.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "Commands.h"
@@ -92,6 +90,33 @@ QByteArray GetChallengeResponse::getChallenge() const
/*
* MSEBuilder
*/
+bool MSEBuilder::isUpdateRetryCounterCommand(const QByteArray& cmd)
+{
+ if (cmd.size() < 4)
+ {
+ return false;
+ }
+
+ if (cmd.at(0) != CommandApdu::CLA)
+ {
+ return false;
+ }
+ if (cmd.at(1) != static_cast(MSEBuilder::INS::MANAGE_SECURITY_ENVIRONMENT))
+ {
+ return false;
+ }
+ if (cmd.at(2) != static_cast(MSEBuilder::P1::PERFORM_SECURITY_OPERATION))
+ {
+ return false;
+ }
+ if (cmd.at(3) != static_cast(MSEBuilder::P2::SET_AT))
+ {
+ return false;
+ }
+
+ return true;
+}
+
MSEBuilder::MSEBuilder(P1 p1, P2 p2)
: CommandApduBuilder()
@@ -127,11 +152,11 @@ void MSEBuilder::setPublicKey(const QByteArray& pData)
}
-void MSEBuilder::setPublicKey(PACE_PIN_ID pPin)
+void MSEBuilder::setPublicKey(PACE_PASSWORD_ID pPasswordId)
{
static const char TAG_PUBLIC_KEY = char(0x83);
QByteArray data;
- data += Enum::getValue(pPin);
+ data += Enum::getValue(pPasswordId);
mPublicKey = Asn1Util::encode(TAG_PUBLIC_KEY, data);
}
@@ -158,8 +183,6 @@ void MSEBuilder::setChat(const QByteArray& pData)
CommandApdu MSEBuilder::build()
{
- static const char INS = 0x22;
-
QByteArray data;
data += mOid;
data += mPublicKey;
@@ -168,7 +191,7 @@ CommandApdu MSEBuilder::build()
data += mEphemeralPublicKey;
data += mChat;
- return CommandApdu(CommandApdu::CLA, INS, static_cast(mP1), static_cast(mP2), data);
+ return CommandApdu(CommandApdu::CLA, static_cast(MSEBuilder::INS::MANAGE_SECURITY_ENVIRONMENT), static_cast(mP1), static_cast(mP2), data);
}
@@ -328,7 +351,7 @@ CommandApdu ResetRetryCounterBuilder::build()
{
static const char INS = 0x2c;
// P1: 2 (change), 3 (unblock)
- char p1 = mPin.isNull() ? 3 : 2;
+ const char p1 = mPin.isNull() ? char(3) : char(2);
// P2: 3 (PIN) (2 (CAN) -- not used)
// data: new PIN, when changing
return CommandApdu(CommandApdu::CLA, INS, p1, 3, mPin);
@@ -355,13 +378,13 @@ QByteArray PinModifyBuilder::createCommandData(quint8 pTimeoutSeconds, char pMsg
// bmFormatString (PIN format): system unit is bytes (0x80), ASCII format (0x02)
command += char(0x82);
// bmPINBlockString (PIN block size and length info): PIN not in APDU command
- command += char(0x00);
+ command += '\0';
// bmPINLengthFormat (format of PIN length field in APDU command): PIN not in APDU command
- command += char(0x00);
+ command += '\0';
// bInsertionOffsetOld (insertion position offset for old PIN)
- command += char(0x00);
+ command += '\0';
// bInsertionOffsetNew BYTE (insertion position offset for new PIN)
- command += char(0x00);
+ command += '\0';
// wPINMaxExtraDigit USHORT (0xXXYY, min (XX) and max (length) of new PIN)
command += 0x06;
command += 0x06;
@@ -381,9 +404,9 @@ QByteArray PinModifyBuilder::createCommandData(quint8 pTimeoutSeconds, char pMsg
// bMsgIndex3 (index (into reader table) of third message to display)
command += pMsgIndex3;
// bTeoPrologue (T1 only: I-block prologue field to use): fill with 0
- command += char(0x00);
- command += char(0x00);
- command += char(0x00);
+ command += '\0';
+ command += '\0';
+ command += '\0';
if (pAbData.size() > 0xFF)
{
@@ -393,9 +416,9 @@ QByteArray PinModifyBuilder::createCommandData(quint8 pTimeoutSeconds, char pMsg
}
// ulDataLength (length of the APDU to be sent to ICC)
command += static_cast(pAbData.size());
- command += char(0x00);
- command += char(0x00);
- command += char(0x00);
+ command += '\0';
+ command += '\0';
+ command += '\0';
command += pAbData;
return command;
@@ -416,13 +439,13 @@ CommandApdu PinModifyBuilder::createCommandDataCcid(quint8 pTimeoutSeconds) cons
// bmFormatString (PIN format): system unit is bytes (0x80), ASCII format (0x02)
abPINDataStructure += char(0x82);
// bmPINBlockString (PIN block size and length info): PIN not in APDU command
- abPINDataStructure += char(0x00);
+ abPINDataStructure += '\0';
// bmPINLengthFormat (format of PIN length field in APDU command): PIN not in APDU command
- abPINDataStructure += char(0x00);
+ abPINDataStructure += '\0';
// bInsertionOffsetOld (insertion position offset for old PIN)
- abPINDataStructure += char(0x00);
+ abPINDataStructure += '\0';
// bInsertionOffsetNew BYTE (insertion position offset for new PIN)
- abPINDataStructure += char(0x00);
+ abPINDataStructure += '\0';
// wPINMaxExtraDigit USHORT (0xXXYY, min (XX) and max (length) of new PIN)
abPINDataStructure += char(0x06);
abPINDataStructure += char(0x06);
@@ -440,13 +463,13 @@ CommandApdu PinModifyBuilder::createCommandDataCcid(quint8 pTimeoutSeconds) cons
// bMsgIndex2 (index (into reader table) of second message to display)
abPINDataStructure += char(0x02);
// bMsgIndex3 (index (into reader table) of third message to display)
- abPINDataStructure += char(0x00);
+ abPINDataStructure += '\0';
// bTeoPrologue (T1 only: I-block prologue field to use): fill with 0
- abPINDataStructure += char(0x00);
- abPINDataStructure += char(0x00);
- abPINDataStructure += char(0x00);
+ abPINDataStructure += '\0';
+ abPINDataStructure += '\0';
+ abPINDataStructure += '\0';
// abData (APDU to be sent to ICC)
- abPINDataStructure += char(0x00); // CLA: command
+ abPINDataStructure += '\0'; // CLA: command
abPINDataStructure += char(0x2c); // INS: Reset Retry Counter
abPINDataStructure += char(0x02); // P1: new PIN/CAN
abPINDataStructure += char(0x03); // P2: PIN
diff --git a/src/card/base/Commands.h b/src/card/base/Commands.h
index 4a339bd..d02d425 100644
--- a/src/card/base/Commands.h
+++ b/src/card/base/Commands.h
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -10,31 +10,10 @@
#include "FileRef.h"
#include "SmartCardDefinitions.h"
-#include
-
namespace governikus
{
-// TODO: brauchen wir das wirklich?
-template QByteArray toBigEndian(T pDataToConvert)
-{
- uchar converted[sizeof(T)];
- qToBigEndian(pDataToConvert, converted);
-
- unsigned long position;
- for (position = 0; position < sizeof(T) - 1; ++position)
- {
- if (converted[position] != 0)
- {
- break;
- }
- }
-
- return QByteArray(reinterpret_cast(&converted[position]), static_cast(sizeof(T) - position));
-}
-
-
class CommandApduBuilder
{
private:
@@ -88,21 +67,28 @@ class MSEBuilder
: public CommandApduBuilder
{
public:
- enum class P1 : int
+ enum class INS : char
{
- COMPUTE_DIGITAL_SIGNATURE = 0x41, PUT_HASH = 0xa0, PERFORM_SECURITY_OPERATION = 0xc1, SET_DST = 0x81, ERASE = 0xF3,
+ MANAGE_SECURITY_ENVIRONMENT = 0x22,
};
- enum class P2 : int
+ enum class P1 : char
{
- SET_AT = 0xa4, HASH_ALGORITHM = 0xaa, COMPUTE_DIGITAL_SIGNATURE = 0xb6, ENCRYPTION_OPERATION = 0xb8, DEFAULT_CHANNEL = 0x00,
+ COMPUTE_DIGITAL_SIGNATURE = 0x41, PUT_HASH = char(0xa0), PERFORM_SECURITY_OPERATION = char(0xc1), SET_DST = char(0x81), ERASE = char(0xF4),
};
+ enum class P2 : char
+ {
+ SET_AT = char(0xa4), HASH_ALGORITHM = char(0xaa), COMPUTE_DIGITAL_SIGNATURE = char(0xb6), ENCRYPTION_OPERATION = char(0xb8), DEFAULT_CHANNEL = 0x01,
+ };
+
+ static bool isUpdateRetryCounterCommand(const QByteArray& cmd);
+
MSEBuilder(P1 p1, P2 p2);
void setAuxiliaryData(const QByteArray& pData);
void setOid(const QByteArray& pData);
void setPublicKey(const QByteArray& pData);
- void setPublicKey(PACE_PIN_ID pPin);
+ void setPublicKey(PACE_PASSWORD_ID pPassword);
void setPrivateKey(const QByteArray& pData);
void setEphemeralPublicKey(const QByteArray& pData);
void setChat(const QByteArray& pData);
diff --git a/src/card/base/DestroyPACEChannel.cpp b/src/card/base/DestroyPACEChannel.cpp
index e9ebdc8..ad0e936 100644
--- a/src/card/base/DestroyPACEChannel.cpp
+++ b/src/card/base/DestroyPACEChannel.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
#include "DestroyPACEChannel.h"
@@ -15,8 +15,8 @@ QByteArray DestroyPACEChannelBuilder::createCommandData()
QByteArray commandData;
commandData += INDEX_DESTROY_PACE_CHANNEL;
- commandData += char(0x00);
- commandData += char(0x00);
+ commandData += '\0';
+ commandData += '\0';
return commandData;
}
diff --git a/src/card/base/DestroyPACEChannel.h b/src/card/base/DestroyPACEChannel.h
index 4859b7d..45b4aa6 100644
--- a/src/card/base/DestroyPACEChannel.h
+++ b/src/card/base/DestroyPACEChannel.h
@@ -1,7 +1,7 @@
/*!
* \brief Data object for creation of card command DestroyPACEChannel
*
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
diff --git a/src/card/base/EstablishPACEChannel.cpp b/src/card/base/EstablishPACEChannel.cpp
index 789e160..4007490 100644
--- a/src/card/base/EstablishPACEChannel.cpp
+++ b/src/card/base/EstablishPACEChannel.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
#include "asn1/ASN1Util.h"
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
using namespace governikus;
@@ -17,6 +18,23 @@ using namespace governikus;
Q_DECLARE_LOGGING_CATEGORY(card)
+namespace
+{
+template QByteArray readByteArray(const QByteArray& pInput, int& pOffset)
+{
+ Q_ASSERT(sizeof(T) < INT_MAX);
+
+ T length = qFromLittleEndian(pInput.data() + pOffset);
+ pOffset += static_cast(sizeof(T));
+ QByteArray result = pInput.mid(pOffset, length);
+ pOffset += length;
+ return result;
+}
+
+
+}
+
+
namespace governikus
{
@@ -63,7 +81,7 @@ IMPLEMENT_ASN1_OBJECT(ESTABLISHPACECHANNELINPUT)
EstablishPACEChannelBuilder::EstablishPACEChannelBuilder()
- : mPinId(PACE_PIN_ID::PACE_MRZ)
+ : mPasswordId(PACE_PASSWORD_ID::PACE_MRZ)
, mChat(nullptr)
, mCertificateDescription()
{
@@ -82,9 +100,9 @@ void EstablishPACEChannelBuilder::setChat(const QByteArray& pChat)
}
-void EstablishPACEChannelBuilder::setPinId(PACE_PIN_ID pPinId)
+void EstablishPACEChannelBuilder::setPasswordId(PACE_PASSWORD_ID pPasswordId)
{
- mPinId = pPinId;
+ mPasswordId = pPasswordId;
}
@@ -94,7 +112,7 @@ QByteArray EstablishPACEChannelBuilder::createCommandData()
static const char INDEX_ESTABLISH_PACE_CHANNEL = 0x02;
QByteArray inputData;
- inputData += static_cast(mPinId);
+ inputData += static_cast(mPasswordId);
if (mChat.size() > 0xFF)
{
@@ -105,7 +123,7 @@ QByteArray EstablishPACEChannelBuilder::createCommandData()
inputData += static_cast(mChat.size());
inputData += mChat;
- inputData += char(0x00); // length of PIN
+ inputData += '\0'; // length of PIN
if (mCertificateDescription.size() > 0xFFFF)
{
@@ -137,7 +155,7 @@ CommandApdu EstablishPACEChannelBuilder::createCommandDataCcid()
{
auto channelInput = newObject();
- ASN1_INTEGER_set(channelInput->mPasswordID, static_cast(mPinId));
+ ASN1_INTEGER_set(channelInput->mPasswordID, static_cast(mPasswordId));
if (!mChat.isNull())
{
channelInput->mCHAT = ASN1_OCTET_STRING_new();
@@ -162,6 +180,7 @@ EstablishPACEChannelOutput::EstablishPACEChannelOutput()
, mCarCurr()
, mCarPrev()
, mIdIcc()
+ , mStatusMseSetAt()
{
}
@@ -210,6 +229,18 @@ void EstablishPACEChannelOutput::setCarPrev(const QByteArray& pCarPrev)
}
+QByteArray EstablishPACEChannelOutput::getMseStatusSetAt() const
+{
+ return mStatusMseSetAt;
+}
+
+
+void EstablishPACEChannelOutput::setStatusMseSetAt(const QByteArray& pStatusMseSetAt)
+{
+ mStatusMseSetAt = pStatusMseSetAt;
+}
+
+
void EstablishPACEChannelOutput::setEfCardAccess(const QByteArray& pEfCardAccess)
{
Q_ASSERT(mEfCardAccess.isNull());
@@ -230,41 +261,21 @@ void EstablishPACEChannelOutput::setPaceReturnCode(CardReturnCode pPaceReturnCod
}
-int EstablishPACEChannelOutput::parseUSHORT(const QByteArray& pData, int pOffset)
-{
- int len = static_cast(pData.at(pOffset));
- len += (static_cast(pData.at(pOffset + 1)) << 8);
- return len;
-}
-
-
-QByteArray EstablishPACEChannelOutput::reverse(const QByteArray& pArrayToReverse)
-{
- QByteArray reversed;
- for (int i = pArrayToReverse.size() - 1; i >= 0; i--)
- {
- reversed += (pArrayToReverse.at(i));
- }
- return reversed;
-}
-
-
-void EstablishPACEChannelOutput::parse(const QByteArray& pControlOutput, PACE_PIN_ID pPinId)
+void EstablishPACEChannelOutput::parse(const QByteArray& pControlOutput, PACE_PASSWORD_ID pPasswordId)
{
if (pControlOutput.size() < 6)
{
qCWarning(card) << "Output of EstablishPACEChannel has wrong size";
return;
}
- quint32 paceReturnCode;
- QDataStream(reverse(pControlOutput.mid(0, 4))) >> paceReturnCode;
- mPaceReturnCode = parseReturnCode(paceReturnCode, pPinId);
+ quint32 paceReturnCode = qFromLittleEndian(pControlOutput.data());
+ mPaceReturnCode = parseReturnCode(paceReturnCode, pPasswordId);
if (mPaceReturnCode == CardReturnCode::UNKNOWN)
{
- mPaceReturnCode = PersoSimWorkaround::parsingEstablishPACEChannelOutput(pControlOutput, pPinId);
+ mPaceReturnCode = PersoSimWorkaround::parsingEstablishPACEChannelOutput(pControlOutput, pPasswordId);
}
- int dataLength = parseUSHORT(pControlOutput.mid(4, 2), 0);
+ quint16 dataLength = qFromLittleEndian(pControlOutput.data() + 4);
if (pControlOutput.size() < 6 + dataLength)
{
qCWarning(card) << "Output of EstablishPACEChannel has wrong size";
@@ -277,17 +288,14 @@ void EstablishPACEChannelOutput::parse(const QByteArray& pControlOutput, PACE_PI
}
// Response data according to PC/SC Part 10 amendment 1.1
- int it = 6;
- //uint status = (static_cast(pControlOutput.at(it)) << 8);
- ++it;
- //status += static_cast(pControlOutput.at(it));
- ++it;
+ quint16 status = qFromBigEndian(pControlOutput.data() + 6);
+ if (status != StatusCode::SUCCESS)
+ {
+ qCWarning(card) << "PACE failed. Status code:" << status;
+ }
- int lengthCardAccess = parseUSHORT(pControlOutput, it);
- it += 2;
-
- mEfCardAccess = (pControlOutput.mid(it, lengthCardAccess));
- it += lengthCardAccess;
+ int it = 8;
+ mEfCardAccess = readByteArray(pControlOutput, it);
if (it >= pControlOutput.size())
{
@@ -296,26 +304,64 @@ void EstablishPACEChannelOutput::parse(const QByteArray& pControlOutput, PACE_PI
return;
}
- int length_CARcurr = pControlOutput.at(it);
- ++it;
- mCarCurr = (pControlOutput.mid(it, length_CARcurr));
- it += length_CARcurr;
- qCDebug(card) << "mCarCurr" << mCarCurr;
-
- int length_CARprev = pControlOutput.at(it);
- ++it;
- mCarPrev = (pControlOutput.mid(it, length_CARprev));
- it += length_CARprev;
- qCDebug(card) << "mCarPrev" << mCarPrev;
-
- int length_IDicc = parseUSHORT(pControlOutput, it);
- it += 2;
- mIdIcc = (pControlOutput.mid(it, length_IDicc));
+ mCarCurr = readByteArray(pControlOutput, it);
+ qCDebug(card) << "mCarCurr:" << mCarCurr;
+ mCarPrev = readByteArray(pControlOutput, it);
+ qCDebug(card) << "mCarPrev:" << mCarPrev;
+ mIdIcc = readByteArray(pControlOutput, it);
+ qCDebug(card) << "mIdIcc:" << mIdIcc.toHex();
}
-void EstablishPACEChannelOutput::parseFromCcid(const QByteArray& pOutput, PACE_PIN_ID pPinId)
+QByteArray EstablishPACEChannelOutput::toCcid() const
{
+ auto establishPaceChannelOutput = newObject();
+
+ QByteArray paceReturnCodeBytes;
+ QDataStream(&paceReturnCodeBytes, QIODevice::WriteOnly) << Enum::getValue(generateReturnCode(mPaceReturnCode));
+ establishPaceChannelOutput->mErrorCode = ASN1_OCTET_STRING_new();
+ Asn1OctetStringUtil::setValue(paceReturnCodeBytes, establishPaceChannelOutput->mErrorCode);
+
+ establishPaceChannelOutput->mStatusMSESetAt = ASN1_OCTET_STRING_new();
+ if (mStatusMseSetAt.isEmpty())
+ {
+ qCWarning(card) << "mStatusMseSetAt is empty! Using 0000 as dummy...";
+ Asn1OctetStringUtil::setValue(QByteArray::fromHex(QByteArrayLiteral("0000")), establishPaceChannelOutput->mStatusMSESetAt);
+ }
+ else
+ {
+ Asn1OctetStringUtil::setValue(mStatusMseSetAt, establishPaceChannelOutput->mStatusMSESetAt);
+ }
+
+ const uchar* unsignedCharPointer = reinterpret_cast(mEfCardAccess.constData());
+ decodeAsn1Object(&establishPaceChannelOutput->mEfCardAccess, &unsignedCharPointer, mEfCardAccess.size());
+
+ establishPaceChannelOutput->mIdPICC = ASN1_OCTET_STRING_new();
+ Asn1OctetStringUtil::setValue(mIdIcc, establishPaceChannelOutput->mIdPICC);
+ establishPaceChannelOutput->mCurCAR = ASN1_OCTET_STRING_new();
+ Asn1OctetStringUtil::setValue(mCarCurr, establishPaceChannelOutput->mCurCAR);
+ establishPaceChannelOutput->mPrevCAR = ASN1_OCTET_STRING_new();
+ Asn1OctetStringUtil::setValue(mCarPrev, establishPaceChannelOutput->mPrevCAR);
+
+ QByteArray ccidOutput = encodeObject(establishPaceChannelOutput.data());
+
+ QByteArray ccidErrorCode;
+ QDataStream(&ccidErrorCode, QIODevice::WriteOnly) << Enum::getValue(StatusCode::SUCCESS);
+ ccidOutput += ccidErrorCode;
+
+ return ccidOutput;
+}
+
+
+void EstablishPACEChannelOutput::parseFromCcid(const QByteArray& pOutput, PACE_PASSWORD_ID pPasswordId)
+{
+ mPaceReturnCode = CardReturnCode::UNKNOWN;
+ mEfCardAccess.clear();
+ mCarCurr.clear();
+ mCarPrev.clear();
+ mIdIcc.clear();
+ mStatusMseSetAt.clear();
+
if (pOutput.size() < 2)
{
qCCritical(card) << "EstablishPACEChannelOutput too short";
@@ -338,11 +384,11 @@ void EstablishPACEChannelOutput::parseFromCcid(const QByteArray& pOutput, PACE_P
if (match.hasMatch())
{
qCWarning(card) << "Determine at least PACE return code by regular expression";
- QByteArray paceReturnCodeBytes = QByteArray::fromHex(match.captured("a1").toUtf8());
+ QByteArray paceReturnCodeBytes = QByteArray::fromHex(match.captured(QStringLiteral("a1")).toUtf8());
quint32 paceReturnCode;
QDataStream(paceReturnCodeBytes) >> paceReturnCode;
- mPaceReturnCode = parseReturnCode(paceReturnCode, pPinId);
- qCDebug(card) << "mPaceReturnCode: " << mPaceReturnCode << paceReturnCodeBytes.toHex();
+ mPaceReturnCode = parseReturnCode(paceReturnCode, pPasswordId);
+ qCDebug(card) << "mPaceReturnCode:" << mPaceReturnCode << paceReturnCodeBytes.toHex();
}
return;
}
@@ -350,63 +396,72 @@ void EstablishPACEChannelOutput::parseFromCcid(const QByteArray& pOutput, PACE_P
QByteArray paceReturnCodeBytes = Asn1OctetStringUtil::getValue(channelOutput->mErrorCode);
quint32 paceReturnCode;
QDataStream(paceReturnCodeBytes) >> paceReturnCode;
- mPaceReturnCode = parseReturnCode(paceReturnCode, pPinId);
- qDebug() << "mPaceReturnCode: " << mPaceReturnCode << paceReturnCodeBytes.toHex();
+ mPaceReturnCode = parseReturnCode(paceReturnCode, pPasswordId);
+ qDebug() << "mPaceReturnCode:" << mPaceReturnCode << paceReturnCodeBytes.toHex();
- auto statusMseSetAT = Asn1OctetStringUtil::getValue(channelOutput->mStatusMSESetAt);
- qDebug() << "statusMSESetAT: " << statusMseSetAT.toHex();
+ if (channelOutput->mStatusMSESetAt)
+ {
+ mStatusMseSetAt = Asn1OctetStringUtil::getValue(channelOutput->mStatusMSESetAt);
+ qDebug() << "mStatusMseSetAt:" << mStatusMseSetAt.toHex();
+ }
- mEfCardAccess = encodeObject(channelOutput->mEfCardAccess);
- qDebug() << "mEfCardAccess" << mEfCardAccess.toHex();
+ if (channelOutput->mEfCardAccess)
+ {
+ mEfCardAccess = encodeObject(channelOutput->mEfCardAccess);
+ qDebug() << "mEfCardAccess:" << mEfCardAccess.toHex();
+ }
if (channelOutput->mIdPICC != nullptr)
{
mIdIcc = Asn1OctetStringUtil::getValue(channelOutput->mIdPICC);
- qDebug() << "idicc: " << mIdIcc.toHex();
+ qDebug() << "mIdIcc:" << mIdIcc.toHex();
}
if (channelOutput->mCurCAR != nullptr)
{
mCarCurr = Asn1OctetStringUtil::getValue(channelOutput->mCurCAR);
- qDebug() << "mCarCurr" << mCarCurr;
+ qDebug() << "mCarCurr:" << mCarCurr;
}
if (channelOutput->mPrevCAR != nullptr)
{
mCarPrev = Asn1OctetStringUtil::getValue(channelOutput->mPrevCAR);
- qDebug() << "mCarPrev" << mCarPrev;
+ qDebug() << "mCarPrev:" << mCarPrev;
}
}
-CardReturnCode EstablishPACEChannelOutput::parseReturnCode(quint32 pPaceReturnCode, PACE_PIN_ID pPinId)
+CardReturnCode EstablishPACEChannelOutput::parseReturnCode(quint32 pPaceReturnCode, PACE_PASSWORD_ID pPasswordId)
{
// error codes from the reader
- switch (pPaceReturnCode)
+ switch (EstablishPACEChannelErrorCode(pPaceReturnCode))
{
- case 0:
+ case EstablishPACEChannelErrorCode::NoError:
// no error
return CardReturnCode::OK;
- case 0xd0000001: // Inconsistent lengths in input
- case 0xd0000002: // Unexpected data in input
- case 0xd0000003: // Unexpected combination of data in input
- case 0xe0000001: // Syntax error in TLV response
- case 0xe0000002: // Unexpected or missing object in TLV response
- case 0xe0000003: // Unknown PIN-ID
- case 0xe0000006: // Wrong Authentication Token
+ case EstablishPACEChannelErrorCode::InconsistentLengthsInInput:
+ case EstablishPACEChannelErrorCode::UnexpectedDataInInput:
+ case EstablishPACEChannelErrorCode::UnexpectedCombinationOfDataInInput:
+ case EstablishPACEChannelErrorCode::SyntaxErrorInTLVResponse:
+ case EstablishPACEChannelErrorCode::UnexpectedOrMissingObjectInTLVResponse:
+ case EstablishPACEChannelErrorCode::UnknownPasswordID:
+ case EstablishPACEChannelErrorCode::WrongAuthenticationToken:
return CardReturnCode::COMMAND_FAILED;
// 0xf00663c2 -- invalid PIN?
- case 0xf0100001: // Communication abort (e.g. card removed during protocol)
- case 0xf0100002: // No card
+ case EstablishPACEChannelErrorCode::CommunicationAbort:
+ case EstablishPACEChannelErrorCode::NoCard:
return CardReturnCode::COMMAND_FAILED;
- case 0xf0200001: // Abort
+ case EstablishPACEChannelErrorCode::Abort:
return CardReturnCode::CANCELLATION_BY_USER;
- case 0xf0200002: // Timeout
+ case EstablishPACEChannelErrorCode::Timeout:
return CardReturnCode::INPUT_TIME_OUT;
+
+ default:
+ break;
}
// Error codes wrapping error codes from the card. The format is 0xXXXXYYZZ, where XXXX identifies
@@ -426,17 +481,17 @@ CardReturnCode EstablishPACEChannelOutput::parseReturnCode(quint32 pPaceReturnCo
{
// SW1 == 0x63 is a warning, which includes incorrectly entered CAN/PIN. For the PIN
// we get SW2 == 0xcX, with X being the number of remaining retries.
- switch (pPinId)
+ switch (pPasswordId)
{
- case PACE_PIN_ID::PACE_MRZ:
+ case PACE_PASSWORD_ID::PACE_MRZ:
// No separate error code (yet).
- case PACE_PIN_ID::PACE_CAN:
+ case PACE_PASSWORD_ID::PACE_CAN:
return CardReturnCode::INVALID_CAN;
- case PACE_PIN_ID::PACE_PIN:
+ case PACE_PASSWORD_ID::PACE_PIN:
return CardReturnCode::INVALID_PIN;
- case PACE_PIN_ID::PACE_PUK:
+ case PACE_PASSWORD_ID::PACE_PUK:
return CardReturnCode::INVALID_PUK;
}
}
@@ -445,3 +500,45 @@ CardReturnCode EstablishPACEChannelOutput::parseReturnCode(quint32 pPaceReturnCo
return CardReturnCode::UNKNOWN;
}
+
+
+EstablishPACEChannelErrorCode EstablishPACEChannelOutput::generateReturnCode(CardReturnCode pReturnCode)
+{
+ switch (pReturnCode)
+ {
+ case CardReturnCode::UNKNOWN:
+ case CardReturnCode::UNDEFINED:
+ case CardReturnCode::NEW_PIN_MISMATCH:
+ case CardReturnCode::NEW_PIN_INVALID_LENGTH:
+ case CardReturnCode::PIN_BLOCKED:
+ case CardReturnCode::PIN_NOT_BLOCKED:
+ case CardReturnCode::PUK_INOPERATIVE:
+ case CardReturnCode::UNEXPECTED_TRANSMIT_STATUS:
+ case CardReturnCode::PROTOCOL_ERROR:
+ return EstablishPACEChannelErrorCode::UnexpectedDataInInput;
+
+ case CardReturnCode::INVALID_CAN:
+ case CardReturnCode::INVALID_PIN:
+ case CardReturnCode::INVALID_PUK:
+ return EstablishPACEChannelErrorCode::GeneralAuthenticateStep1_4_Warning;
+
+ case CardReturnCode::OK:
+ return EstablishPACEChannelErrorCode::NoError;
+
+ case CardReturnCode::CARD_NOT_FOUND:
+ return EstablishPACEChannelErrorCode::NoCard;
+
+ case CardReturnCode::INPUT_TIME_OUT:
+ return EstablishPACEChannelErrorCode::Timeout;
+
+
+ case CardReturnCode::COMMAND_FAILED:
+ return EstablishPACEChannelErrorCode::CommunicationAbort;
+
+ case CardReturnCode::CANCELLATION_BY_USER:
+ return EstablishPACEChannelErrorCode::Abort;
+ }
+
+ Q_UNREACHABLE();
+ return EstablishPACEChannelErrorCode::UnexpectedDataInInput;
+}
diff --git a/src/card/base/EstablishPACEChannel.h b/src/card/base/EstablishPACEChannel.h
index c6355e9..95d0403 100644
--- a/src/card/base/EstablishPACEChannel.h
+++ b/src/card/base/EstablishPACEChannel.h
@@ -1,7 +1,7 @@
/*!
* \brief Data object for output of card command EstablishPACEChannel
*
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -11,6 +11,7 @@
#include "asn1/SecurityInfos.h"
#include "Apdu.h"
#include "CardReturnCode.h"
+#include "pace/EstablishPACEChannelCode.h"
#include "SmartCardDefinitions.h"
#include
@@ -46,7 +47,7 @@ DECLARE_ASN1_OBJECT(ESTABLISHPACECHANNELINPUT)
class EstablishPACEChannelBuilder
{
private:
- PACE_PIN_ID mPinId;
+ PACE_PASSWORD_ID mPasswordId;
QByteArray mChat;
QByteArray mCertificateDescription;
@@ -65,7 +66,7 @@ class EstablishPACEChannelBuilder
void setCertificateDescription(const QByteArray& pCertificateDescription);
void setChat(const QByteArray& pChat);
- void setPinId(PACE_PIN_ID pPinId);
+ void setPasswordId(PACE_PASSWORD_ID pPasswordId);
};
@@ -102,11 +103,7 @@ class EstablishPACEChannelOutput
QByteArray mCarCurr;
QByteArray mCarPrev;
QByteArray mIdIcc;
-
-
- static int parseUSHORT(const QByteArray& pData, int pOffset);
-
- static QByteArray reverse(const QByteArray& pArrayToReverse);
+ QByteArray mStatusMseSetAt;
public:
EstablishPACEChannelOutput();
@@ -114,12 +111,13 @@ class EstablishPACEChannelOutput
/**
* Defined in pcsc10_v2.02.08_amd1.1
*/
- void parse(const QByteArray& pControlOutput, PACE_PIN_ID pPinId);
+ void parse(const QByteArray& pControlOutput, PACE_PASSWORD_ID pPasswordId);
/**
* Defined in TR-03119
*/
- void parseFromCcid(const QByteArray& pOutput, PACE_PIN_ID pPinId);
+ QByteArray toCcid() const;
+ void parseFromCcid(const QByteArray& pOutput, PACE_PASSWORD_ID pPasswordId);
CardReturnCode getPaceReturnCode() const;
void setPaceReturnCode(CardReturnCode);
@@ -136,7 +134,11 @@ class EstablishPACEChannelOutput
QByteArray getCARprev() const;
void setCarPrev(const QByteArray&);
- static CardReturnCode parseReturnCode(quint32 pPaceReturnCode, PACE_PIN_ID pPinId);
+ QByteArray getMseStatusSetAt() const;
+ void setStatusMseSetAt(const QByteArray& pStatusMseSetAt);
+
+ static CardReturnCode parseReturnCode(quint32 pPaceReturnCode, PACE_PASSWORD_ID pPasswordId);
+ static EstablishPACEChannelErrorCode generateReturnCode(CardReturnCode pReturnCode);
};
diff --git a/src/card/base/EstablishPACEChannelParser.cpp b/src/card/base/EstablishPACEChannelParser.cpp
new file mode 100644
index 0000000..7f2871a
--- /dev/null
+++ b/src/card/base/EstablishPACEChannelParser.cpp
@@ -0,0 +1,121 @@
+/*!
+ * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG, Germany
+ */
+
+#include "EstablishPACEChannelParser.h"
+
+#include "asn1/ASN1TemplateUtil.h"
+#include "Apdu.h"
+
+#include
+
+Q_DECLARE_LOGGING_CATEGORY(card)
+
+
+using namespace governikus;
+
+
+EstablishPACEChannelParser::EstablishPACEChannelParser(PACE_PASSWORD_ID pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, const QByteArray& pCommandData)
+ : mPasswordId(pPasswordId)
+ , mChat(pChat)
+ , mCertificateDescription(pCertificateDescription)
+ , mCommandData(pCommandData)
+{
+
+}
+
+
+EstablishPACEChannelParser EstablishPACEChannelParser::fromCcid(const QByteArray& pInput)
+{
+ CommandApdu command(pInput);
+
+ if (command.getCLA() != char(0xFF)
+ || command.getINS() != char(0x9A)
+ || command.getP1() != 0x04
+ || command.getP2() != 0x02)
+ {
+ qCDebug(card) << "Decapsulation of command failed. Unexpected header.";
+ return EstablishPACEChannelParser();
+ }
+
+ QByteArray commandData = command.getData();
+ auto channelInput = decodeObject(commandData);
+
+ Q_ASSERT(channelInput);
+ if (!channelInput)
+ {
+ qCDebug(card) << "Decapsulation of command failed. Bad command data.";
+ return EstablishPACEChannelParser();
+ }
+
+ PACE_PASSWORD_ID passwordId = PACE_PASSWORD_ID::PACE_PIN;
+ Q_ASSERT(channelInput->mPasswordID);
+ if (channelInput->mPasswordID)
+ {
+ char asn1_char = static_cast(ASN1_INTEGER_get(channelInput->mPasswordID));
+ if (Enum::isValue(asn1_char))
+ {
+ passwordId = PACE_PASSWORD_ID(asn1_char);
+ }
+ else
+ {
+ qCDebug(card) << "Decapsulation: Bad PIN ID!";
+ Q_ASSERT(false);
+ }
+ }
+ else
+ {
+ qCDebug(card) << "Decapsulation: No PIN ID!";
+ Q_ASSERT(false);
+ }
+
+ // With CAN and PUK mode there is no certificate description.
+ QByteArray certificateDescription;
+ Q_ASSERT(passwordId != PACE_PASSWORD_ID::PACE_PIN || channelInput->mCertificateDescription);
+ if (channelInput->mCertificateDescription)
+ {
+ certificateDescription = channelInput->mCertificateDescription->encode();
+ }
+ else if (passwordId == PACE_PASSWORD_ID::PACE_PIN)
+ {
+ qCDebug(card) << "Decapsulation: No certificate description!";
+ }
+
+ // With CAN and PUK mode there is no chat.
+ QByteArray chat;
+ Q_ASSERT(passwordId != PACE_PASSWORD_ID::PACE_PIN || channelInput->mCHAT);
+ if (channelInput->mCHAT)
+ {
+ chat = Asn1OctetStringUtil::getValue(channelInput->mCHAT);
+ }
+ else if (passwordId == PACE_PASSWORD_ID::PACE_PIN)
+ {
+ qCDebug(card) << "Decapsulation: No CHAT!";
+ }
+
+ return EstablishPACEChannelParser(passwordId, chat, certificateDescription, commandData);
+}
+
+
+PACE_PASSWORD_ID EstablishPACEChannelParser::getPasswordId() const
+{
+ return mPasswordId;
+}
+
+
+const QByteArray& EstablishPACEChannelParser::getChat() const
+{
+ return mChat;
+}
+
+
+const QByteArray& EstablishPACEChannelParser::getCertificateDescription() const
+{
+ return mCertificateDescription;
+}
+
+
+const QByteArray& EstablishPACEChannelParser::getCommandData() const
+{
+ return mCommandData;
+}
diff --git a/src/card/base/EstablishPACEChannelParser.h b/src/card/base/EstablishPACEChannelParser.h
new file mode 100644
index 0000000..e09b15e
--- /dev/null
+++ b/src/card/base/EstablishPACEChannelParser.h
@@ -0,0 +1,38 @@
+/*!
+ * \brief Parser to decapsulation EstablishPACEChannel
+ *
+ * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG, Germany
+ */
+
+#pragma once
+
+#include "EstablishPACEChannel.h"
+
+
+namespace governikus
+{
+
+class EstablishPACEChannelParser
+{
+ private:
+ PACE_PASSWORD_ID mPasswordId;
+ QByteArray mChat;
+ QByteArray mCertificateDescription;
+ QByteArray mCommandData;
+
+ EstablishPACEChannelParser(PACE_PASSWORD_ID pPasswordId = PACE_PASSWORD_ID::PACE_PIN,
+ const QByteArray& pChat = QByteArray(),
+ const QByteArray& pCertificateDescription = QByteArray(),
+ const QByteArray& pCommandData = QByteArray());
+
+ public:
+ static EstablishPACEChannelParser fromCcid(const QByteArray& pInput);
+
+ PACE_PASSWORD_ID getPasswordId() const;
+ const QByteArray& getChat() const;
+ const QByteArray& getCertificateDescription() const;
+ const QByteArray& getCommandData() const;
+
+};
+
+}
diff --git a/src/card/base/ExtendedLengthApduSupportCode.cpp b/src/card/base/ExtendedLengthApduSupportCode.cpp
deleted file mode 100644
index 3cde9c7..0000000
--- a/src/card/base/ExtendedLengthApduSupportCode.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG
- */
-
-#include "ExtendedLengthApduSupportCode.h"
-
-#include "moc_ExtendedLengthApduSupportCode.cpp"
diff --git a/src/card/base/ExtendedLengthApduSupportCode.h b/src/card/base/ExtendedLengthApduSupportCode.h
deleted file mode 100644
index aa6422d..0000000
--- a/src/card/base/ExtendedLengthApduSupportCode.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * Definition of enum ExtendedLengthApduSupportCode.
- *
- * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG
- */
-
-#pragma once
-
-#include "EnumHelper.h"
-
-namespace governikus
-{
-defineEnumType(ExtendedLengthApduSupportCode,
- UNKNOWN = -1,
- NOT_SUPPORTED = 0,
- SUPPORTED = 1,
- INVALID = 2)
-}
diff --git a/src/card/base/FileRef.cpp b/src/card/base/FileRef.cpp
index 421761e..a4524dc 100644
--- a/src/card/base/FileRef.cpp
+++ b/src/card/base/FileRef.cpp
@@ -1,7 +1,5 @@
/*!
- * FileRef.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "Commands.h"
diff --git a/src/card/base/FileRef.h b/src/card/base/FileRef.h
index 73c05fd..c58a31b 100644
--- a/src/card/base/FileRef.h
+++ b/src/card/base/FileRef.h
@@ -1,7 +1,7 @@
/*!
* \brief Reference information for files on smart cards.
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
diff --git a/src/card/base/GeneralAuthenticateResponse.cpp b/src/card/base/GeneralAuthenticateResponse.cpp
index b13f62e..421eb46 100644
--- a/src/card/base/GeneralAuthenticateResponse.cpp
+++ b/src/card/base/GeneralAuthenticateResponse.cpp
@@ -1,7 +1,5 @@
/*!
- * GeneralAuthenticateResponse.cpp
- *
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
#include "asn1/ASN1Util.h"
diff --git a/src/card/base/GeneralAuthenticateResponse.h b/src/card/base/GeneralAuthenticateResponse.h
index 3b64d7a..2c5c539 100644
--- a/src/card/base/GeneralAuthenticateResponse.h
+++ b/src/card/base/GeneralAuthenticateResponse.h
@@ -1,9 +1,7 @@
/*!
- * GeneralAuthenticateResponse.h
- *
* \brief Implementation of GeneralAuthenticate response APDUs.
*
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -24,7 +22,7 @@ class GAResponseApdu
public:
GAResponseApdu();
- virtual ~GAResponseApdu();
+ virtual ~GAResponseApdu() override;
virtual void setBuffer(const QByteArray& pBuffer) override;
};
@@ -52,7 +50,7 @@ class GAEncryptedNonceResponse
public:
GAEncryptedNonceResponse();
- virtual ~GAEncryptedNonceResponse();
+ virtual ~GAEncryptedNonceResponse() override;
const QByteArray& getEncryptedNonce();
};
@@ -80,7 +78,7 @@ class GAMapNonceResponse
public:
GAMapNonceResponse();
- virtual ~GAMapNonceResponse();
+ virtual ~GAMapNonceResponse() override;
const QByteArray& getMappingData();
};
@@ -108,7 +106,7 @@ class GAPerformKeyAgreementResponse
public:
GAPerformKeyAgreementResponse();
- virtual ~GAPerformKeyAgreementResponse();
+ virtual ~GAPerformKeyAgreementResponse() override;
const QByteArray& getEphemeralPublicKey();
};
@@ -140,7 +138,7 @@ class GAMutualAuthenticationResponse
public:
GAMutualAuthenticationResponse();
- virtual ~GAMutualAuthenticationResponse();
+ virtual ~GAMutualAuthenticationResponse() override;
const QByteArray& getAuthenticationToken();
const QByteArray& getCarCurr();
const QByteArray& getCarPrev();
@@ -172,7 +170,7 @@ class GAChipAuthenticationResponse
public:
GAChipAuthenticationResponse();
- virtual ~GAChipAuthenticationResponse();
+ virtual ~GAChipAuthenticationResponse() override;
const QByteArray& getNonce();
const QByteArray& getAuthenticationToken();
diff --git a/src/card/base/InputAPDUInfo.cpp b/src/card/base/InputAPDUInfo.cpp
index 81009d6..bb3c366 100644
--- a/src/card/base/InputAPDUInfo.cpp
+++ b/src/card/base/InputAPDUInfo.cpp
@@ -1,7 +1,5 @@
/*!
- * InputAPDUInfo.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "InputAPDUInfo.h"
@@ -11,18 +9,14 @@ using namespace governikus;
InputAPDUInfo::InputAPDUInfo()
: mInputApdu()
, mAcceptableStatusCodes()
+ , mUpdateRetryCounter(false)
{
}
-InputAPDUInfo::InputAPDUInfo(const QByteArray& pInputApdu, const QByteArrayList& pAcceptableStatusCodes)
+InputAPDUInfo::InputAPDUInfo(const QByteArray& pInputApdu, bool pUpdateRetryCounter)
: mInputApdu(pInputApdu)
- , mAcceptableStatusCodes(pAcceptableStatusCodes)
+ , mAcceptableStatusCodes()
+ , mUpdateRetryCounter(pUpdateRetryCounter)
{
}
-
-
-bool InputAPDUInfo::isValid() const
-{
- return !mInputApdu.isEmpty();
-}
diff --git a/src/card/base/InputAPDUInfo.h b/src/card/base/InputAPDUInfo.h
index 354b259..9ab862a 100644
--- a/src/card/base/InputAPDUInfo.h
+++ b/src/card/base/InputAPDUInfo.h
@@ -1,11 +1,11 @@
/*!
- * InputAPDUInfo.h
- *
* \brief Holds the data of an InputAPDUInfo element.
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
+#include "Apdu.h"
+
#include
#include
@@ -18,13 +18,18 @@ class InputAPDUInfo
{
public:
InputAPDUInfo();
- InputAPDUInfo(const QByteArray& pInputApdu, const QByteArrayList& pAcceptableStatusCodes);
+ InputAPDUInfo(const QByteArray& pInputApdu, bool pUpdateRetryCounter = false);
- bool isValid() const;
- const QByteArray& getInputApdu() const
+ bool isValid() const
{
- return mInputApdu;
+ return !mInputApdu.isEmpty();
+ }
+
+
+ const CommandApdu getInputApdu() const
+ {
+ return CommandApdu(mInputApdu, mUpdateRetryCounter);
}
@@ -40,15 +45,19 @@ class InputAPDUInfo
}
- void addAcceptableStatusCode(const QByteArray& pStatusCode)
+ void addAcceptableStatusCode(const QByteArray& pStatusCodeAsHex)
{
- mAcceptableStatusCodes += pStatusCode;
+ mAcceptableStatusCodes += pStatusCodeAsHex;
}
private:
QByteArray mInputApdu;
QByteArrayList mAcceptableStatusCodes;
+ // mUpdateRetryCounter is not part of the xml data.
+ // We use it internally to update the retry counter on a
+ // low level especially when we act as a remote card reader
+ bool mUpdateRetryCounter;
};
}
diff --git a/src/card/base/PersoSimWorkaround.h b/src/card/base/PersoSimWorkaround.h
index 66b1618..1ae3b00 100644
--- a/src/card/base/PersoSimWorkaround.h
+++ b/src/card/base/PersoSimWorkaround.h
@@ -1,9 +1,7 @@
/*!
- * PersoSim.h
- *
* \brief This class is only to mark it as a workaround for working with the PersoSim.
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -33,10 +31,11 @@ class PersoSimWorkaround
*
* As soon as PersoSim is fixed in that point, we will remove the workaround.
*/
- static void sendingMseSetAt(const QSharedPointer& pCardConnectionWorker)
+ static CardReturnCode sendingMseSetAt(const QSharedPointer& pCardConnectionWorker)
{
ResponseApdu response;
- pCardConnectionWorker->transmit(SelectBuilder(FileRef::efCardAccess()).build(), response);
+ const CardReturnCode returnCode = pCardConnectionWorker->transmit(SelectBuilder(FileRef::efCardAccess()).build(), response);
+ return (returnCode == CardReturnCode::COMMAND_FAILED && response.getReturnCode() != StatusCode::EMPTY) ? CardReturnCode::OK : returnCode;
}
@@ -46,11 +45,11 @@ class PersoSimWorkaround
*
* As soon as PersoSim is fixed in that point, we will remove the workaround.
*/
- static CardReturnCode parsingEstablishPACEChannelOutput(const QByteArray& pControlOutput, PACE_PIN_ID pPinId)
+ static CardReturnCode parsingEstablishPACEChannelOutput(const QByteArray& pControlOutput, PACE_PASSWORD_ID pPasswordId)
{
quint32 paceReturnCode;
QDataStream(pControlOutput.mid(0, 4)) >> paceReturnCode;
- return EstablishPACEChannelOutput::parseReturnCode(paceReturnCode, pPinId);
+ return EstablishPACEChannelOutput::parseReturnCode(paceReturnCode, pPasswordId);
}
diff --git a/src/card/base/Reader.cpp b/src/card/base/Reader.cpp
index 43c00be..f80c02a 100644
--- a/src/card/base/Reader.cpp
+++ b/src/card/base/Reader.cpp
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
@@ -18,11 +18,10 @@ Q_DECLARE_LOGGING_CATEGORY(card)
Q_DECLARE_LOGGING_CATEGORY(support)
-Reader::Reader(ReaderManagerPlugInType pPlugInType, const QString& pReaderName, ReaderType pType)
+Reader::Reader(ReaderManagerPlugInType pPlugInType, const QString& pReaderName)
: QObject()
- , mReaderInfo(pPlugInType, pReaderName, pType)
+ , mReaderInfo(pReaderName, pPlugInType)
, mTimerId(0)
- , mUpdateRetryCounter(true)
{
}
@@ -38,6 +37,18 @@ void Reader::setPukInoperative()
}
+void Reader::setRetryCounter(int pRetryCounter)
+{
+ if (mReaderInfo.getRetryCounter() != pRetryCounter)
+ {
+ qCInfo(support) << "retry counter updated:" << pRetryCounter << ", was:" << mReaderInfo.getRetryCounter();
+
+ mReaderInfo.mCardInfo.mRetryCounter = pRetryCounter;
+ Q_EMIT fireCardRetryCounterChanged(mReaderInfo.getName());
+ }
+}
+
+
QSharedPointer Reader::createCardConnectionWorker()
{
Card* currentCard = getCard();
@@ -76,22 +87,6 @@ void Reader::update()
{
CardEvent cardEvent = updateCard();
fireUpdateSignal(cardEvent);
- updateRetryCounterIfNecessary();
-}
-
-
-void Reader::updateRetryCounterIfNecessary()
-{
- if (!mUpdateRetryCounter || mReaderInfo.getCardInfo().getCardType() != CardType::EID_CARD)
- {
- return;
- }
-
- auto cardConnection = createCardConnectionWorker();
- if (cardConnection)
- {
- updateRetryCounter(cardConnection);
- }
}
@@ -103,13 +98,13 @@ CardReturnCode Reader::updateRetryCounter(QSharedPointer p
CardReturnCode returnCode = getRetryCounter(pCardConnectionWorker, newRetryCounter, newPinDeactivated);
if (returnCode == CardReturnCode::OK)
{
- bool changed = (newRetryCounter != mReaderInfo.getRetryCounter()) || (newPinDeactivated != mReaderInfo.isPinDeactivated());
+ bool emitSignal = mReaderInfo.isRetryCounterDetermined() && ((newRetryCounter != mReaderInfo.getRetryCounter()) || (newPinDeactivated != mReaderInfo.isPinDeactivated()));
+
qCInfo(support) << "retrieved retry counter:" << newRetryCounter << ", was:" << mReaderInfo.getRetryCounter() << ", PIN deactivated:" << newPinDeactivated;
- mUpdateRetryCounter = false;
mReaderInfo.mCardInfo.mRetryCounter = newRetryCounter;
mReaderInfo.mCardInfo.mPinDeactivated = newPinDeactivated;
- if (changed)
+ if (emitSignal)
{
qCDebug(card) << "fireCardRetryCounterChanged";
Q_EMIT fireCardRetryCounterChanged(mReaderInfo.getName());
@@ -132,16 +127,21 @@ CardReturnCode Reader::getRetryCounter(QSharedPointer pCar
QByteArray cryptographicMechanismReference = paceInfo->getProtocolValueBytes();
QByteArray referencePrivateKey = paceInfo->getParameterId();
- PersoSimWorkaround::sendingMseSetAt(pCardConnectionWorker);
+ CardReturnCode returnCode = PersoSimWorkaround::sendingMseSetAt(pCardConnectionWorker);
+ if (returnCode != CardReturnCode::OK)
+ {
+ qCCritical(card) << "Error on MSE:Set AT";
+ return returnCode;
+ }
// MSE:Set AT
MSEBuilder mseBuilder(MSEBuilder::P1::PERFORM_SECURITY_OPERATION, MSEBuilder::P2::SET_AT);
mseBuilder.setOid(cryptographicMechanismReference);
- mseBuilder.setPublicKey(PACE_PIN_ID::PACE_PIN);
+ mseBuilder.setPublicKey(PACE_PASSWORD_ID::PACE_PIN);
mseBuilder.setPrivateKey(referencePrivateKey);
ResponseApdu mseSetAtResponse;
- CardReturnCode returnCode = pCardConnectionWorker->transmit(mseBuilder.build(), mseSetAtResponse);
+ returnCode = pCardConnectionWorker->transmit(mseBuilder.build(), mseSetAtResponse);
if (returnCode != CardReturnCode::OK)
{
return returnCode;
@@ -149,23 +149,7 @@ CardReturnCode Reader::getRetryCounter(QSharedPointer pCar
StatusCode statusCode = mseSetAtResponse.getReturnCode();
qCDebug(card) << "StatusCode: " << statusCode;
- if (statusCode == StatusCode::SUCCESS)
- {
- pRetryCounter = 3;
- }
- else if (statusCode == StatusCode::PIN_RETRY_COUNT_2)
- {
- pRetryCounter = 2;
- }
- else if (statusCode == StatusCode::PIN_SUSPENDED)
- {
- pRetryCounter = 1;
- }
- else if (statusCode == StatusCode::PIN_BLOCKED || statusCode == StatusCode::PIN_DEACTIVATED)
- {
- pRetryCounter = 0;
- }
-
+ pRetryCounter = mseSetAtResponse.getRetryCounter();
pPinDeactivated = statusCode == StatusCode::PIN_DEACTIVATED;
return CardReturnCode::OK;
@@ -180,7 +164,7 @@ void Reader::fireUpdateSignal(CardEvent pCardEvent)
break;
case CardEvent::CARD_INSERTED:
- qCInfo(support) << "Card inserted of type" << mReaderInfo.getCardType();
+ qCInfo(support) << "Card inserted:" << mReaderInfo.getCardInfo();
Q_EMIT fireCardInserted(mReaderInfo.getName());
break;
@@ -192,12 +176,6 @@ void Reader::fireUpdateSignal(CardEvent pCardEvent)
}
-void Reader::onRetryCounterPotentiallyChanged()
-{
- mUpdateRetryCounter = true;
-}
-
-
ConnectableReader::~ConnectableReader()
{
}
diff --git a/src/card/base/Reader.h b/src/card/base/Reader.h
index 8dda6a5..19d7b0c 100644
--- a/src/card/base/Reader.h
+++ b/src/card/base/Reader.h
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -31,7 +31,6 @@ class Reader
ReaderInfo mReaderInfo;
int mTimerId;
- bool mUpdateRetryCounter;
void timerEvent(QTimerEvent* pEvent) override;
@@ -43,15 +42,13 @@ class Reader
private:
virtual CardEvent updateCard() = 0;
- void updateRetryCounterIfNecessary();
-
CardReturnCode getRetryCounter(QSharedPointer pCardConnectionWorker, int& pRetryCounter, bool& pPinDeactivated);
void fireUpdateSignal(CardEvent pCardEvent);
public:
- Reader(ReaderManagerPlugInType pPlugInType, const QString& pReaderName, ReaderType pType);
- virtual ~Reader();
+ Reader(ReaderManagerPlugInType pPlugInType, const QString& pReaderName);
+ virtual ~Reader() override;
const QString& getName() const
{
@@ -59,18 +56,15 @@ class Reader
}
- ReaderType getReaderType() const
- {
- return mReaderInfo.getReaderType();
- }
-
-
const ReaderInfo& getReaderInfo() const
{
return mReaderInfo;
}
+ void setRetryCounter(int pRetryCounter);
+
+
virtual Card* getCard() const = 0;
void setPukInoperative();
@@ -90,9 +84,6 @@ class Reader
void fireReaderPropertiesUpdated(const QString& pReaderName);
void fireReaderDeviceError(DeviceError pDeviceError);
- public Q_SLOTS:
- void onRetryCounterPotentiallyChanged();
-
};
diff --git a/src/card/base/ReaderFilter.cpp b/src/card/base/ReaderFilter.cpp
new file mode 100644
index 0000000..b25e2a2
--- /dev/null
+++ b/src/card/base/ReaderFilter.cpp
@@ -0,0 +1,77 @@
+/*!
+ * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG, Germany
+ */
+
+#include "ReaderFilter.h"
+
+#include "EnumHelper.h"
+#include "ReaderConfiguration.h"
+#include "ReaderManagerPlugIn.h"
+
+using namespace governikus;
+
+ReaderFilter::ReaderFilter()
+ : mFilterType(NoFilter)
+ , mPluginTypes()
+{
+
+}
+
+
+ReaderFilter::ReaderFilter(const QVector& pPluginTypes)
+ : mFilterType(PluginTypeFilter)
+ , mPluginTypes(pPluginTypes)
+{
+
+}
+
+
+ReaderFilter::ReaderFilter(const ReaderFilter::FilterType pFilterType)
+ : mFilterType(pFilterType)
+ , mPluginTypes()
+{
+
+}
+
+
+QVector ReaderFilter::apply(const QVector& pPluginType) const
+{
+ if (mFilterType & PluginTypeFilter)
+ {
+ QVector filtered;
+ for (const auto& pluginType : pPluginType)
+ {
+ if (mPluginTypes.contains(pluginType->getInfo().getPlugInType()))
+ {
+ filtered += pluginType;
+ }
+ }
+ return filtered;
+ }
+
+ return pPluginType;
+}
+
+
+QVector ReaderFilter::apply(const QVector& pInputList) const
+{
+ if (mFilterType & UniqueReaderTypes)
+ {
+ QVector filtered;
+ QVector alreadyContained;
+ for (const auto& readerInfo : pInputList)
+ {
+ const ReaderConfigurationInfo configurationInfo = readerInfo.getReaderConfigurationInfo();
+ if (alreadyContained.contains(configurationInfo))
+ {
+ continue;
+ }
+
+ filtered += readerInfo;
+ alreadyContained += configurationInfo;
+ }
+ return filtered;
+ }
+
+ return pInputList;
+}
diff --git a/src/card/base/ReaderFilter.h b/src/card/base/ReaderFilter.h
new file mode 100644
index 0000000..102cca8
--- /dev/null
+++ b/src/card/base/ReaderFilter.h
@@ -0,0 +1,47 @@
+/*!
+ * \brief A configured filter used to retrieve readers
+ *
+ * \copyright Copyright (c) 2017 Governikus GmbH & Co. KG, Germany
+ */
+
+#pragma once
+
+#include "ReaderInfo.h"
+#include "ReaderManagerPlugInInfo.h"
+
+#include
+#include
+
+namespace governikus
+{
+
+class ReaderManagerPlugIn;
+
+class ReaderFilter
+{
+ public:
+ enum FilterType
+ {
+ NoFilter = 0,
+ PluginTypeFilter = 1,
+ UniqueReaderTypes = 2
+ };
+ Q_DECLARE_FLAGS(FilterTypes, FilterType)
+
+ private:
+ ReaderFilter::FilterTypes mFilterType;
+ const QVector mPluginTypes;
+
+ public:
+ ReaderFilter();
+ ReaderFilter(const QVector& pPluginTypes);
+ ReaderFilter(const ReaderFilter::FilterType pFilterType);
+
+ QVector apply(const QVector& pPluginType) const;
+ QVector apply(const QVector& pInputList) const;
+};
+
+
+}
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(governikus::ReaderFilter::FilterTypes)
diff --git a/src/card/base/ReaderInfo.cpp b/src/card/base/ReaderInfo.cpp
index dae4571..9e1baae 100644
--- a/src/card/base/ReaderInfo.cpp
+++ b/src/card/base/ReaderInfo.cpp
@@ -1,22 +1,28 @@
/*!
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "ReaderInfo.h"
+#include "Env.h"
+#include "Initializer.h"
+#include "ReaderDetector.h"
+
using namespace governikus;
+static Initializer::Entry X([] {
+ qRegisterMetaType("ReaderInfo");
+ });
-ReaderInfo::ReaderInfo(ReaderManagerPlugInType pPlugInType,
- const QString& pName,
- ReaderType pReaderType,
+ReaderInfo::ReaderInfo(const QString& pName,
+ ReaderManagerPlugInType pPlugInType,
const CardInfo& pCardInfo)
: mPlugInType(pPlugInType)
, mName(pName)
- , mReaderType(pReaderType)
+ , mReaderConfigurationInfo(Env::getSingleton()->getReaderConfigurationInfo(pName))
, mBasicReader(true)
, mCardInfo(pCardInfo)
, mConnected(false)
- , mExtendedLengthApduSupportCode(pPlugInType == ReaderManagerPlugInType::NFC ? ExtendedLengthApduSupportCode::UNKNOWN : ExtendedLengthApduSupportCode::SUPPORTED)
+ , mMaxApduLength(pPlugInType == ReaderManagerPlugInType::NFC ? 0 : 500)
{
}
diff --git a/src/card/base/ReaderInfo.h b/src/card/base/ReaderInfo.h
index 357a480..3fe3dd1 100644
--- a/src/card/base/ReaderInfo.h
+++ b/src/card/base/ReaderInfo.h
@@ -1,12 +1,12 @@
/*!
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
#include "CardInfo.h"
#include "EnumHelper.h"
-#include "MetaTypeHelper.h"
+#include "ReaderConfigurationInfo.h"
#include "ReaderManagerPlugInInfo.h"
#include "SmartCardDefinitions.h"
@@ -14,35 +14,23 @@
namespace governikus
{
-
-defineEnumType(ExtendedLengthApduSupportCode,
- UNKNOWN = -1,
- NOT_SUPPORTED = 0,
- SUPPORTED = 1)
-
class ReaderInfo
{
friend class Reader;
ReaderManagerPlugInType mPlugInType;
QString mName;
- ReaderType mReaderType;
+ ReaderConfigurationInfo mReaderConfigurationInfo;
bool mBasicReader;
CardInfo mCardInfo;
bool mConnected;
- ExtendedLengthApduSupportCode mExtendedLengthApduSupportCode;
+ int mMaxApduLength;
public:
- ReaderInfo(ReaderManagerPlugInType pPlugInType = ReaderManagerPlugInType::UNKNOWN,
- const QString& pName = QString(),
- ReaderType pReaderType = ReaderType::UNKNOWN,
+ ReaderInfo(const QString& pName = QString(),
+ ReaderManagerPlugInType pPlugInType = ReaderManagerPlugInType::UNKNOWN,
const CardInfo& pCardInfo = CardInfo(CardType::NONE));
- bool isValid() const
- {
- return !mName.isNull();
- }
-
ReaderManagerPlugInType getPlugInType() const
{
@@ -50,15 +38,33 @@ class ReaderInfo
}
+ const ReaderConfigurationInfo& getReaderConfigurationInfo() const
+ {
+ return mReaderConfigurationInfo;
+ }
+
+
const CardInfo& getCardInfo() const
{
return mCardInfo;
}
- CardType getCardType() const
+ QString getCardTypeString() const
{
- return mCardInfo.getCardType();
+ return mCardInfo.getCardTypeString();
+ }
+
+
+ bool hasCard() const
+ {
+ return mCardInfo.isAvailable();
+ }
+
+
+ bool hasEidCard() const
+ {
+ return mCardInfo.isEid();
}
@@ -68,6 +74,12 @@ class ReaderInfo
}
+ bool isRetryCounterDetermined() const
+ {
+ return mCardInfo.isRetryCounterDetermined();
+ }
+
+
bool isPinDeactivated() const
{
return mCardInfo.isPinDeactivated();
@@ -92,12 +104,6 @@ class ReaderInfo
}
- ReaderType getReaderType() const
- {
- return mReaderType;
- }
-
-
void setBasicReader(bool pIsBasicReader)
{
mBasicReader = pIsBasicReader;
@@ -122,20 +128,24 @@ class ReaderInfo
}
- void setExtendedLengthApduSupportCode(ExtendedLengthApduSupportCode pExtendedLengthApduSupportCode)
+ void setMaxApduLength(int pMaxApduLength)
{
- mExtendedLengthApduSupportCode = pExtendedLengthApduSupportCode;
+ mMaxApduLength = pMaxApduLength;
}
- ExtendedLengthApduSupportCode getExtendedLengthApduSupportCode() const
+ int getMaxApduLength() const
{
- return mExtendedLengthApduSupportCode;
+ return mMaxApduLength;
+ }
+
+
+ bool sufficientApduLength() const
+ {
+ return mMaxApduLength == 0 || mMaxApduLength >= 500;
}
};
} /* namespace governikus */
-
-REGISTER_META_TYPE(ReaderInfo)
diff --git a/src/card/base/ReaderManager.cpp b/src/card/base/ReaderManager.cpp
index 060e48d..db90627 100644
--- a/src/card/base/ReaderManager.cpp
+++ b/src/card/base/ReaderManager.cpp
@@ -1,7 +1,5 @@
/*!
- * ReaderManager.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "ReaderManager.h"
@@ -22,6 +20,7 @@ ReaderManager::ReaderManager()
: QObject()
, mThread()
, mWorker()
+ , mRemoteClient()
{
mThread.setObjectName(QStringLiteral("ReaderManagerThread"));
}
@@ -43,7 +42,7 @@ ReaderManager& ReaderManager::getInstance()
}
-void ReaderManager::init()
+void ReaderManager::init(const QSharedPointer& pRemoteClient)
{
if (mThread.isRunning())
{
@@ -53,27 +52,29 @@ void ReaderManager::init()
if (mWorker.isNull())
{
- mWorker = new ReaderManagerWorker();
+ mRemoteClient = pRemoteClient;
+ mWorker = new ReaderManagerWorker(pRemoteClient);
mWorker->moveToThread(&mThread);
connect(&mThread, &QThread::started, mWorker.data(), &ReaderManagerWorker::onThreadStarted);
connect(&mThread, &QThread::finished, mWorker.data(), &QObject::deleteLater);
connect(mWorker.data(), &ReaderManagerWorker::fireInitialized, this, &ReaderManager::fireInitialized);
+ connect(mWorker.data(), &ReaderManagerWorker::firePluginAdded, this, &ReaderManager::firePluginAdded);
connect(mWorker.data(), &ReaderManagerWorker::fireStatusChanged, this, &ReaderManager::fireStatusChanged);
+ connect(mWorker.data(), &ReaderManagerWorker::fireReaderAdded, this, &ReaderManager::fireReaderAdded);
+ connect(mWorker.data(), &ReaderManagerWorker::fireReaderRemoved, this, &ReaderManager::fireReaderRemoved);
+ connect(mWorker.data(), &ReaderManagerWorker::fireReaderDeviceError, this, &ReaderManager::fireReaderDeviceError);
+ connect(mWorker.data(), &ReaderManagerWorker::fireReaderPropertiesUpdated, this, &ReaderManager::fireReaderPropertiesUpdated);
connect(mWorker.data(), &ReaderManagerWorker::fireCardInserted, this, &ReaderManager::fireCardInserted);
connect(mWorker.data(), &ReaderManagerWorker::fireCardRemoved, this, &ReaderManager::fireCardRemoved);
connect(mWorker.data(), &ReaderManagerWorker::fireCardRetryCounterChanged, this, &ReaderManager::fireCardRetryCounterChanged);
- connect(mWorker.data(), &ReaderManagerWorker::fireReaderPropertiesUpdated, this, &ReaderManager::fireReaderPropertiesUpdated);
- connect(mWorker.data(), &ReaderManagerWorker::fireReaderAdded, this, &ReaderManager::fireReaderAdded);
- connect(mWorker.data(), &ReaderManagerWorker::fireReaderDeviceError, this, &ReaderManager::fireReaderDeviceError);
- connect(mWorker.data(), &ReaderManagerWorker::fireReaderConnected, this, &ReaderManager::fireReaderConnected);
- connect(mWorker.data(), &ReaderManagerWorker::fireReaderRemoved, this, &ReaderManager::fireReaderRemoved);
connect(this, &ReaderManager::fireReaderAdded, this, &ReaderManager::fireReaderEvent);
connect(this, &ReaderManager::fireReaderRemoved, this, &ReaderManager::fireReaderEvent);
connect(this, &ReaderManager::fireCardInserted, this, &ReaderManager::fireReaderEvent);
connect(this, &ReaderManager::fireCardRemoved, this, &ReaderManager::fireReaderEvent);
+ connect(this, &ReaderManager::fireReaderPropertiesUpdated, this, &ReaderManager::fireReaderEvent);
}
mThread.start();
@@ -87,12 +88,13 @@ void ReaderManager::shutdown()
qCDebug(card) << "Shutdown ReaderManager...";
mThread.requestInterruption(); // do not try to stop AGAIN from dtor
mThread.quit();
- qCDebug(card) << "Stopping..." << mThread.wait(2500);
+ mThread.wait(2500);
+ qCDebug(card) << "Stopping..." << mThread.isRunning();
}
}
-void ReaderManager::startScan()
+void ReaderManager::startScan(ReaderManagerPlugInType pType)
{
if (!mThread.isRunning())
{
@@ -100,11 +102,20 @@ void ReaderManager::startScan()
return;
}
- QMetaObject::invokeMethod(mWorker.data(), "startScan", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(mWorker.data(), "startScan", Qt::QueuedConnection, Q_ARG(ReaderManagerPlugInType, pType));
}
-void ReaderManager::stopScan()
+void ReaderManager::startScanAll()
+{
+ for (const auto& plugInType : Enum::getList())
+ {
+ startScan(plugInType);
+ }
+}
+
+
+void ReaderManager::stopScan(ReaderManagerPlugInType pType)
{
if (!mThread.isRunning())
{
@@ -112,7 +123,16 @@ void ReaderManager::stopScan()
return;
}
- QMetaObject::invokeMethod(mWorker.data(), "stopScan", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(mWorker.data(), "stopScan", Qt::QueuedConnection, Q_ARG(ReaderManagerPlugInType, pType));
+}
+
+
+void ReaderManager::stopScanAll()
+{
+ for (const auto& plugInType : Enum::getList())
+ {
+ stopScan(plugInType);
+ }
}
@@ -130,17 +150,17 @@ QVector ReaderManager::getReaderInfos(ReaderManagerPlugInType pType)
}
-QVector ReaderManager::getReaderInfos(const QVector& pTypes) const
+QVector ReaderManager::getReaderInfos(const ReaderFilter& pFilter) const
{
QVector list;
- QMetaObject::invokeMethod(mWorker.data(), "getReaderInfos", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVector, list), Q_ARG(const QVector &, pTypes));
+ QMetaObject::invokeMethod(mWorker.data(), "getReaderInfos", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVector, list), Q_ARG(ReaderFilter, pFilter));
return list;
}
ReaderInfo ReaderManager::getReaderInfo(const QString& pReaderName) const
{
- ReaderInfo info;
+ ReaderInfo info(pReaderName);
QMetaObject::invokeMethod(mWorker.data(), "getReaderInfo", Qt::BlockingQueuedConnection, Q_RETURN_ARG(ReaderInfo, info), Q_ARG(QString, pReaderName));
return info;
}
@@ -162,3 +182,9 @@ void ReaderManager::disconnectAllReaders()
{
QMetaObject::invokeMethod(mWorker.data(), "disconnectAllReaders", Qt::QueuedConnection);
}
+
+
+QSharedPointer ReaderManager::getRemoteClient()
+{
+ return mRemoteClient;
+}
diff --git a/src/card/base/ReaderManager.h b/src/card/base/ReaderManager.h
index c77c5f1..ce2bd78 100644
--- a/src/card/base/ReaderManager.h
+++ b/src/card/base/ReaderManager.h
@@ -1,5 +1,5 @@
/*!
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
@@ -8,6 +8,7 @@
#include "DeviceError.h"
#include "Reader.h"
#include "ReaderManagerWorker.h"
+#include "RemoteClient.h"
#include
#include
@@ -23,6 +24,7 @@ class ReaderManager
private:
QThread mThread;
QPointer mWorker;
+ QSharedPointer mRemoteClient;
protected:
ReaderManager();
@@ -35,23 +37,33 @@ class ReaderManager
* Initialize the reader manager service.
* The thread is started and the plug-ins are initialized, too.
*/
- void init();
+ void init(const QSharedPointer& pRemoteClient = QSharedPointer());
+
+ /*!
+ * Starts a scan for all device types.
+ */
+ void startScanAll();
/*!
* Starts a scan for devices if registered plugin don't scan anytime.
*/
- void startScan();
+ void startScan(ReaderManagerPlugInType pType);
+
+ /*!
+ * Stops scan for all device types.
+ */
+ void stopScanAll();
/*!
* Stops started scan for devices.
* Be aware that some plugins don't finish the whole scan if you
* abort it with stopScan!
*/
- void stopScan();
+ void stopScan(ReaderManagerPlugInType pType);
QVector getPlugInInfos() const;
QVector getReaderInfos(ReaderManagerPlugInType pType) const;
- QVector getReaderInfos(const QVector& pTypes = Enum::getList()) const;
+ virtual QVector getReaderInfos(const ReaderFilter& pFilter = ReaderFilter()) const;
ReaderInfo getReaderInfo(const QString& pReaderName) const;
/*!
@@ -83,12 +95,14 @@ class ReaderManager
void disconnectReader(const QString& pReaderName);
void disconnectAllReaders();
+ QSharedPointer getRemoteClient();
+
Q_SIGNALS:
+ void firePluginAdded(const ReaderManagerPlugInInfo& pInfo);
void fireStatusChanged(const ReaderManagerPlugInInfo& pInfo);
void fireReaderAdded(const QString& pReaderName);
- void fireReaderDeviceError(DeviceError pDeviceError);
- void fireReaderConnected(const QString& pReaderName);
void fireReaderRemoved(const QString& pReaderName);
+ void fireReaderDeviceError(DeviceError pDeviceError);
void fireReaderPropertiesUpdated(const QString& pReaderName);
void fireCardInserted(const QString& pReaderName);
void fireCardRemoved(const QString& pReaderName);
diff --git a/src/card/base/ReaderManagerPlugIn.cpp b/src/card/base/ReaderManagerPlugIn.cpp
index 87eb9ee..a114e2b 100644
--- a/src/card/base/ReaderManagerPlugIn.cpp
+++ b/src/card/base/ReaderManagerPlugIn.cpp
@@ -1,16 +1,44 @@
/*!
- * ReaderManagerPlugIn.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "ReaderManagerPlugIn.h"
using namespace governikus;
+
+void ReaderManagerPlugIn::onConnectToKnownReadersChanged()
+{
+}
+
+
ReaderManagerPlugIn::ReaderManagerPlugIn(ReaderManagerPlugInType pPlugInType,
bool pAvailable,
bool pPlugInEnabled)
: mInfo(pPlugInType, pPlugInEnabled, pAvailable)
+ , mScanInProgress(false)
+ , mConnectToKnownReaders(false)
{
}
+
+
+void ReaderManagerPlugIn::startScan()
+{
+ mScanInProgress = true;
+}
+
+
+void ReaderManagerPlugIn::stopScan()
+{
+ mScanInProgress = false;
+}
+
+
+void ReaderManagerPlugIn::setConnectToKnownReaders(bool pConnectToKnownReaders)
+{
+ if (mConnectToKnownReaders != pConnectToKnownReaders)
+ {
+ mConnectToKnownReaders = pConnectToKnownReaders;
+ onConnectToKnownReadersChanged();
+ }
+}
diff --git a/src/card/base/ReaderManagerPlugIn.h b/src/card/base/ReaderManagerPlugIn.h
index 8dbc262..d547877 100644
--- a/src/card/base/ReaderManagerPlugIn.h
+++ b/src/card/base/ReaderManagerPlugIn.h
@@ -1,16 +1,15 @@
/*!
- * ReaderManagerPlugIn.h
- *
* \brief PlugIn to control different kinds of reader managers that will be used in \ref ReaderManager.
* If you implement a class of this PlugIn you need to register it in \ref ReaderManager, otherwise it won't be used.
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
#include "DeviceError.h"
#include "ReaderManagerPlugInInfo.h"
+#include "RemoteDispatcher.h"
#include
#include
@@ -19,6 +18,7 @@ namespace governikus
{
class Reader;
+class RemoteClient;
class ReaderManagerPlugIn
: public QObject
@@ -27,6 +27,11 @@ class ReaderManagerPlugIn
ReaderManagerPlugInInfo mInfo;
protected:
+ bool mScanInProgress;
+ bool mConnectToKnownReaders;
+
+ virtual void onConnectToKnownReadersChanged();
+
void setReaderInfoEnabled(bool pEnabled)
{
if (mInfo.isEnabled() != pEnabled)
@@ -61,7 +66,7 @@ class ReaderManagerPlugIn
}
- virtual QList getReader() const = 0;
+ virtual QList getReaders() const = 0;
virtual void init()
@@ -75,22 +80,22 @@ class ReaderManagerPlugIn
}
- virtual void startScan()
- {
- }
+ virtual void startScan();
+ virtual void stopScan();
+ void setConnectToKnownReaders(bool pConnectToKnownReaders);
- virtual void stopScan()
+ virtual void setRemoteClient(const QSharedPointer& pRemoteClient)
{
+ Q_UNUSED(pRemoteClient);
}
Q_SIGNALS:
void fireStatusChanged(const ReaderManagerPlugInInfo& pInfo);
void fireReaderAdded(const QString& pReaderName);
- void fireReaderConnected(const QString& pReaderName);
- void fireReaderDeviceError(DeviceError pDeviceError);
void fireReaderRemoved(const QString& pReaderName);
+ void fireReaderDeviceError(DeviceError pDeviceError);
void fireCardInserted(const QString& pReaderName);
void fireCardRemoved(const QString& pReaderName);
void fireCardRetryCounterChanged(const QString& pReaderName);
diff --git a/src/card/base/ReaderManagerPlugInInfo.cpp b/src/card/base/ReaderManagerPlugInInfo.cpp
index af71a77..b3027b7 100644
--- a/src/card/base/ReaderManagerPlugInInfo.cpp
+++ b/src/card/base/ReaderManagerPlugInInfo.cpp
@@ -1,13 +1,18 @@
/*!
- * ReaderManagerPlugInInfo.cpp
- *
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "ReaderManagerPlugInInfo.h"
+#include "Initializer.h"
+
using namespace governikus;
+static Initializer::Entry X([] {
+ qRegisterMetaType("ReaderManagerPlugInInfo");
+ qRegisterMetaType("ReaderManagerPlugInType");
+ });
+
ReaderManagerPlugInInfo::ReaderManagerPlugInInfo(ReaderManagerPlugInType pType, bool pEnabled, bool pAvailable)
: mType(pType)
diff --git a/src/card/base/ReaderManagerPlugInInfo.h b/src/card/base/ReaderManagerPlugInInfo.h
index 6a07f01..c5ba276 100644
--- a/src/card/base/ReaderManagerPlugInInfo.h
+++ b/src/card/base/ReaderManagerPlugInInfo.h
@@ -1,26 +1,22 @@
/*!
- * ReaderManagerPlugInInfo.h
- *
* \brief Data object providing information about a reader manager plug-in.
*
- * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#pragma once
#include "EnumHelper.h"
-#include "MetaTypeHelper.h"
#include
#include
#include
-
namespace governikus
{
-defineEnumType(ReaderManagerPlugInType, UNKNOWN, PCSC, BLUETOOTH, NFC)
+defineEnumType(ReaderManagerPlugInType, UNKNOWN, PCSC, BLUETOOTH, NFC, REMOTE)
class ReaderManagerPlugInInfo
@@ -98,5 +94,3 @@ class ReaderManagerPlugInInfo
};
} /* namespace governikus */
-
-REGISTER_META_TYPE(ReaderManagerPlugInInfo)
diff --git a/src/card/base/ReaderManagerWorker.cpp b/src/card/base/ReaderManagerWorker.cpp
index f01db76..cd86060 100644
--- a/src/card/base/ReaderManagerWorker.cpp
+++ b/src/card/base/ReaderManagerWorker.cpp
@@ -1,10 +1,13 @@
/*!
- * \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
+ * \copyright Copyright (c) 2015-2017 Governikus GmbH & Co. KG, Germany
*/
-#include "Reader.h"
#include "ReaderManagerWorker.h"
+#include "Initializer.h"
+#include "Reader.h"
+#include "RemoteClient.h"
+
#include
#include
#include
@@ -13,10 +16,15 @@ Q_DECLARE_LOGGING_CATEGORY(card)
using namespace governikus;
-ReaderManagerWorker::ReaderManagerWorker()
+static Initializer::Entry X([] {
+ qRegisterMetaType >("QSharedPointer");
+ });
+
+
+ReaderManagerWorker::ReaderManagerWorker(const QSharedPointer& pRemoteClient)
: QObject()
+ , mRemoteClient(pRemoteClient)
, mPlugIns()
- , mScanStarted(false)
{
}
@@ -25,7 +33,7 @@ ReaderManagerWorker::~ReaderManagerWorker()
{
Q_ASSERT(thread() == QThread::currentThread());
- for (auto plugin : qAsConst(mPlugIns))
+ for (auto& plugin : qAsConst(mPlugIns))
{
qCDebug(card) << "Shutdown plugin:" << plugin->metaObject()->className();
plugin->shutdown();
@@ -62,6 +70,9 @@ void ReaderManagerWorker::registerPlugIns()
{
registerPlugIn(pluginInstance);
pluginInstance->init();
+ pluginInstance->setRemoteClient(mRemoteClient);
+
+ Q_EMIT firePluginAdded(pluginInstance->getInfo());
}
}
}
@@ -81,52 +92,45 @@ void ReaderManagerWorker::registerPlugIn(ReaderManagerPlugIn* pPlugIn)
mPlugIns.push_back(pPlugIn);
+ connect(pPlugIn, &ReaderManagerPlugIn::fireReaderAdded, this, &ReaderManagerWorker::fireReaderAdded);
+ connect(pPlugIn, &ReaderManagerPlugIn::fireReaderRemoved, this, &ReaderManagerWorker::fireReaderRemoved);
+ connect(pPlugIn, &ReaderManagerPlugIn::fireReaderDeviceError, this, &ReaderManagerWorker::fireReaderDeviceError);
+ connect(pPlugIn, &ReaderManagerPlugIn::fireReaderPropertiesUpdated, this, &ReaderManagerWorker::fireReaderPropertiesUpdated);
connect(pPlugIn, &ReaderManagerPlugIn::fireStatusChanged, this, &ReaderManagerWorker::fireStatusChanged);
connect(pPlugIn, &ReaderManagerPlugIn::fireCardInserted, this, &ReaderManagerWorker::fireCardInserted);
connect(pPlugIn, &ReaderManagerPlugIn::fireCardRemoved, this, &ReaderManagerWorker::fireCardRemoved);
connect(pPlugIn, &ReaderManagerPlugIn::fireCardRetryCounterChanged, this, &ReaderManagerWorker::fireCardRetryCounterChanged);
- connect(pPlugIn, &ReaderManagerPlugIn::fireReaderAdded, this, &ReaderManagerWorker::fireReaderAdded);
- connect(pPlugIn, &ReaderManagerPlugIn::fireReaderConnected, this, &ReaderManagerWorker::fireReaderConnected);
- connect(pPlugIn, &ReaderManagerPlugIn::fireReaderDeviceError, this, &ReaderManagerWorker::fireReaderDeviceError);
- connect(pPlugIn, &ReaderManagerPlugIn::fireReaderRemoved, this, &ReaderManagerWorker::fireReaderRemoved);
- connect(pPlugIn, &ReaderManagerPlugIn::fireReaderPropertiesUpdated, this, &ReaderManagerWorker::fireReaderPropertiesUpdated);
}
-void ReaderManagerWorker::startScan()
+void ReaderManagerWorker::startScan(ReaderManagerPlugInType pType)
{
Q_ASSERT(thread() == QThread::currentThread());
- if (mScanStarted)
+ for (auto& plugin : qAsConst(mPlugIns))
{
- qCWarning(card) << "Scan is already started, skip starting";
- return;
- }
-
- mScanStarted = true;
- for (auto plugin : qAsConst(mPlugIns))
- {
- qCDebug(card) << "Start scan on plugin:" << plugin->metaObject()->className();
- plugin->startScan();
+ if (plugin->getInfo().getPlugInType() == pType)
+ {
+ qCDebug(card) << "Start scan on plugin:" << plugin->metaObject()->className();
+ plugin->setConnectToKnownReaders(true);
+ plugin->startScan();
+ }
}
}
-void ReaderManagerWorker::stopScan()
+void ReaderManagerWorker::stopScan(ReaderManagerPlugInType pType)
{
Q_ASSERT(thread() == QThread::currentThread());
- if (!mScanStarted)
+ for (auto& plugin : qAsConst(mPlugIns))
{
- qCWarning(card) << "Scan is not started, skip stopping";
- return;
- }
-
- mScanStarted = false;
- for (auto plugin : qAsConst(mPlugIns))
- {
- qCDebug(card) << "Stop scan on plugin:" << plugin->metaObject()->className();
- plugin->stopScan();
+ if (plugin->getInfo().getPlugInType() == pType)
+ {
+ qCDebug(card) << "Stop scan on plugin:" << plugin->metaObject()->className();
+ plugin->setConnectToKnownReaders(false);
+ plugin->stopScan();
+ }
}
}
@@ -146,23 +150,21 @@ QVector ReaderManagerWorker::getPlugInInfos() const
}
-QVector ReaderManagerWorker::getReaderInfos(const QVector& pTypes) const
+QVector ReaderManagerWorker::getReaderInfos(const ReaderFilter& pFilter) const
{
Q_ASSERT(thread() == QThread::currentThread());
QVector list;
- for (const auto plugIn : qAsConst(mPlugIns))
+ const QVector& plugIns = pFilter.apply(mPlugIns);
+ for (const auto& plugIn : plugIns)
{
- if (pTypes.contains(plugIn->getInfo().getPlugInType()))
+ const auto& readerList = plugIn->getReaders();
+ for (const Reader* reader : readerList)
{
- const auto& readerList = plugIn->getReader();
- for (const Reader* reader : readerList)
- {
- list += reader->getReaderInfo();
- }
+ list += reader->getReaderInfo();
}
}
- return list;
+ return pFilter.apply(list);
}
@@ -171,7 +173,7 @@ ReaderInfo ReaderManagerWorker::getReaderInfo(const QString& pReaderName) const
Q_ASSERT(thread() == QThread::currentThread());
const Reader* reader = getReader(pReaderName);
- return reader ? reader->getReaderInfo() : ReaderInfo();
+ return reader ? reader->getReaderInfo() : ReaderInfo(pReaderName);
}
@@ -179,9 +181,9 @@ Reader* ReaderManagerWorker::getReader(const QString& pReaderName) const
{
Q_ASSERT(thread() == QThread::currentThread());
- for (auto plugin : qAsConst(mPlugIns))
+ for (auto& plugin : qAsConst(mPlugIns))
{
- const auto& readerList = plugin->getReader();
+ const auto& readerList = plugin->getReaders();
for (Reader* reader : readerList)
{
if (reader->getName() == pReaderName)
@@ -235,19 +237,8 @@ void ReaderManagerWorker::disconnectAllReaders()
{
Q_ASSERT(thread() == QThread::currentThread());
- for (auto& info : getReaderInfos(Enum