Skip to content

Commit 0e471e3

Browse files
committed
Move QPCSC to digidoc
IB-7927 Signed-off-by: Raul Metsma <[email protected]>
1 parent cd8d216 commit 0e471e3

19 files changed

+870
-31
lines changed

CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16)
22
if(NOT EXISTS ${CMAKE_SOURCE_DIR}/cmake/modules/VersionInfo.cmake)
33
message(FATAL_ERROR "cmake submodule directory empty, did you 'git clone --recursive'?")
44
endif()
5-
project(qdigidoc4 VERSION 4.6.1)
5+
project(qdigidoc4 VERSION 4.7.0)
66

77
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
88
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@@ -25,6 +25,8 @@ set_env(CDOC2_GET_URL "https://cdoc2-keyserver-get" CACHE STRING "CDoc 2.0 Key S
2525
set_env(CDOC2_POST_URL "https://cdoc2-keyserver-post" CACHE STRING "CDoc 2.0 Key Server post URL")
2626
set_env( MOBILEID_URL "https://dd-mid.ria.ee/mid-api" CACHE STRING "URL for Mobile-ID" )
2727
set_env( SMARTID_URL "https://dd-sid.ria.ee/v1" CACHE STRING "URL for Smart-ID" )
28+
set(CMAKE_CXX_STANDARD 20)
29+
set(CMAKE_CXX_STANDARD_REQUIRED YES)
2830
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION YES)
2931
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG NO)
3032
if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")

client/Application.cpp

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
#include "Application.h"
2323

24+
#include "Common.h"
25+
#include "Configuration.h"
2426
#include "MainWindow.h"
2527
#include "QSigner.h"
2628
#include "QSmartCard.h"
@@ -40,7 +42,6 @@ class MacMenuBar {};
4042
#include "dialogs/WarningDialog.h"
4143
#include "effects/Overlay.h"
4244

43-
#include <common/Configuration.h>
4445
#include <optional>
4546

4647
#include <digidocpp/Container.h>
@@ -308,13 +309,35 @@ class Application::Private
308309
};
309310

310311
Application::Application( int &argc, char **argv )
311-
#ifdef Q_OS_MAC
312-
: Common(argc, argv, QStringLiteral("qdigidoc4"), QStringLiteral(":/images/Icon.svg"))
313-
#else
314-
: Common(argc, argv, QStringLiteral("qdigidoc4"), QStringLiteral(":/images/digidoc_128.png"))
315-
#endif
312+
: BaseApplication(argc, argv)
316313
, d(new Private)
317314
{
315+
setApplicationName(QStringLiteral("qdigidoc4"));
316+
setApplicationVersion(QStringLiteral("%1.%2.%3.%4")
317+
.arg( MAJOR_VER ).arg( MINOR_VER ).arg( RELEASE_VER ).arg( BUILD_VER ) );
318+
setOrganizationDomain(QStringLiteral("ria.ee"));
319+
setOrganizationName(QStringLiteral("RIA"));
320+
setWindowIcon(QIcon(QStringLiteral(":/images/Icon.svg")));
321+
if(QFile::exists(QStringLiteral("%1/%2.log").arg(QDir::tempPath(), applicationName())))
322+
qInstallMessageHandler(msgHandler);
323+
324+
Q_INIT_RESOURCE(common_tr);
325+
#if defined(Q_OS_WIN)
326+
AllowSetForegroundWindow( ASFW_ANY );
327+
#ifdef NDEBUG
328+
setLibraryPaths({ applicationDirPath() });
329+
#endif
330+
#elif defined(Q_OS_MAC)
331+
qputenv("OPENSSL_CONF", applicationDirPath().toUtf8() + "../Resources/openssl.cnf");
332+
#ifdef NDEBUG
333+
setLibraryPaths({ applicationDirPath() + "/../PlugIns" });
334+
#endif
335+
#endif
336+
setStyleSheet(QStringLiteral(
337+
"QDialogButtonBox { dialogbuttonbox-buttons-have-icons: 0; }\n"));
338+
339+
QNetworkProxyFactory::setUseSystemConfiguration(true);
340+
318341
QStringList args = arguments();
319342
args.removeFirst();
320343
#ifndef Q_OS_MAC
@@ -432,7 +455,7 @@ Application::Application( int &argc, char **argv )
432455
updateTSLCache(QDateTime::currentDateTimeUtc().addDays(-7));
433456

434457
digidoc::initialize(applicationName().toUtf8().constData(), QStringLiteral("%1/%2 (%3)")
435-
.arg(applicationName(), applicationVersion(), applicationOs()).toUtf8().constData(),
458+
.arg(applicationName(), applicationVersion(), Common::applicationOs()).toUtf8().constData(),
436459
[](const digidoc::Exception *ex) {
437460
qDebug() << "TSL loading finished";
438461
Q_EMIT qApp->TSLLoadingFinished();
@@ -627,9 +650,9 @@ bool Application::event(QEvent *event)
627650
// Load here because cocoa NSApplication overides events
628651
case QEvent::ApplicationActivate:
629652
initMacEvents();
630-
return Common::event(event);
653+
return BaseApplication::event(event);
631654
#endif
632-
default: return Common::event(event);
655+
default: return BaseApplication::event(event);
633656
}
634657
}
635658

@@ -756,6 +779,32 @@ QWidget* Application::mainWindow()
756779
return nullptr;
757780
}
758781

