Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move QPCSC to digidoc and increase version number #1296

Merged
merged 1 commit into from
Nov 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 9 additions & 17 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
with:
workflow: build.yml
branch: master
name: macOS
name: macos
path: libdigidocpp-pkg
repo: open-eid/libdigidocpp
- name: Install dependencies
Expand All @@ -33,7 +33,7 @@ jobs:
HASH=($(shasum prepare_osx_build_environment.sh))
curl -O -L -s https://installer.id.ee/media/github/opensc_0.23.0.pkg
curl -O -L -s https://installer.id.ee/media/github/${HASH}.zip
sudo installer -verboseR -pkg libdigidocpp-pkg/libdigidocpp*.pkg -target /
sudo installer -verboseR -pkg libdigidocpp-pkg/build/macos/libdigidocpp*.pkg -target /
sudo installer -verboseR -pkg opensc_*.pkg -target /
sudo unzip -qq -d /Library/Developer ${HASH}.zip
- name: Build
Expand All @@ -56,7 +56,7 @@ jobs:
container: ubuntu:${{ matrix.container }}
strategy:
matrix:
container: ['20.04', '22.04', '24.04']
container: ['20.04', '22.04', '24.04', '24.10']
env:
DEBIAN_FRONTEND: noninteractive
DEBFULLNAME: github-actions
Expand Down Expand Up @@ -103,18 +103,12 @@ jobs:
container: fedora:${{ matrix.container }}
strategy:
matrix:
container: [39, 40]
container: [40, 41]
steps:
- name: Install Deps
run: |
dnf install -y --setopt=install_weak_deps=False \
git gcc-c++ cmake rpm-build gettext openssl-devel openldap-devel pcsc-lite-devel qt6-qtsvg-devel qt6-qttools-devel flatbuffers-devel flatbuffers-compiler zlib-devel
- name: Install CMake
if: matrix.container == 39
run: |
dnf install -y --setopt=install_weak_deps=False wget
wget -q https://github.com/Kitware/CMake/releases/download/v3.28.1/cmake-3.28.1-linux-x86_64.sh
sh cmake-3.28.1-linux-x86_64.sh --skip-license --prefix=/usr/local
- name: Checkout
uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -143,10 +137,8 @@ jobs:
runs-on: ${{ matrix.image }}
strategy:
matrix:
vcver: [142, 143]
vcver: [143]
include:
- vcver: 142
image: windows-2019
- vcver: 143
image: windows-2022
env:
Expand Down Expand Up @@ -208,7 +200,7 @@ jobs:
coverity:
name: Run Coverity tests
if: github.repository == 'open-eid/DigiDoc4-Client' && contains(github.ref, 'coverity_scan')
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
env:
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
PROJECTNAME: open-eid/DigiDoc4-Client
Expand All @@ -222,7 +214,7 @@ jobs:
with:
workflow: build.yml
branch: master
name: ubuntu_22.04
name: ubuntu_24.04
path: libdigidocpp-pkg
repo: open-eid/libdigidocpp
- name: Install dependencies
Expand Down Expand Up @@ -251,7 +243,7 @@ jobs:
codeql:
name: Run CodeQL tests
if: github.repository == 'open-eid/DigiDoc4-Client'
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
permissions:
security-events: write
steps:
Expand All @@ -264,7 +256,7 @@ jobs:
with:
workflow: build.yml
branch: master
name: ubuntu_22.04
name: ubuntu_24.04
path: libdigidocpp-pkg
repo: open-eid/libdigidocpp
- name: Install dependencies
Expand Down
5 changes: 3 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16)
if(NOT EXISTS ${CMAKE_SOURCE_DIR}/cmake/modules/VersionInfo.cmake)
message(FATAL_ERROR "cmake submodule directory empty, did you 'git clone --recursive'?")
endif()
project(qdigidoc4 VERSION 4.6.1)
project(qdigidoc4 VERSION 4.7.0)

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
Expand All @@ -11,7 +11,6 @@ set(CMAKE_AUTOMOC ON)
include( GNUInstallDirs )
include( VersionInfo )

