aboutsummaryrefslogtreecommitdiffstats
path: root/src/module
diff options
context:
space:
mode:
Diffstat (limited to 'src/module')
-rw-r--r--src/module/integrated/gnupg_info_gathering_module/GnuPGInfoGatheringModule.cpp94
-rw-r--r--src/module/integrated/version_checking_module/VersionCheckTask.cpp9
-rw-r--r--src/module/integrated/version_checking_module/VersionCheckingModule.h2
-rw-r--r--src/module/sdk/Basic.cpp20
-rw-r--r--src/module/sdk/Basic.h32
-rw-r--r--src/module/sdk/Module.cpp22
6 files changed, 123 insertions, 56 deletions
diff --git a/src/module/integrated/gnupg_info_gathering_module/GnuPGInfoGatheringModule.cpp b/src/module/integrated/gnupg_info_gathering_module/GnuPGInfoGatheringModule.cpp
index 67dd5227..0595a8ac 100644
--- a/src/module/integrated/gnupg_info_gathering_module/GnuPGInfoGatheringModule.cpp
+++ b/src/module/integrated/gnupg_info_gathering_module/GnuPGInfoGatheringModule.cpp
@@ -32,9 +32,8 @@
#include "GpgInfo.h"
#include "Log.h"
-ModuleMetaData *g_module_metadata = nullptr;
-
-extern auto CheckBinaryChacksum(QString path) -> std::optional<QString>;
+extern auto CalculateBinaryChacksum(const QString &path)
+ -> std::optional<QString>;
extern void GetGpgComponentInfos(void *, int, const char *, const char *);
@@ -50,30 +49,33 @@ using Context = struct {
auto RegisterModule() -> int {
ModuleLogDebug("gnupg info gathering module registering");
+ return 0;
+}
- g_module_metadata =
+auto GetModuleID() -> const char * {
+ return GFModuleStrDup(
+ "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering");
+}
+
+auto GetModuleVersion() -> const char * { return GFModuleStrDup("1.0.0"); }
+
+auto GetModuleMetaData() -> ModuleMetaData * {
+ auto *p_meta =
static_cast<ModuleMetaData *>(AllocateMemory(sizeof(ModuleMetaData)));
+ auto *h_meta = p_meta;
- auto *p_meta = g_module_metadata;
- p_meta->key = "description";
- p_meta->value = "try to gathering gnupg informations";
+ p_meta->key = "Description";
+ p_meta->value = "Try to gathering gnupg informations";
p_meta->next =
static_cast<ModuleMetaData *>(AllocateMemory(sizeof(ModuleMetaData)));
p_meta = p_meta->next;
- p_meta->key = "author";
- p_meta->value = "saturneric";
+ p_meta->key = "Author";
+ p_meta->value = "Saturneric";
p_meta->next = nullptr;
- return 0;
-}
-auto GetModuleID() -> const char * {
- return "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering";
+ return h_meta;
}
-auto GetModuleVersion() -> const char * { return "1.0.0"; }
-
-auto GetModuleMetaData() -> ModuleMetaData * { return g_module_metadata; }
-
auto ActiveModule() -> int {
ModuleLogDebug("gnupg info gathering module activating");
ListenEvent(GetModuleID(), "GPGFRONTEND_CORE_INITLIZED");
@@ -101,12 +103,16 @@ auto ExecuteModule(ModuleEvent *event) -> int {
auto context = Context{gpgme_version, gpgconf_path};
// get all components
- const char *argv[] = {"--list-components"};
+ const char *argv[] = {GFModuleStrDup("--list-components")};
ExecuteCommandSync(gpgconf_path, 1, argv, GetGpgComponentInfos, &context);
+ ModuleLogDebug("load gnupg component info done.");
QList<CommandExecuteContext> exec_contexts;
- const char *argv_0[] = {"--list-dirs"};
+ const char **argv_0 =
+ static_cast<const char **>(AllocateMemory(sizeof(const char *)));
+ argv_0[0] = GFModuleStrDup("--list-dirs");
+
exec_contexts.push_back(
{gpgconf_path, 1, argv_0, GetGpgDirectoryInfos, nullptr});
@@ -139,9 +145,12 @@ auto ExecuteModule(ModuleEvent *event) -> int {
auto context = Context{gpgme_version, gpgconf_path, component_info};
- const char *argv_0[] = {"--list-options", component_info.name.toUtf8()};
+ const char **argv_0 =
+ static_cast<const char **>(AllocateMemory(sizeof(const char *) * 2));
+ argv_0[0] = GFModuleStrDup("--list-options"),
+ argv_0[1] = GFModuleStrDup(component_info.name.toUtf8());
exec_contexts.push_back(
- {gpgconf_path, 1, argv_0, GetGpgDirectoryInfos, &context});
+ {gpgconf_path, 2, argv_0, GetGpgDirectoryInfos, &context});
}
ExecuteCommandBatchSync(static_cast<int32_t>(exec_contexts.size()),
@@ -149,10 +158,8 @@ auto ExecuteModule(ModuleEvent *event) -> int {
UpsertRTValue(GetModuleID(), "gnupg.gathering_done", "true");
- char **event_argv = static_cast<char **>(AllocateMemory(sizeof(char *) * 1));
- event_argv[0] = static_cast<char *>(AllocateMemory(5));
- memcpy(event_argv[0], "true", 4);
- event_argv[0][4] = '\0';
+ char **event_argv = static_cast<char **>(AllocateMemory(sizeof(char **) * 1));
+ event_argv[0] = GFModuleStrDup("true");
TriggerModuleEventCallback(event, GetModuleID(), 1, event_argv);
@@ -164,11 +171,10 @@ auto DeactiveModule() -> int { return 0; }
auto UnregisterModule() -> int {
ModuleLogDebug("gnupg info gathering module unregistering");
- FreeMemory(g_module_metadata);
return 0;
}
-auto CheckBinaryChacksum(QString path) -> std::optional<QString> {
+auto CalculateBinaryChacksum(const QString &path) -> std::optional<QString> {
// check file info and access rights
QFileInfo info(path);
if (!info.exists() || !info.isFile() || !info.isReadable()) {
@@ -181,19 +187,33 @@ auto CheckBinaryChacksum(QString path) -> std::optional<QString> {
// open and read file
QFile f(info.filePath());
if (!f.open(QIODevice::ReadOnly)) {
- ModuleLogError(fmt::format("open {} to calculate check sum error: {}", path,
- f.errorString())
+ ModuleLogError(fmt::format("open {} to calculate checksum error: {}",
+ path.toStdString(),
+ f.errorString().toStdString())
.c_str());
return {};
}
- // read all data from file
- auto buffer = f.readAll();
+ QCryptographicHash hash_sha(QCryptographicHash::Sha256);
+
+ // read data by chunks
+ const qint64 buffer_size = 8192; // Define a suitable buffer size
+ while (!f.atEnd()) {
+ QByteArray buffer = f.read(buffer_size);
+ if (buffer.isEmpty()) {
+ ModuleLogError(
+ fmt::format("error reading file {} during checksum calculation",
+ path.toStdString())
+ .c_str());
+ return {};
+ }
+ hash_sha.addData(buffer);
+ }
+
+ // close the file
f.close();
- auto hash_sha = QCryptographicHash(QCryptographicHash::Sha256);
- // md5
- hash_sha.addData(buffer);
+ // return the first 6 characters of the SHA-256 hash of the file
return QString(hash_sha.result().toHex()).left(6);
}
@@ -229,7 +249,7 @@ void GetGpgComponentInfos(void *data, int exit_code, const char *out,
c_i_gpgconf.desc = "GPG Configure";
c_i_gpgconf.version = "/";
c_i_gpgconf.path = context->gpgconf_path;
- auto gpgconf_binary_checksum = CheckBinaryChacksum(context->gpgconf_path);
+ auto gpgconf_binary_checksum = CalculateBinaryChacksum(context->gpgconf_path);
c_i_gpgconf.binary_checksum =
(gpgconf_binary_checksum.has_value() ? gpgconf_binary_checksum.value()
: QString("/"));
@@ -260,7 +280,7 @@ void GetGpgComponentInfos(void *data, int exit_code, const char *out,
component_path.replace("%3a", ":");
#endif
- auto binary_checksum = CheckBinaryChacksum(component_path);
+ auto binary_checksum = CalculateBinaryChacksum(component_path);
ModuleLogDebug(
fmt::format("gnupg component name: {} desc: {} checksum: {} path: {} ",
@@ -305,6 +325,8 @@ void GetGpgComponentInfos(void *data, int exit_code, const char *out,
component_infos.push_back(c_i);
}
+
+ ModuleLogDebug("load gnupg component info actually done.");
}
}
diff --git a/src/module/integrated/version_checking_module/VersionCheckTask.cpp b/src/module/integrated/version_checking_module/VersionCheckTask.cpp
index 91d5edff..eeb0231c 100644
--- a/src/module/integrated/version_checking_module/VersionCheckTask.cpp
+++ b/src/module/integrated/version_checking_module/VersionCheckTask.cpp
@@ -31,15 +31,14 @@
#include <QMetaType>
#include <QtNetwork>
-#include "GpgFrontendBuildInfo.h"
+#include "core/utils/BuildInfoUtils.h"
namespace GpgFrontend::Module::Integrated::VersionCheckingModule {
VersionCheckTask::VersionCheckTask()
: Task("version_check_task"),
network_manager_(new QNetworkAccessManager(this)),
- current_version_(QString("v") + VERSION_MAJOR + "." + VERSION_MINOR +
- "." + VERSION_PATCH) {
+ current_version_(GetProjectVersion()) {
HoldOnLifeCycle(true);
qRegisterMetaType<SoftwareVersion>("SoftwareVersion");
version_.current_version = current_version_;
@@ -53,7 +52,7 @@ auto VersionCheckTask::Run() -> int {
QNetworkRequest latest_request(latest_version_url);
latest_request.setHeader(QNetworkRequest::UserAgentHeader,
- HTTP_REQUEST_USER_AGENT);
+ GetHttpRequestUserAgent());
latest_reply_ = network_manager_->get(latest_request);
connect(latest_reply_, &QNetworkReply::finished, this,
@@ -122,7 +121,7 @@ void VersionCheckTask::slot_parse_latest_version_info() {
QNetworkRequest current_request(current_version_url);
current_request.setHeader(QNetworkRequest::UserAgentHeader,
- HTTP_REQUEST_USER_AGENT);
+ GetHttpRequestUserAgent());
current_reply_ = network_manager_->get(current_request);
diff --git a/src/module/integrated/version_checking_module/VersionCheckingModule.h b/src/module/integrated/version_checking_module/VersionCheckingModule.h
index 65b20198..387cdb3c 100644
--- a/src/module/integrated/version_checking_module/VersionCheckingModule.h
+++ b/src/module/integrated/version_checking_module/VersionCheckingModule.h
@@ -32,6 +32,8 @@
#include "SoftwareVersion.h"
#include "core/module/Module.h"
+
+
namespace GpgFrontend::Module::Integrated::VersionCheckingModule {
class GF_MODULE_EXPORT VersionCheckingModule : public Module {
diff --git a/src/module/sdk/Basic.cpp b/src/module/sdk/Basic.cpp
index 35ce8054..ce222fbd 100644
--- a/src/module/sdk/Basic.cpp
+++ b/src/module/sdk/Basic.cpp
@@ -57,12 +57,16 @@ void ExecuteCommandSync(const char* cmd, int32_t argc, const char** argv,
void ExecuteCommandBatchSync(int32_t context_size,
const CommandExecuteContext* context) {
QList<GpgFrontend::GpgCommandExecutor::ExecuteContext> contexts;
+
for (int i = 0; i < context_size; i++) {
- auto exec_context = context[i];
+ const auto& exec_context = context[i];
+
QStringList args;
- for (int i = 0; i < exec_context.argc; i++) {
- args.append(QString::fromUtf8(exec_context.argv[i]));
+ const char** argv = exec_context.argv;
+ for (int j = 0; j < exec_context.argc; j++) {
+ args.append(QString::fromUtf8(argv[j]));
}
+
contexts.append(
{exec_context.cmd, args,
[data = exec_context.data, cb = exec_context.cb](
@@ -72,4 +76,14 @@ void ExecuteCommandBatchSync(int32_t context_size,
}
GpgFrontend::GpgCommandExecutor::ExecuteConcurrentlySync(contexts);
+}
+
+auto GPGFRONTEND_MODULE_SDK_EXPORT GFModuleStrDup(const char* src) -> char* {
+ auto len = strlen(src);
+
+ char* dst = static_cast<char*>(AllocateMemory((len + 1) * sizeof(char)));
+ memcpy(dst, src, len);
+ dst[len] = '\0';
+
+ return dst;
} \ No newline at end of file
diff --git a/src/module/sdk/Basic.h b/src/module/sdk/Basic.h
index a232fd64..123b3783 100644
--- a/src/module/sdk/Basic.h
+++ b/src/module/sdk/Basic.h
@@ -43,16 +43,48 @@ using CommandExecuteContext = struct {
void* data;
};
+/**
+ * @brief
+ *
+ * @param size
+ * @return void*
+ */
auto GPGFRONTEND_MODULE_SDK_EXPORT AllocateMemory(uint32_t size) -> void*;
+/**
+ * @brief
+ *
+ */
void GPGFRONTEND_MODULE_SDK_EXPORT FreeMemory(void*);
+/**
+ * @brief
+ *
+ * @param cmd
+ * @param argc
+ * @param argv
+ * @param cb
+ * @param data
+ */
void GPGFRONTEND_MODULE_SDK_EXPORT ExecuteCommandSync(const char* cmd,
int32_t argc,
const char** argv,
CommandExeucteCallback cb,
void* data);
+/**
+ * @brief
+ *
+ * @param context_size
+ * @param context
+ */
void GPGFRONTEND_MODULE_SDK_EXPORT ExecuteCommandBatchSync(
int32_t context_size, const CommandExecuteContext* context);
+
+/**
+ * @brief
+ *
+ * @return char*
+ */
+auto GPGFRONTEND_MODULE_SDK_EXPORT GFModuleStrDup(const char*) -> char*;
} \ No newline at end of file
diff --git a/src/module/sdk/Module.cpp b/src/module/sdk/Module.cpp
index 36fe7b91..c69f6e5c 100644
--- a/src/module/sdk/Module.cpp
+++ b/src/module/sdk/Module.cpp
@@ -29,9 +29,9 @@
#include "Module.h"
#include <core/module/ModuleManager.h>
+#include <core/utils/CommonUtils.h>
#include "Basic.h"
-#include "core/utils/CommonUtils.h"
void ListenEvent(const char *module_id, const char *event_id) {
return GpgFrontend::Module::ModuleManager::GetInstance().ListenEvent(
@@ -40,13 +40,16 @@ void ListenEvent(const char *module_id, const char *event_id) {
auto RetrieveRTValueOrDefault(const char *namespace_, const char *key,
const char *default_value) -> const char * {
- return GpgFrontend::Module::RetrieveRTValueTypedOrDefault(
- namespace_, key, QString::fromUtf8(default_value))
- .toUtf8();
+ return GpgFrontend::GFStrDup(
+ GpgFrontend::Module::RetrieveRTValueTypedOrDefault(
+ QString::fromUtf8(namespace_), QString::fromUtf8(key),
+ QString::fromUtf8(default_value)));
}
void UpsertRTValue(const char *namespace_, const char *key, const char *vaule) {
- GpgFrontend::Module::UpsertRTValue(namespace_, key, vaule);
+ GpgFrontend::Module::UpsertRTValue(QString::fromUtf8(namespace_),
+ QString::fromUtf8(key),
+ QString::fromUtf8(vaule));
}
auto ListRTChildKeys(const char *namespace_, const char *key,
@@ -57,15 +60,10 @@ auto ListRTChildKeys(const char *namespace_, const char *key,
if (keys.empty()) return 0;
*child_keys =
- static_cast<char **>(AllocateMemory(sizeof(const char **) * keys.size()));
+ static_cast<char **>(AllocateMemory(sizeof(char **) * keys.size()));
for (int i = 0; i < keys.size(); i++) {
- *child_keys[i] =
- static_cast<char *>(AllocateMemory(sizeof(char) * keys[i].size() + 1));
-
- auto key = keys[i].toUtf8();
- memcpy(reinterpret_cast<void *>(*child_keys[i]), key, key.size());
- (*child_keys[i])[key.size()] = '\0';
+ (*child_keys)[i] = GpgFrontend::GFStrDup(keys[i]);
}
return static_cast<int32_t>(keys.size());