From 8f14fdc7325cb9635e3d92873baaa58f430fca01 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 18 Apr 2025 17:54:54 +0200 Subject: feat: add more info check --- src/core/utils/GpgUtils.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/core/utils/GpgUtils.cpp') diff --git a/src/core/utils/GpgUtils.cpp b/src/core/utils/GpgUtils.cpp index b8824673..13f6ef05 100644 --- a/src/core/utils/GpgUtils.cpp +++ b/src/core/utils/GpgUtils.cpp @@ -30,12 +30,15 @@ #include "core/function/GlobalSettingStation.h" #include "core/function/gpg/GpgAbstractKeyGetter.h" +#include "core/function/gpg/GpgComponentInfoGetter.h" #include "core/model/GpgKey.h" #include "core/model/GpgKeyGroup.h" #include "core/model/KeyDatabaseInfo.h" #include "core/model/SettingsObject.h" #include "core/module/ModuleManager.h" #include "core/struct/settings_object/KeyDatabaseListSO.h" +#include "core/utils/CommonUtils.h" + namespace GpgFrontend { inline auto Trim(QString& s) -> QString { return s.trimmed(); } @@ -424,4 +427,33 @@ auto GPGFRONTEND_CORE_EXPORT IsKeyGroupID(const KeyId& id) -> bool { return id.startsWith("#&"); } +auto GPGFRONTEND_CORE_EXPORT +GpgAgentVersionGreaterThan(int channel, const QString& v) -> bool { + return GFSoftwareVersionGreaterThan( + GpgComponentInfoGetter::GetInstance(channel).GetGpgAgentVersion(), v); +} + +auto GPGFRONTEND_CORE_EXPORT CheckGpgVersion(int channel, + const QString& v) -> bool { + const auto ver = + GpgComponentInfoGetter::GetInstance(channel).GetGpgAgentVersion(); + + if (ver.isEmpty() || !GFSoftwareVersionGreaterThan(ver, v)) { + LOG_W() << "operation not support for gpg-agent version: " << ver + << "minimal version: " << v; + return false; + } + + const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.gnupg_version", QString{}); + + if (gnupg_version.isEmpty() || + GFCompareSoftwareVersion(gnupg_version, v) < 0) { + LOG_W() << "operation not support for gnupg version: " << gnupg_version + << "minimal version: " << v; + return false; + } + + return true; +} } // namespace GpgFrontend -- cgit v1.2.3 From 502a43488d51c88be33d95be11ba8f160c2a3fd4 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 18 Apr 2025 19:11:40 +0200 Subject: feat: add more basic env checks at init --- src/core/utils/GpgUtils.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/core/utils/GpgUtils.cpp') diff --git a/src/core/utils/GpgUtils.cpp b/src/core/utils/GpgUtils.cpp index 13f6ef05..8b2abeb7 100644 --- a/src/core/utils/GpgUtils.cpp +++ b/src/core/utils/GpgUtils.cpp @@ -456,4 +456,23 @@ auto GPGFRONTEND_CORE_EXPORT CheckGpgVersion(int channel, return true; } + +auto GPGFRONTEND_CORE_EXPORT DecidePinentry() -> QString { +#ifdef __linux__ + QStringList preferred_list = {"pinentry-gnome3", + "pinentry-qt" + "pinentry-gtk2"}; +#else + QStringList preferred_list = {"pinentry-qt"}; +#endif + + for (const QString& name : preferred_list) { + QString path = QStandardPaths::findExecutable(name); + if (!path.isEmpty()) { + return path; + } + } + + return {}; +} } // namespace GpgFrontend -- cgit v1.2.3 From d115562e6cb231356ef87a2ab86f4da1159a9e41 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 18 Apr 2025 19:35:45 +0200 Subject: fix: issues found on macos --- src/core/utils/GpgUtils.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/core/utils/GpgUtils.cpp') diff --git a/src/core/utils/GpgUtils.cpp b/src/core/utils/GpgUtils.cpp index 8b2abeb7..d8f147bb 100644 --- a/src/core/utils/GpgUtils.cpp +++ b/src/core/utils/GpgUtils.cpp @@ -462,6 +462,8 @@ auto GPGFRONTEND_CORE_EXPORT DecidePinentry() -> QString { QStringList preferred_list = {"pinentry-gnome3", "pinentry-qt" "pinentry-gtk2"}; +#elif defined(__APPLE__) && defined(__MACH__) + QStringList preferred_list = {"pinentry-mac", "pinentry-qt"}; #else QStringList preferred_list = {"pinentry-qt"}; #endif -- cgit v1.2.3