782+
void Application::msgHandler(QtMsgType type, const QMessageLogContext &ctx, const QString &msg)
783+
{
784+
QFile f(QStringLiteral("%1/%2.log").arg(QDir::tempPath(), applicationName()));
785+
if(!f.open( QFile::Append ))
786+
return;
787+
f.write(QDateTime::currentDateTime().toString(QStringLiteral("yyyy-MM-dd hh:mm:ss ")).toUtf8());
788+
switch(type)
789+
{
790+
case QtDebugMsg: f.write("D"); break;
791+
case QtWarningMsg: f.write("W"); break;
792+
case QtCriticalMsg: f.write("C"); break;
793+
case QtFatalMsg: f.write("F"); break;
794+
default: f.write("I"); break;
795+
}
796+
f.write(QStringLiteral(" %1 ").arg(QLatin1String(ctx.category)).toUtf8());
797+
if(ctx.line > 0)
798+
{
799+
f.write(QStringLiteral("%1:%2 \"%3\" ")
800+
.arg(QFileInfo(QString::fromLatin1(ctx.file)).fileName())
801+
.arg(ctx.line)
802+
.arg(QLatin1String(ctx.function)).toUtf8());
803+
}
804+
f.write(msg.toUtf8());
805+
f.write("\n");
806+
}
807+
759808
bool Application::notify(QObject *object, QEvent *event)
760809
{
761810
try

client/Application.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,15 @@
1919

2020
#pragma once
2121

22-
#include <common/Common.h>
22+
#include <QtCore/QtGlobal>
2323

24-
#include <QtCore/QStringList>
25-
#include <QtCore/QVariant>
24+
#ifdef Q_OS_MAC
25+
#include <QtWidgets/QApplication>
26+
using BaseApplication = QApplication;
27+
#else
28+
#include "qtsingleapplication/src/QtSingleApplication"
29+
using BaseApplication = QtSingleApplication;
30+
#endif
2631

2732
#if defined(qApp)
2833
#undef qApp
@@ -33,12 +38,12 @@ namespace digidoc { class Exception; }
3338
class Configuration;
3439
class QAction;
3540
class QSigner;
36-
class Application final: public Common
41+
class Application final: public BaseApplication
3742
{
3843
Q_OBJECT
3944

4045
public:
41-
enum ConfParameter
46+
enum ConfParameter : quint8
4247
{
4348
SiVaUrl,
4449
ProxyHost,
@@ -86,6 +91,7 @@ private Q_SLOTS:
8691
private:
8792
bool event(QEvent *event) final;
8893
static void closeWindow();
94+
static void msgHandler(QtMsgType type, const QMessageLogContext &ctx, const QString &msg);
8995
static void parseArgs(const QString &msg = {});
9096
static void parseArgs(QStringList args);
9197
static void showWarning(const QString &msg, const digidoc::Exception &e);
@@ -102,7 +108,7 @@ private Q_SLOTS:
102108
class REOpenEvent: public QEvent
103109
{
104110
public:
105-
enum { Type = QEvent::User + 1 };
111+
enum : quint16 { Type = QEvent::User + 1 };
106112
REOpenEvent(): QEvent( QEvent::Type(Type) ) {}
107113
};
108114

client/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE
7373
QCardLock.h
7474
QCryptoBackend.cpp
7575
QCryptoBackend.h
76+
QPCSC.cpp
77+
QPCSC_p.h
78+
QPCSC.h
7679
QPKCS11.cpp
7780
QPKCS11.h
7881
QSigner.cpp
@@ -118,7 +121,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
118121
MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}
119122
MACOSX_BUNDLE_GUI_IDENTIFIER "ee.ria.${PROJECT_NAME}"
120123
)
121-
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR} ${LIBDIGIDOCPP_INCLUDE_DIR})
124+
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBDIGIDOCPP_INCLUDE_DIR})
122125
target_compile_definitions(${PROJECT_NAME} PRIVATE
123126
CDOC2_GET_URL="${CDOC2_GET_URL}"
124127
CDOC2_POST_URL="${CDOC2_POST_URL}"
@@ -229,7 +232,6 @@ elseif(WIN32)
229232
-ext WixToolset.UI.wixext
230233
-bv WixUIDialogBmp=${CMAKE_SOURCE_DIR}/cmake/modules/dlgbmp.bmp
231234
-bv WixUIBannerBmp=${CMAKE_SOURCE_DIR}/cmake/modules/banner.bmp
232-
-d MSI_VERSION=${VERSION}
233235
-d ico_path=${CMAKE_CURRENT_SOURCE_DIR}/images/digidoc.ico
234236
-d libs_path=${LIBS_PATH}
235237
-d client_path=$<TARGET_FILE:${PROJECT_NAME}>

client/CheckConnection.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "CheckConnection.h"
2121

2222
#include "Application.h"
23+
#include "Common.h"
2324

2425
#include <QtCore/QCoreApplication>
2526
#include <QtCore/QEventLoop>
@@ -106,8 +107,10 @@ QSslConfiguration CheckConnection::sslConfiguration(const QByteArray &add)
106107
{
107108
QSslConfiguration ssl = QSslConfiguration::defaultConfiguration();
108109
#ifdef CONFIG_URL
110+
const auto list = Application::confValue(QLatin1String("CERT-BUNDLE")).toArray();
109111
QList<QSslCertificate> trusted;
110-
for(const auto &cert: Application::confValue(QLatin1String("CERT-BUNDLE")).toArray())
112+
trusted.reserve(list.size());
113+
for(const auto &cert: list)
111114
trusted.append(QSslCertificate(QByteArray::fromBase64(cert.toString().toLatin1()), QSsl::Der));
112115
if(!add.isEmpty())
113116
trusted.append(QSslCertificate(QByteArray::fromBase64(add), QSsl::Der));

client/Diagnostics.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "Diagnostics.h"
2020

2121
#include "Application.h"
22+
#include "Common.h"
2223
#include "QPCSC.h"
2324
#include "Settings.h"
2425

@@ -142,6 +143,6 @@ void Diagnostics::generalInfo(QTextStream &s)
142143
}
143144

144145
#ifdef Q_OS_WIN
145-
s << "<b>" << tr("Smart Card reader drivers") << ":</b><br />" << QPCSC::instance().drivers().join(QLatin1String("<br />"));
146+
s << "<b>" << tr("Smart Card reader drivers") << ":</b><br />" << Common::drivers().join(QLatin1String("<br />"));
146147
#endif
147148
}