find_package( PKCS11 )
find_package(LibDigiDocpp 4.0.0 REQUIRED)
find_package( LDAP REQUIRED )
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
Expand All @@ -25,6 +24,8 @@ set_env(CDOC2_GET_URL "https://cdoc2-keyserver-get" CACHE STRING "CDoc 2.0 Key S
set_env(CDOC2_POST_URL "https://cdoc2-keyserver-post" CACHE STRING "CDoc 2.0 Key Server post URL")
set_env( MOBILEID_URL "https://dd-mid.ria.ee/mid-api" CACHE STRING "URL for Mobile-ID" )
set_env( SMARTID_URL "https://dd-sid.ria.ee/v1" CACHE STRING "URL for Smart-ID" )
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION YES)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG NO)
if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
Expand Down
67 changes: 58 additions & 9 deletions client/Application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

#include "Application.h"

#include "Common.h"
#include "Configuration.h"
#include "MainWindow.h"
#include "QSigner.h"
#include "QSmartCard.h"
Expand All @@ -40,7 +42,6 @@ class MacMenuBar {};
#include "dialogs/WarningDialog.h"
#include "effects/Overlay.h"

#include <common/Configuration.h>
#include <optional>

#include <digidocpp/Container.h>
Expand Down Expand Up @@ -308,13 +309,35 @@ class Application::Private
};

Application::Application( int &argc, char **argv )
#ifdef Q_OS_MAC
: Common(argc, argv, QStringLiteral("qdigidoc4"), QStringLiteral(":/images/Icon.svg"))
#else
: Common(argc, argv, QStringLiteral("qdigidoc4"), QStringLiteral(":/images/digidoc_128.png"))
#endif
: BaseApplication(argc, argv)
, d(new Private)
{
setApplicationName(QStringLiteral("qdigidoc4"));
setApplicationVersion(QStringLiteral("%1.%2.%3.%4")
.arg( MAJOR_VER ).arg( MINOR_VER ).arg( RELEASE_VER ).arg( BUILD_VER ) );
setOrganizationDomain(QStringLiteral("ria.ee"));
setOrganizationName(QStringLiteral("RIA"));
setWindowIcon(QIcon(QStringLiteral(":/images/Icon.svg")));
if(QFile::exists(QStringLiteral("%1/%2.log").arg(QDir::tempPath(), applicationName())))
qInstallMessageHandler(msgHandler);

Q_INIT_RESOURCE(common_tr);
#if defined(Q_OS_WIN)
AllowSetForegroundWindow( ASFW_ANY );
#ifdef NDEBUG
setLibraryPaths({ applicationDirPath() });
#endif
#elif defined(Q_OS_MAC)
qputenv("OPENSSL_CONF", applicationDirPath().toUtf8() + "../Resources/openssl.cnf");
#ifdef NDEBUG
setLibraryPaths({ applicationDirPath() + "/../PlugIns" });
#endif
#endif
setStyleSheet(QStringLiteral(
"QDialogButtonBox { dialogbuttonbox-buttons-have-icons: 0; }\n"));

QNetworkProxyFactory::setUseSystemConfiguration(true);

QStringList args = arguments();
args.removeFirst();
#ifndef Q_OS_MAC
Expand Down Expand Up @@ -432,7 +455,7 @@ Application::Application( int &argc, char **argv )
updateTSLCache(QDateTime::currentDateTimeUtc().addDays(-7));

digidoc::initialize(applicationName().toUtf8().constData(), QStringLiteral("%1/%2 (%3)")
.arg(applicationName(), applicationVersion(), applicationOs()).toUtf8().constData(),
.arg(applicationName(), applicationVersion(), Common::applicationOs()).toUtf8().constData(),
[](const digidoc::Exception *ex) {
qDebug() << "TSL loading finished";
Q_EMIT qApp->TSLLoadingFinished();
Expand Down Expand Up @@ -627,9 +650,9 @@ bool Application::event(QEvent *event)
// Load here because cocoa NSApplication overides events
case QEvent::ApplicationActivate:
initMacEvents();
return Common::event(event);
return BaseApplication::event(event);
#endif
default: return Common::event(event);
default: return BaseApplication::event(event);
}
}

Expand Down Expand Up @@ -756,6 +779,32 @@ QWidget* Application::mainWindow()
return nullptr;
}

