diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 310226633..e9f345e06 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,237 +1,241 @@ # target_include_directories does not handle empty include paths include_directories(${GPGME_INCLUDES}) add_definitions(-DTRANSLATION_DOMAIN=\"libkleopatra\") #add_definitions( -DQT_NO_CAST_FROM_ASCII ) #add_definitions( -DQT_NO_CAST_TO_ASCII ) kde_enable_exceptions() add_definitions( -DGPGMEPP_ERR_SOURCE_DEFAULT=13 ) # 13 is GPG_ERR_SOURCE_KLEO, even if gpg-error's too old to know about add_subdirectory( pics ) if (BUILD_TESTING) add_subdirectory( tests ) endif() ########### next target ############### set(libkleo_core_SRCS kleo/checksumdefinition.cpp kleo/debug.cpp kleo/defaultkeyfilter.cpp kleo/defaultkeygenerationjob.cpp kleo/dn.cpp kleo/enum.cpp kleo/kconfigbasedkeyfilter.cpp kleo/keyfiltermanager.cpp kleo/keygroup.cpp kleo/keyresolver.cpp kleo/keyresolvercore.cpp kleo/kleoexception.cpp kleo/oidmap.cpp models/keycache.cpp models/keylistmodel.cpp models/keylistmodelinterface.cpp models/keylistsortfilterproxymodel.cpp models/keyrearrangecolumnsproxymodel.cpp models/subkeylistmodel.cpp models/useridlistmodel.cpp utils/filesystemwatcher.cpp utils/formatting.cpp utils/classify.cpp utils/gnupg.cpp utils/gnupg-registry.c utils/hex.cpp utils/compat.cpp + utils/cryptoconfig.cpp + utils/test.cpp ) ecm_qt_declare_logging_category(libkleo_core_SRCS HEADER libkleo_debug.h IDENTIFIER LIBKLEO_LOG CATEGORY_NAME org.kde.pim.libkleo DESCRIPTION "libkleo (kleo_core)" EXPORT LIBKLEO ) set(libkleo_ui_common_SRCS ui/dnattributeorderconfigwidget.cpp ui/kdhorizontalline.cpp ui/filenamerequester.cpp ui/messagebox.cpp ui/cryptoconfigmodule.cpp ui/cryptoconfigdialog.cpp ui/directoryserviceswidget.cpp ui/progressbar.cpp ui/progressdialog.cpp ui/auditlogviewer.cpp ) ecm_qt_declare_logging_category(libkleo_ui_common_SRCS HEADER kleo_ui_debug.h IDENTIFIER KLEO_UI_LOG CATEGORY_NAME org.kde.pim.kleo_ui DESCRIPTION "libkleo (kleo_ui)" OLD_CATEGORY_NAMES log_kleo_ui EXPORT LIBKLEO ) set(libkleo_ui_SRCS # make this a separate lib. ui/keylistview.cpp ui/keyselectiondialog.cpp ui/keyrequester.cpp ui/keyapprovaldialog.cpp ui/newkeyapprovaldialog.cpp ui/keyselectioncombo.cpp ) ki18n_wrap_ui(libkleo_ui_common_SRCS ui/directoryserviceswidget.ui ) set(kleo_LIB_SRCS ${libkleo_core_SRCS} ${libkleo_ui_SRCS} ${libkleo_ui_common_SRCS}) set(kleo_LIB_LIBS PUBLIC QGpgme Gpgmepp PRIVATE Qt5::Widgets KF5::I18n KF5::Completion KF5::ConfigCore KF5::CoreAddons KF5::WidgetsAddons KF5::ItemModels KF5::Codecs) if (KF5PimTextEdit_FOUND) add_definitions(-DHAVE_PIMTEXTEDIT) set(kleo_LIB_LIBS ${kleo_LIB_LIBS} PRIVATE KF5::PimTextEdit) endif() add_library(KF5Libkleo ${kleo_LIB_SRCS}) if (COMPILE_WITH_UNITY_CMAKE_SUPPORT) set_target_properties(KF5Libkleo PROPERTIES UNITY_BUILD ON) endif() generate_export_header(KF5Libkleo BASE_NAME kleo) add_library(KF5::Libkleo ALIAS KF5Libkleo) if(WIN32) target_link_libraries(KF5Libkleo ${kleo_LIB_LIBS} ${GPGME_VANILLA_LIBRARIES} ) else() target_link_libraries(KF5Libkleo ${kleo_LIB_LIBS} ) endif() set_target_properties(KF5Libkleo PROPERTIES VERSION ${LIBKLEO_VERSION_STRING} SOVERSION ${LIBKLEO_SOVERSION} EXPORT_NAME Libkleo ) install(TARGETS KF5Libkleo EXPORT KF5LibkleoTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS} ) target_include_directories(KF5Libkleo PUBLIC "$") target_include_directories(KF5Libkleo INTERFACE "$") ecm_generate_headers(libkleo_CamelCase_HEADERS HEADER_NAMES ChecksumDefinition Debug DefaultKeyFilter DefaultKeyGenerationJob Dn Enum KConfigBasedKeyFilter KeyFilter KeyFilterManager KeyGroup KeyResolver KeyResolverCore KleoException OidMap Predicates Stl_Util REQUIRED_HEADERS libkleo_HEADERS PREFIX Libkleo RELATIVE kleo ) ecm_generate_headers(libkleo_CamelCase_models_HEADERS HEADER_NAMES KeyCache KeyList KeyListModel KeyListModelInterface KeyListSortFilterProxyModel KeyRearrangeColumnsProxyModel SubkeyListModel UserIDListModel REQUIRED_HEADERS libkleo_models_HEADERS PREFIX Libkleo RELATIVE models ) ecm_generate_headers(libkleo_CamelCase_utils_HEADERS HEADER_NAMES Algorithm Classify + CryptoConfig FileSystemWatcher Formatting GnuPG Compat + Test REQUIRED_HEADERS libkleo_utils_HEADERS PREFIX Libkleo RELATIVE utils ) ecm_generate_headers(libkleo_CamelCase_ui_HEADERS HEADER_NAMES CryptoConfigDialog CryptoConfigModule DNAttributeOrderConfigWidget DirectoryServicesWidget FileNameRequester KDHorizontalLine KeyApprovalDialog NewKeyApprovalDialog KeyRequester KeySelectionCombo KeySelectionDialog MessageBox ProgressDialog REQUIRED_HEADERS libkleo_ui_HEADERS PREFIX Libkleo RELATIVE ui ) ecm_generate_pri_file(BASE_NAME Libkleo LIB_NAME KF5Libkleo DEPS "QGpgme" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/Libkleo ) install(FILES ${libkleo_CamelCase_HEADERS} ${libkleo_CamelCase_models_HEADERS} ${libkleo_CamelCase_ui_HEADERS} ${libkleo_CamelCase_utils_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/Libkleo COMPONENT Devel ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kleo_export.h ${libkleo_HEADERS} ${libkleo_models_HEADERS} ${libkleo_ui_HEADERS} ${libkleo_utils_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/libkleo COMPONENT Devel ) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) if ( WIN32 ) install ( FILES libkleopatrarc-win32.desktop DESTINATION ${KDE_INSTALL_CONFDIR} RENAME libkleopatrarc ) else () install ( FILES libkleopatrarc.desktop DESTINATION ${KDE_INSTALL_CONFDIR} RENAME libkleopatrarc ) endif () diff --git a/src/utils/cryptoconfig.cpp b/src/utils/cryptoconfig.cpp new file mode 100644 index 000000000..69e8b4253 --- /dev/null +++ b/src/utils/cryptoconfig.cpp @@ -0,0 +1,58 @@ +/* + utils/cryptoconfig.cpp + + This file is part of libkleopatra, the KDE keymanagement library + SPDX-FileCopyrightText: 2021 g10 Code GmbH + SPDX-FileContributor: Ingo Klöcker + + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +#include "cryptoconfig.h" +#include "cryptoconfig_p.h" + +#include "utils/compat.h" + +#include +#include + +using namespace QGpgME; + +static std::unordered_map> fakeCryptoConfigValues; + +QString Kleo::getCryptoConfigStringValue(const char *componentName, const char *entryName) +{ + if (!fakeCryptoConfigValues.empty()) { + const auto componentIt = fakeCryptoConfigValues.find(componentName); + if (componentIt != std::end(fakeCryptoConfigValues)) { + const auto entryIt = componentIt->second.find(entryName); + if (entryIt != std::end(componentIt->second)) { + return entryIt->second; + } + } + } + + const CryptoConfig *const config = cryptoConfig(); + if (!config) { + return {}; + } + const CryptoConfigEntry *const entry = getCryptoConfigEntry(config, "gpg", "compliance"); + if (!entry || entry->argType() != CryptoConfigEntry::ArgType_String) { + return QString(); + } + return entry->stringValue(); +} + +void Kleo::Private::setFakeCryptoConfigStringValue(std::string componentName, std::string entryName, const QString &fakeValue) +{ + fakeCryptoConfigValues[componentName][entryName] = fakeValue; +} + +void Kleo::Private::clearFakeCryptoConfigStringValue(const std::string &componentName, const std::string &entryName) +{ + auto &entryMap = fakeCryptoConfigValues[componentName]; + entryMap.erase(entryName); + if (entryMap.empty()) { + fakeCryptoConfigValues.erase(componentName); + } +} diff --git a/src/utils/cryptoconfig.h b/src/utils/cryptoconfig.h new file mode 100644 index 000000000..ebe6bf273 --- /dev/null +++ b/src/utils/cryptoconfig.h @@ -0,0 +1,22 @@ +/* + utils/cryptoconfig.h + + This file is part of libkleopatra, the KDE keymanagement library + SPDX-FileCopyrightText: 2021 g10 Code GmbH + SPDX-FileContributor: Ingo Klöcker + + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +#pragma once + +#include "kleo_export.h" + +class QString; + +namespace Kleo +{ + +KLEO_EXPORT QString getCryptoConfigStringValue(const char *componentName, const char *entryName); + +} diff --git a/src/utils/cryptoconfig_p.h b/src/utils/cryptoconfig_p.h new file mode 100644 index 000000000..2adf67cc2 --- /dev/null +++ b/src/utils/cryptoconfig_p.h @@ -0,0 +1,28 @@ +/* + utils/cryptoconfig_p.h + + This file is part of libkleopatra, the KDE keymanagement library + SPDX-FileCopyrightText: 2021 g10 Code GmbH + SPDX-FileContributor: Ingo Klöcker + + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +#pragma once + +#include + +class QString; + +namespace Kleo +{ + +namespace Private +{ + +void setFakeCryptoConfigStringValue(std::string componentName, std::string entryName, const QString &fakeValue); +void clearFakeCryptoConfigStringValue(const std::string &componentName, const std::string &entryName); + +} + +} diff --git a/src/utils/test.cpp b/src/utils/test.cpp new file mode 100644 index 000000000..338a9d874 --- /dev/null +++ b/src/utils/test.cpp @@ -0,0 +1,29 @@ +/* + utils/test.cpp + + This file is part of libkleopatra, the KDE keymanagement library + SPDX-FileCopyrightText: 2021 g10 Code GmbH + SPDX-FileContributor: Ingo Klöcker + + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +#include "test.h" + +#include "cryptoconfig_p.h" + +#include + +using namespace Kleo::Tests; + +FakeCryptoConfigStringValue::FakeCryptoConfigStringValue(const char *componentName, const char *entryName, const QString &fakeValue) + : mComponentName(componentName) + , mEntryName(entryName) +{ + Kleo::Private::setFakeCryptoConfigStringValue(mComponentName, mEntryName, fakeValue); +} + +FakeCryptoConfigStringValue::~FakeCryptoConfigStringValue() +{ + Kleo::Private::clearFakeCryptoConfigStringValue(mComponentName, mEntryName); +} diff --git a/src/utils/test.h b/src/utils/test.h new file mode 100644 index 000000000..24c573ca0 --- /dev/null +++ b/src/utils/test.h @@ -0,0 +1,38 @@ +/* + utils/test.h + + This file is part of libkleopatra, the KDE keymanagement library + SPDX-FileCopyrightText: 2021 g10 Code GmbH + SPDX-FileContributor: Ingo Klöcker + + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +#pragma once + +#include "kleo_export.h" + +#include + +class QString; + +namespace Kleo +{ + +namespace Tests +{ + +class KLEO_EXPORT FakeCryptoConfigStringValue +{ +public: + FakeCryptoConfigStringValue(const char *componentName, const char *entryName, const QString &fakeValue); + ~FakeCryptoConfigStringValue(); + +private: + std::string mComponentName; + std::string mEntryName; +}; + +} + +}