client/Diagnostics_unix.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "Common.h"
2323

24+
#include <QtCore/QCoreApplication>
2425
#include <QtCore/QFile>
2526
#include <QtCore/QRegularExpression>
2627
#include <QtCore/QTextStream>

client/Diagnostics_win.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "Common.h"
2323

24+
#include <QtCore/QCoreApplication>
2425
#include <QtCore/QProcess>
2526
#include <QtCore/QRegularExpression>
2627
#include <QtCore/QSettings>
@@ -145,7 +146,7 @@ void Diagnostics::run()
145146
+ ";C:\\Program Files\\Open-EID"
146147
+ ";C:\\Program Files\\EstIDMinidriver Minidriver"
147148
+ ";C:\\Program Files (x86)\\EstIDMinidriver Minidriver");
148-
SetDllDirectory(LPCWSTR(qApp->applicationDirPath().utf16()));
149+
SetDllDirectory(LPCWSTR(QCoreApplication::applicationDirPath().utf16()));
149150
static const QStringList dlls{
150151
"digidocpp", "qdigidoc4.exe", "EsteidShellExtension", "id-updater.exe",
151152
"EstIDMinidriver", "EstIDMinidriver64", "web-eid.exe",

client/QCNG.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include "QCNG.h"
2121

22+
#include "QPCSC.h"
2223
#include "SslCertificate.h"
2324
#include "TokenData.h"
2425

0 commit comments

Comments
 (0)