void Application::msgHandler(QtMsgType type, const QMessageLogContext &ctx, const QString &msg)
{
QFile f(QStringLiteral("%1/%2.log").arg(QDir::tempPath(), applicationName()));
if(!f.open( QFile::Append ))
return;
f.write(QDateTime::currentDateTime().toString(QStringLiteral("yyyy-MM-dd hh:mm:ss ")).toUtf8());
switch(type)
{
case QtDebugMsg: f.write("D"); break;
case QtWarningMsg: f.write("W"); break;
case QtCriticalMsg: f.write("C"); break;
case QtFatalMsg: f.write("F"); break;
default: f.write("I"); break;
}
f.write(QStringLiteral(" %1 ").arg(QLatin1String(ctx.category)).toUtf8());
if(ctx.line > 0)
{
f.write(QStringLiteral("%1:%2 \"%3\" ")
.arg(QFileInfo(QString::fromLatin1(ctx.file)).fileName())
.arg(ctx.line)
.arg(QLatin1String(ctx.function)).toUtf8());
}
f.write(msg.toUtf8());
f.write("\n");
}

bool Application::notify(QObject *object, QEvent *event)
{
try
Expand Down
18 changes: 12 additions & 6 deletions client/Application.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,15 @@

#pragma once

#include <common/Common.h>
#include <QtCore/QtGlobal>

#include <QtCore/QStringList>
#include <QtCore/QVariant>
#ifdef Q_OS_MAC
#include <QtWidgets/QApplication>
using BaseApplication = QApplication;
#else
#include "qtsingleapplication/src/QtSingleApplication"
using BaseApplication = QtSingleApplication;
#endif

#if defined(qApp)
#undef qApp
Expand All @@ -33,12 +38,12 @@ namespace digidoc { class Exception; }
class Configuration;
class QAction;
class QSigner;
class Application final: public Common
class Application final: public BaseApplication
{
Q_OBJECT

public:
enum ConfParameter
enum ConfParameter : quint8
{
SiVaUrl,
ProxyHost,
Expand Down Expand Up @@ -86,6 +91,7 @@ private Q_SLOTS:
private:
bool event(QEvent *event) final;
static void closeWindow();
static void msgHandler(QtMsgType type, const QMessageLogContext &ctx, const QString &msg);
static void parseArgs(const QString &msg = {});
static void parseArgs(QStringList args);
static void showWarning(const QString &msg, const digidoc::Exception &e);
Expand All @@ -102,7 +108,7 @@ private Q_SLOTS:
class REOpenEvent: public QEvent
{
public:
enum { Type = QEvent::User + 1 };
enum : quint16 { Type = QEvent::User + 1 };
REOpenEvent(): QEvent( QEvent::Type(Type) ) {}
};

Expand Down
7 changes: 5 additions & 2 deletions client/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE
QCardLock.h
QCryptoBackend.cpp
QCryptoBackend.h
QPCSC.cpp
QPCSC_p.h
QPCSC.h
QPKCS11.cpp
QPKCS11.h
QSigner.cpp
Expand Down Expand Up @@ -118,7 +121,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}
MACOSX_BUNDLE_GUI_IDENTIFIER "ee.ria.${PROJECT_NAME}"
)
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR} ${LIBDIGIDOCPP_INCLUDE_DIR})
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBDIGIDOCPP_INCLUDE_DIR})
target_compile_definitions(${PROJECT_NAME} PRIVATE
CDOC2_GET_URL="${CDOC2_GET_URL}"
CDOC2_POST_URL="${CDOC2_POST_URL}"
Expand Down Expand Up @@ -160,6 +163,7 @@ if( APPLE )
set_source_files_properties( Application_mac.mm dialogs/CertificateDetails_mac.mm PROPERTIES COMPILE_FLAGS "-fobjc-arc" )
set_source_files_properties( LdapSearch.cpp PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations" )
target_link_libraries(${PROJECT_NAME} "-framework Quartz" "-fobjc-arc")
find_library(PKCS11_MODULE NAMES opensc-pkcs11.so HINTS /Library/OpenSC/lib)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND cp -a ${PKCS11_MODULE} $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND mkdir -p $<TARGET_BUNDLE_CONTENT_DIR:${PROJECT_NAME}>/Library/QuickLook
Expand Down Expand Up @@ -229,7 +233,6 @@ elseif(WIN32)
-ext WixToolset.UI.wixext
-bv WixUIDialogBmp=${CMAKE_SOURCE_DIR}/cmake/modules/dlgbmp.bmp
-bv WixUIBannerBmp=${CMAKE_SOURCE_DIR}/cmake/modules/banner.bmp
-d MSI_VERSION=${VERSION}
-d ico_path=${CMAKE_CURRENT_SOURCE_DIR}/images/digidoc.ico
-d libs_path=${LIBS_PATH}
-d client_path=$<TARGET_FILE:${PROJECT_NAME}>
Expand Down
6 changes: 4 additions & 2 deletions client/CheckConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "CheckConnection.h"

#include "Application.h"
#include "Common.h"

#include <QtCore/QCoreApplication>
#include <QtCore/QEventLoop>
Expand All @@ -42,7 +43,6 @@ bool CheckConnection::check(const QUrl &url)
return m_error == QNetworkReply::NoError;
}

QNetworkReply::NetworkError CheckConnection::error() const { return m_error; }
QString CheckConnection::errorDetails() const { return qtmessage; }
QString CheckConnection::errorString() const
{
Expand Down Expand Up @@ -106,8 +106,10 @@ QSslConfiguration CheckConnection::sslConfiguration(const QByteArray &add)
{
QSslConfiguration ssl = QSslConfiguration::defaultConfiguration();
#ifdef CONFIG_URL
const auto list = Application::confValue(QLatin1String("CERT-BUNDLE")).toArray();
QList<QSslCertificate> trusted;
for(const auto &cert: Application::confValue(QLatin1String("CERT-BUNDLE")).toArray())
trusted.reserve(list.size());
for(const auto &cert: list)
trusted.append(QSslCertificate(QByteArray::fromBase64(cert.toString().toLatin1()), QSsl::Der));
if(!add.isEmpty())
trusted.append(QSslCertificate(QByteArray::fromBase64(add), QSsl::Der));
Expand Down
1 change: 0 additions & 1 deletion client/CheckConnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ class CheckConnection
{
public:
bool check(const QUrl &url = QStringLiteral("https://id.eesti.ee/config.json"));
QNetworkReply::NetworkError error() const;
QString errorString() const;
QString errorDetails() const;

Expand Down
3 changes: 2 additions & 1 deletion client/Diagnostics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "Diagnostics.h"

#include "Application.h"
#include "Common.h"
#include "QPCSC.h"
#include "Settings.h"

Expand Down Expand Up @@ -148,6 +149,6 @@ void Diagnostics::generalInfo(QTextStream &s)
}

#ifdef Q_OS_WIN
s << "<b>" << tr("Smart Card reader drivers") << ":</b><br />" << QPCSC::instance().drivers().join(QLatin1String("<br />"));
s << "<b>" << tr("Smart Card reader drivers") << ":</b><br />" << Common::drivers().join(QLatin1String("<br />"));
#endif
}
1 change: 1 addition & 0 deletions client/Diagnostics_unix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

#include "Common.h"

#include <QtCore/QCoreApplication>
#include <QtCore/QFile>
#include <QtCore/QRegularExpression>
#include <QtCore/QTextStream>
Expand Down
3 changes: 2 additions & 1 deletion client/Diagnostics_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

#include "Common.h"

#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
#include <QtCore/QRegularExpression>
#include <QtCore/QSettings>
Expand Down Expand Up @@ -145,7 +146,7 @@ void Diagnostics::run()
+ ";C:\\Program Files\\Open-EID"
+ ";C:\\Program Files\\EstIDMinidriver Minidriver"
+ ";C:\\Program Files (x86)\\EstIDMinidriver Minidriver");
SetDllDirectory(LPCWSTR(qApp->applicationDirPath().utf16()));
SetDllDirectory(LPCWSTR(QCoreApplication::applicationDirPath().utf16()));
static const QStringList dlls{
"digidocpp", "qdigidoc4.exe", "EsteidShellExtension", "id-updater.exe",
"EstIDMinidriver", "EstIDMinidriver64", "web-eid.exe",
Expand Down
Loading
Loading