From 95997d27106daf91336847f50efaaa32279b7fc7 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 16 Oct 2023 17:54:05 +0800 Subject: fix: check and update copyright at files --- src/core/function/DataObjectOperator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index 180cef30..fcf77319 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -1,5 +1,5 @@ /** - * Copyright (C) 2021 Saturneric + * Copyright (C) 2021 Saturneric * * This file is part of GpgFrontend. * @@ -20,7 +20,7 @@ * the gpg4usb project, which is under GPL-3.0-or-later. * * All the source code of GpgFrontend was modified and released by - * Saturneric starting on May 12, 2021. + * Saturneric starting on May 12, 2021. * * SPDX-License-Identifier: GPL-3.0-or-later * -- cgit v1.2.3 From 889cb8092381b073a0f4a0411a4ede04cd7bdd14 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 6 Nov 2023 20:49:44 +0800 Subject: refactor: improve the code structure of core --- src/core/function/DataObjectOperator.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index fcf77319..2fb794c5 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -32,13 +32,13 @@ #include -#include "core/function/FileOperator.h" #include "core/function/PassphraseGenerator.h" +#include "core/utils/IOUtils.h" void GpgFrontend::DataObjectOperator::init_app_secure_key() { SPDLOG_DEBUG("initializing application secure key"); - FileOperator::WriteFileStd(app_secure_key_path_, - PassphraseGenerator::GetInstance().Generate(256)); + WriteFileStd(app_secure_key_path_, + PassphraseGenerator::GetInstance().Generate(256)); std::filesystem::permissions( app_secure_key_path_, std::filesystem::perms::owner_read | std::filesystem::perms::owner_write); @@ -53,7 +53,7 @@ GpgFrontend::DataObjectOperator::DataObjectOperator(int channel) } std::string key; - if (!FileOperator::ReadFileStd(app_secure_key_path_.u8string(), key)) { + if (!ReadFileStd(app_secure_key_path_.u8string(), key)) { SPDLOG_ERROR("failed to read app secure key file: {}", app_secure_key_path_.u8string()); throw std::runtime_error("failed to read app secure key file"); @@ -96,7 +96,7 @@ std::string GpgFrontend::DataObjectOperator::SaveDataObj( SPDLOG_DEBUG("saving data object {} to {} , size: {} bytes", _hash_obj_key, obj_path.u8string(), encoded.size()); - FileOperator::WriteFileStd(obj_path.u8string(), encoded.toStdString()); + WriteFileStd(obj_path.u8string(), encoded.toStdString()); return _key.empty() ? _hash_obj_key : std::string(); } @@ -119,7 +119,7 @@ std::optional GpgFrontend::DataObjectOperator::GetDataObject( } std::string buffer; - if (!FileOperator::ReadFileStd(obj_path.u8string(), buffer)) { + if (!ReadFileStd(obj_path.u8string(), buffer)) { SPDLOG_ERROR("failed to read data object: {}", _key); return {}; } @@ -156,7 +156,7 @@ GpgFrontend::DataObjectOperator::GetDataObjectByRef(const std::string& _ref) { if (!std::filesystem::exists(obj_path)) return {}; std::string buffer; - if (!FileOperator::ReadFileStd(obj_path.u8string(), buffer)) return {}; + if (!ReadFileStd(obj_path.u8string(), buffer)) return {}; auto encoded = QByteArray::fromStdString(buffer); QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, -- cgit v1.2.3 From 3ad7fecdb6458fdd6f146bed19fe643c7f93e905 Mon Sep 17 00:00:00 2001 From: saturneric Date: Tue, 7 Nov 2023 15:18:06 +0800 Subject: refactor: remove CommonUtils at core --- src/core/function/DataObjectOperator.cpp | 40 ++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index 2fb794c5..a55fe79a 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -35,7 +35,9 @@ #include "core/function/PassphraseGenerator.h" #include "core/utils/IOUtils.h" -void GpgFrontend::DataObjectOperator::init_app_secure_key() { +namespace GpgFrontend { + +void DataObjectOperator::init_app_secure_key() { SPDLOG_DEBUG("initializing application secure key"); WriteFileStd(app_secure_key_path_, PassphraseGenerator::GetInstance().Generate(256)); @@ -44,7 +46,7 @@ void GpgFrontend::DataObjectOperator::init_app_secure_key() { std::filesystem::perms::owner_read | std::filesystem::perms::owner_write); } -GpgFrontend::DataObjectOperator::DataObjectOperator(int channel) +DataObjectOperator::DataObjectOperator(int channel) : SingletonFunctionObject(channel) { if (!is_directory(app_secure_path_)) create_directory(app_secure_path_); @@ -65,11 +67,12 @@ GpgFrontend::DataObjectOperator::DataObjectOperator(int channel) if (!exists(app_data_objs_path_)) create_directory(app_data_objs_path_); } -std::string GpgFrontend::DataObjectOperator::SaveDataObj( - const std::string& _key, const nlohmann::json& value) { - std::string _hash_obj_key = {}; +auto DataObjectOperator::SaveDataObj(const std::string& _key, + const nlohmann::json& value) + -> std::string { + std::string hash_obj_key = {}; if (_key.empty()) { - _hash_obj_key = + hash_obj_key = QCryptographicHash::hash( hash_key_ + QByteArray::fromStdString( PassphraseGenerator::GetInstance().Generate(32) + @@ -79,39 +82,39 @@ std::string GpgFrontend::DataObjectOperator::SaveDataObj( .toHex() .toStdString(); } else { - _hash_obj_key = + hash_obj_key = QCryptographicHash::hash(hash_key_ + QByteArray::fromStdString(_key), QCryptographicHash::Sha256) .toHex() .toStdString(); } - const auto obj_path = app_data_objs_path_ / _hash_obj_key; + const auto obj_path = app_data_objs_path_ / hash_obj_key; QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); auto encoded = encryption.encode(QByteArray::fromStdString(to_string(value)), hash_key_); - SPDLOG_DEBUG("saving data object {} to {} , size: {} bytes", _hash_obj_key, + SPDLOG_DEBUG("saving data object {} to {} , size: {} bytes", hash_obj_key, obj_path.u8string(), encoded.size()); WriteFileStd(obj_path.u8string(), encoded.toStdString()); - return _key.empty() ? _hash_obj_key : std::string(); + return _key.empty() ? hash_obj_key : std::string(); } -std::optional GpgFrontend::DataObjectOperator::GetDataObject( - const std::string& _key) { +auto DataObjectOperator::GetDataObject(const std::string& _key) + -> std::optional { try { SPDLOG_DEBUG("get data object {}", _key); - auto _hash_obj_key = + auto hash_obj_key = QCryptographicHash::hash(hash_key_ + QByteArray::fromStdString(_key), QCryptographicHash::Sha256) .toHex() .toStdString(); - const auto obj_path = app_data_objs_path_ / _hash_obj_key; + const auto obj_path = app_data_objs_path_ / hash_obj_key; if (!std::filesystem::exists(obj_path)) { SPDLOG_ERROR("data object not found :{}", _key); @@ -145,13 +148,13 @@ std::optional GpgFrontend::DataObjectOperator::GetDataObject( } } -std::optional -GpgFrontend::DataObjectOperator::GetDataObjectByRef(const std::string& _ref) { +auto DataObjectOperator::GetDataObjectByRef(const std::string& _ref) + -> std::optional { if (_ref.size() != 64) return {}; try { - const auto& _hash_obj_key = _ref; - const auto obj_path = app_data_objs_path_ / _hash_obj_key; + const auto& hash_obj_key = _ref; + const auto obj_path = app_data_objs_path_ / hash_obj_key; if (!std::filesystem::exists(obj_path)) return {}; @@ -170,3 +173,4 @@ GpgFrontend::DataObjectOperator::GetDataObjectByRef(const std::string& _ref) { return {}; } } +} // namespace GpgFrontend \ No newline at end of file -- cgit v1.2.3 From 9f7593eab9b2d6f6fa6d76a303975b355b6ab458 Mon Sep 17 00:00:00 2001 From: saturneric Date: Sat, 30 Dec 2023 19:55:20 +0800 Subject: feat: do not load entire data to memory in libarchive operations --- src/core/function/DataObjectOperator.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index a55fe79a..01625736 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -95,8 +95,7 @@ auto DataObjectOperator::SaveDataObj(const std::string& _key, QAESEncryption::Padding::ISO); auto encoded = encryption.encode(QByteArray::fromStdString(to_string(value)), hash_key_); - - SPDLOG_DEBUG("saving data object {} to {} , size: {} bytes", hash_obj_key, + SPDLOG_TRACE("saving data object {} to {} , size: {} bytes", hash_obj_key, obj_path.u8string(), encoded.size()); WriteFileStd(obj_path.u8string(), encoded.toStdString()); -- cgit v1.2.3 From 5030380bc5e155252655e2ad71e63c15271054c4 Mon Sep 17 00:00:00 2001 From: saturneric Date: Sun, 31 Dec 2023 14:10:31 +0800 Subject: feat: fully test basical operations of archive and file --- src/core/function/DataObjectOperator.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index 01625736..0a68b394 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -38,7 +38,7 @@ namespace GpgFrontend { void DataObjectOperator::init_app_secure_key() { - SPDLOG_DEBUG("initializing application secure key"); + SPDLOG_TRACE("initializing application secure key"); WriteFileStd(app_secure_key_path_, PassphraseGenerator::GetInstance().Generate(256)); std::filesystem::permissions( @@ -62,7 +62,7 @@ DataObjectOperator::DataObjectOperator(int channel) } hash_key_ = QCryptographicHash::hash(QByteArray::fromStdString(key), QCryptographicHash::Sha256); - SPDLOG_DEBUG("app secure key loaded {} bytes", hash_key_.size()); + SPDLOG_TRACE("app secure key loaded {} bytes", hash_key_.size()); if (!exists(app_data_objs_path_)) create_directory(app_data_objs_path_); } @@ -106,7 +106,7 @@ auto DataObjectOperator::SaveDataObj(const std::string& _key, auto DataObjectOperator::GetDataObject(const std::string& _key) -> std::optional { try { - SPDLOG_DEBUG("get data object {}", _key); + SPDLOG_TRACE("get data object {}", _key); auto hash_obj_key = QCryptographicHash::hash(hash_key_ + QByteArray::fromStdString(_key), QCryptographicHash::Sha256) @@ -126,19 +126,19 @@ auto DataObjectOperator::GetDataObject(const std::string& _key) return {}; } - SPDLOG_DEBUG("data object found {}", _key); + SPDLOG_TRACE("data object found {}", _key); auto encoded = QByteArray::fromStdString(buffer); QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); - SPDLOG_DEBUG("decrypting data object {} , hash key size: {}", + SPDLOG_TRACE("decrypting data object {} , hash key size: {}", encoded.size(), hash_key_.size()); auto decoded = encryption.removePadding(encryption.decode(encoded, hash_key_)); - SPDLOG_DEBUG("data object decoded: {}", _key); + SPDLOG_TRACE("data object decoded: {}", _key); return nlohmann::json::parse(decoded.toStdString()); } catch (...) { -- cgit v1.2.3 From 3c40fa27823e70215261d3845275360f85e59623 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 5 Jan 2024 16:11:24 +0800 Subject: fix: slove some known issues --- src/core/function/DataObjectOperator.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index 0a68b394..9607de59 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -106,7 +106,7 @@ auto DataObjectOperator::SaveDataObj(const std::string& _key, auto DataObjectOperator::GetDataObject(const std::string& _key) -> std::optional { try { - SPDLOG_TRACE("get data object {}", _key); + SPDLOG_TRACE("get data object from disk {}", _key); auto hash_obj_key = QCryptographicHash::hash(hash_key_ + QByteArray::fromStdString(_key), QCryptographicHash::Sha256) @@ -116,18 +116,16 @@ auto DataObjectOperator::GetDataObject(const std::string& _key) const auto obj_path = app_data_objs_path_ / hash_obj_key; if (!std::filesystem::exists(obj_path)) { - SPDLOG_ERROR("data object not found :{}", _key); + SPDLOG_WARN("data object not found, key: {}", _key); return {}; } std::string buffer; if (!ReadFileStd(obj_path.u8string(), buffer)) { - SPDLOG_ERROR("failed to read data object: {}", _key); + SPDLOG_ERROR("failed to read data object, key: {}", _key); return {}; } - SPDLOG_TRACE("data object found {}", _key); - auto encoded = QByteArray::fromStdString(buffer); QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); @@ -142,7 +140,7 @@ auto DataObjectOperator::GetDataObject(const std::string& _key) return nlohmann::json::parse(decoded.toStdString()); } catch (...) { - SPDLOG_ERROR("failed to get data object: {}", _key); + SPDLOG_ERROR("failed to get data object, caught exception: {}", _key); return {}; } } -- cgit v1.2.3 From 644aa4397b03dbef73f8bfedc13925b51cad836b Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 5 Jan 2024 20:55:15 +0800 Subject: feat: integrate logging api to core --- src/core/function/DataObjectOperator.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index 9607de59..437e6f11 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -38,7 +38,7 @@ namespace GpgFrontend { void DataObjectOperator::init_app_secure_key() { - SPDLOG_TRACE("initializing application secure key"); + GF_CORE_LOG_TRACE("initializing application secure key"); WriteFileStd(app_secure_key_path_, PassphraseGenerator::GetInstance().Generate(256)); std::filesystem::permissions( @@ -56,13 +56,13 @@ DataObjectOperator::DataObjectOperator(int channel) std::string key; if (!ReadFileStd(app_secure_key_path_.u8string(), key)) { - SPDLOG_ERROR("failed to read app secure key file: {}", - app_secure_key_path_.u8string()); + GF_CORE_LOG_ERROR("failed to read app secure key file: {}", + app_secure_key_path_.u8string()); throw std::runtime_error("failed to read app secure key file"); } hash_key_ = QCryptographicHash::hash(QByteArray::fromStdString(key), QCryptographicHash::Sha256); - SPDLOG_TRACE("app secure key loaded {} bytes", hash_key_.size()); + GF_CORE_LOG_TRACE("app secure key loaded {} bytes", hash_key_.size()); if (!exists(app_data_objs_path_)) create_directory(app_data_objs_path_); } @@ -95,8 +95,8 @@ auto DataObjectOperator::SaveDataObj(const std::string& _key, QAESEncryption::Padding::ISO); auto encoded = encryption.encode(QByteArray::fromStdString(to_string(value)), hash_key_); - SPDLOG_TRACE("saving data object {} to {} , size: {} bytes", hash_obj_key, - obj_path.u8string(), encoded.size()); + GF_CORE_LOG_TRACE("saving data object {} to {} , size: {} bytes", + hash_obj_key, obj_path.u8string(), encoded.size()); WriteFileStd(obj_path.u8string(), encoded.toStdString()); @@ -106,7 +106,7 @@ auto DataObjectOperator::SaveDataObj(const std::string& _key, auto DataObjectOperator::GetDataObject(const std::string& _key) -> std::optional { try { - SPDLOG_TRACE("get data object from disk {}", _key); + GF_CORE_LOG_TRACE("get data object from disk {}", _key); auto hash_obj_key = QCryptographicHash::hash(hash_key_ + QByteArray::fromStdString(_key), QCryptographicHash::Sha256) @@ -116,13 +116,13 @@ auto DataObjectOperator::GetDataObject(const std::string& _key) const auto obj_path = app_data_objs_path_ / hash_obj_key; if (!std::filesystem::exists(obj_path)) { - SPDLOG_WARN("data object not found, key: {}", _key); + GF_CORE_LOG_WARN("data object not found, key: {}", _key); return {}; } std::string buffer; if (!ReadFileStd(obj_path.u8string(), buffer)) { - SPDLOG_ERROR("failed to read data object, key: {}", _key); + GF_CORE_LOG_ERROR("failed to read data object, key: {}", _key); return {}; } @@ -130,17 +130,17 @@ auto DataObjectOperator::GetDataObject(const std::string& _key) QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); - SPDLOG_TRACE("decrypting data object {} , hash key size: {}", - encoded.size(), hash_key_.size()); + GF_CORE_LOG_TRACE("decrypting data object {} , hash key size: {}", + encoded.size(), hash_key_.size()); auto decoded = encryption.removePadding(encryption.decode(encoded, hash_key_)); - SPDLOG_TRACE("data object decoded: {}", _key); + GF_CORE_LOG_TRACE("data object decoded: {}", _key); return nlohmann::json::parse(decoded.toStdString()); } catch (...) { - SPDLOG_ERROR("failed to get data object, caught exception: {}", _key); + GF_CORE_LOG_ERROR("failed to get data object, caught exception: {}", _key); return {}; } } -- cgit v1.2.3 From bf538056b24a68b8fd235b1c50991ee8eb46a776 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 12 Jan 2024 14:02:37 +0800 Subject: refactor: use QString instead of std::string and improve threading system --- src/core/function/DataObjectOperator.cpp | 71 ++++++++++++++------------------ 1 file changed, 31 insertions(+), 40 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index 437e6f11..f756e3e7 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -30,8 +30,6 @@ #include -#include - #include "core/function/PassphraseGenerator.h" #include "core/utils/IOUtils.h" @@ -39,8 +37,8 @@ namespace GpgFrontend { void DataObjectOperator::init_app_secure_key() { GF_CORE_LOG_TRACE("initializing application secure key"); - WriteFileStd(app_secure_key_path_, - PassphraseGenerator::GetInstance().Generate(256)); + WriteFile(app_secure_key_path_.c_str(), + PassphraseGenerator::GetInstance().Generate(256).toUtf8()); std::filesystem::permissions( app_secure_key_path_, std::filesystem::perms::owner_read | std::filesystem::perms::owner_write); @@ -54,42 +52,37 @@ DataObjectOperator::DataObjectOperator(int channel) init_app_secure_key(); } - std::string key; - if (!ReadFileStd(app_secure_key_path_.u8string(), key)) { + QByteArray key; + if (!ReadFile(app_secure_key_path_.c_str(), key)) { GF_CORE_LOG_ERROR("failed to read app secure key file: {}", app_secure_key_path_.u8string()); throw std::runtime_error("failed to read app secure key file"); } - hash_key_ = QCryptographicHash::hash(QByteArray::fromStdString(key), - QCryptographicHash::Sha256); + hash_key_ = QCryptographicHash::hash(key, QCryptographicHash::Sha256); GF_CORE_LOG_TRACE("app secure key loaded {} bytes", hash_key_.size()); if (!exists(app_data_objs_path_)) create_directory(app_data_objs_path_); } -auto DataObjectOperator::SaveDataObj(const std::string& _key, - const nlohmann::json& value) - -> std::string { - std::string hash_obj_key = {}; - if (_key.empty()) { +auto DataObjectOperator::SaveDataObj(const QString& _key, + const nlohmann::json& value) -> QString { + QByteArray hash_obj_key = {}; + if (_key.isEmpty()) { hash_obj_key = QCryptographicHash::hash( - hash_key_ + QByteArray::fromStdString( - PassphraseGenerator::GetInstance().Generate(32) + - to_iso_extended_string( - boost::posix_time::second_clock::local_time())), + hash_key_ + .append( + PassphraseGenerator::GetInstance().Generate(32).toUtf8()) + .append(QDateTime::currentDateTime().toString().toUtf8()), QCryptographicHash::Sha256) - .toHex() - .toStdString(); + .toHex(); } else { - hash_obj_key = - QCryptographicHash::hash(hash_key_ + QByteArray::fromStdString(_key), - QCryptographicHash::Sha256) - .toHex() - .toStdString(); + hash_obj_key = QCryptographicHash::hash(hash_key_.append(_key.toUtf8()), + QCryptographicHash::Sha256) + .toHex(); } - const auto obj_path = app_data_objs_path_ / hash_obj_key; + const auto obj_path = app_data_objs_path_ / hash_obj_key.toStdString(); QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); @@ -98,17 +91,17 @@ auto DataObjectOperator::SaveDataObj(const std::string& _key, GF_CORE_LOG_TRACE("saving data object {} to {} , size: {} bytes", hash_obj_key, obj_path.u8string(), encoded.size()); - WriteFileStd(obj_path.u8string(), encoded.toStdString()); + WriteFile(obj_path.c_str(), encoded); - return _key.empty() ? hash_obj_key : std::string(); + return _key.isEmpty() ? hash_obj_key : QString(); } -auto DataObjectOperator::GetDataObject(const std::string& _key) +auto DataObjectOperator::GetDataObject(const QString& _key) -> std::optional { try { GF_CORE_LOG_TRACE("get data object from disk {}", _key); auto hash_obj_key = - QCryptographicHash::hash(hash_key_ + QByteArray::fromStdString(_key), + QCryptographicHash::hash(hash_key_.append(_key.toUtf8()), QCryptographicHash::Sha256) .toHex() .toStdString(); @@ -120,21 +113,20 @@ auto DataObjectOperator::GetDataObject(const std::string& _key) return {}; } - std::string buffer; - if (!ReadFileStd(obj_path.u8string(), buffer)) { + QByteArray encoded_data; + if (!ReadFile(obj_path.c_str(), encoded_data)) { GF_CORE_LOG_ERROR("failed to read data object, key: {}", _key); return {}; } - auto encoded = QByteArray::fromStdString(buffer); QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); GF_CORE_LOG_TRACE("decrypting data object {} , hash key size: {}", - encoded.size(), hash_key_.size()); + encoded_data.size(), hash_key_.size()); auto decoded = - encryption.removePadding(encryption.decode(encoded, hash_key_)); + encryption.removePadding(encryption.decode(encoded_data, hash_key_)); GF_CORE_LOG_TRACE("data object decoded: {}", _key); @@ -145,25 +137,24 @@ auto DataObjectOperator::GetDataObject(const std::string& _key) } } -auto DataObjectOperator::GetDataObjectByRef(const std::string& _ref) +auto DataObjectOperator::GetDataObjectByRef(const QString& _ref) -> std::optional { if (_ref.size() != 64) return {}; try { const auto& hash_obj_key = _ref; - const auto obj_path = app_data_objs_path_ / hash_obj_key; + const auto obj_path = app_data_objs_path_ / hash_obj_key.toStdString(); if (!std::filesystem::exists(obj_path)) return {}; - std::string buffer; - if (!ReadFileStd(obj_path.u8string(), buffer)) return {}; - auto encoded = QByteArray::fromStdString(buffer); + QByteArray encoded_data; + if (!ReadFile(obj_path.c_str(), encoded_data)) return {}; QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); auto decoded = - encryption.removePadding(encryption.decode(encoded, hash_key_)); + encryption.removePadding(encryption.decode(encoded_data, hash_key_)); return nlohmann::json::parse(decoded.toStdString()); } catch (...) { -- cgit v1.2.3 From 6983b5c1dd82d159236ebd06cf17f071cc9c1ee9 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 12 Jan 2024 23:08:38 +0800 Subject: refactor: remove boost and use QString instead of std::filesystem::path --- src/core/function/DataObjectOperator.cpp | 38 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 20 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index f756e3e7..3033f23b 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -37,31 +37,30 @@ namespace GpgFrontend { void DataObjectOperator::init_app_secure_key() { GF_CORE_LOG_TRACE("initializing application secure key"); - WriteFile(app_secure_key_path_.c_str(), + WriteFile(app_secure_key_path_, PassphraseGenerator::GetInstance().Generate(256).toUtf8()); - std::filesystem::permissions( - app_secure_key_path_, - std::filesystem::perms::owner_read | std::filesystem::perms::owner_write); + QFile::setPermissions(app_secure_key_path_, + QFileDevice::ReadOwner | QFileDevice::WriteOwner); } DataObjectOperator::DataObjectOperator(int channel) : SingletonFunctionObject(channel) { - if (!is_directory(app_secure_path_)) create_directory(app_secure_path_); + if (!QDir(app_secure_path_).exists()) QDir(app_secure_path_).mkdir("."); - if (!exists(app_secure_key_path_)) { + if (!QDir(app_secure_key_path_).exists()) { init_app_secure_key(); } QByteArray key; - if (!ReadFile(app_secure_key_path_.c_str(), key)) { + if (!ReadFile(app_secure_key_path_, key)) { GF_CORE_LOG_ERROR("failed to read app secure key file: {}", - app_secure_key_path_.u8string()); + app_secure_key_path_); throw std::runtime_error("failed to read app secure key file"); } hash_key_ = QCryptographicHash::hash(key, QCryptographicHash::Sha256); GF_CORE_LOG_TRACE("app secure key loaded {} bytes", hash_key_.size()); - if (!exists(app_data_objs_path_)) create_directory(app_data_objs_path_); + if (!QDir(app_data_objs_path_).exists()) QDir(app_data_objs_path_).mkpath("."); } auto DataObjectOperator::SaveDataObj(const QString& _key, @@ -82,16 +81,16 @@ auto DataObjectOperator::SaveDataObj(const QString& _key, .toHex(); } - const auto obj_path = app_data_objs_path_ / hash_obj_key.toStdString(); + const auto obj_path = app_data_objs_path_ + "/" + hash_obj_key; QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); auto encoded = encryption.encode(QByteArray::fromStdString(to_string(value)), hash_key_); GF_CORE_LOG_TRACE("saving data object {} to {} , size: {} bytes", - hash_obj_key, obj_path.u8string(), encoded.size()); + hash_obj_key, obj_path, encoded.size()); - WriteFile(obj_path.c_str(), encoded); + WriteFile(obj_path, encoded); return _key.isEmpty() ? hash_obj_key : QString(); } @@ -103,18 +102,17 @@ auto DataObjectOperator::GetDataObject(const QString& _key) auto hash_obj_key = QCryptographicHash::hash(hash_key_.append(_key.toUtf8()), QCryptographicHash::Sha256) - .toHex() - .toStdString(); + .toHex(); - const auto obj_path = app_data_objs_path_ / hash_obj_key; + const auto obj_path = app_data_objs_path_ + "/" + hash_obj_key; - if (!std::filesystem::exists(obj_path)) { + if (!QFileInfo(obj_path).exists()) { GF_CORE_LOG_WARN("data object not found, key: {}", _key); return {}; } QByteArray encoded_data; - if (!ReadFile(obj_path.c_str(), encoded_data)) { + if (!ReadFile(obj_path, encoded_data)) { GF_CORE_LOG_ERROR("failed to read data object, key: {}", _key); return {}; } @@ -143,12 +141,12 @@ auto DataObjectOperator::GetDataObjectByRef(const QString& _ref) try { const auto& hash_obj_key = _ref; - const auto obj_path = app_data_objs_path_ / hash_obj_key.toStdString(); + const auto obj_path = app_data_objs_path_ + "/" + hash_obj_key; - if (!std::filesystem::exists(obj_path)) return {}; + if (!QFileInfo(obj_path).exists()) return {}; QByteArray encoded_data; - if (!ReadFile(obj_path.c_str(), encoded_data)) return {}; + if (!ReadFile(obj_path, encoded_data)) return {}; QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); -- cgit v1.2.3 From 6c632d70b391f8b317c68f7db8cfd217f9370995 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 15 Jan 2024 17:22:32 +0800 Subject: feat: use qt json support components in data object and infos gathering module --- src/core/function/DataObjectOperator.cpp | 96 ++++++++++++++++---------------- 1 file changed, 47 insertions(+), 49 deletions(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index 3033f23b..1d4d2c4a 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -36,7 +36,7 @@ namespace GpgFrontend { void DataObjectOperator::init_app_secure_key() { - GF_CORE_LOG_TRACE("initializing application secure key"); + GF_CORE_LOG_INFO("initializing application secure key..."); WriteFile(app_secure_key_path_, PassphraseGenerator::GetInstance().Generate(256).toUtf8()); QFile::setPermissions(app_secure_key_path_, @@ -46,97 +46,95 @@ void DataObjectOperator::init_app_secure_key() { DataObjectOperator::DataObjectOperator(int channel) : SingletonFunctionObject(channel) { if (!QDir(app_secure_path_).exists()) QDir(app_secure_path_).mkdir("."); - - if (!QDir(app_secure_key_path_).exists()) { - init_app_secure_key(); - } + if (!QFileInfo(app_secure_key_path_).exists()) init_app_secure_key(); QByteArray key; if (!ReadFile(app_secure_key_path_, key)) { GF_CORE_LOG_ERROR("failed to read app secure key file: {}", app_secure_key_path_); - throw std::runtime_error("failed to read app secure key file"); + // unsafe mode + key = {}; } + hash_key_ = QCryptographicHash::hash(key, QCryptographicHash::Sha256); - GF_CORE_LOG_TRACE("app secure key loaded {} bytes", hash_key_.size()); - if (!QDir(app_data_objs_path_).exists()) QDir(app_data_objs_path_).mkpath("."); + if (!QDir(app_data_objs_path_).exists()) { + QDir(app_data_objs_path_).mkpath("."); + } } -auto DataObjectOperator::SaveDataObj(const QString& _key, - const nlohmann::json& value) -> QString { +auto DataObjectOperator::SaveDataObj(const QString& key, + const QJsonDocument& value) -> QString { QByteArray hash_obj_key = {}; - if (_key.isEmpty()) { + if (key.isEmpty()) { hash_obj_key = QCryptographicHash::hash( - hash_key_ - .append( - PassphraseGenerator::GetInstance().Generate(32).toUtf8()) - .append(QDateTime::currentDateTime().toString().toUtf8()), + hash_key_ + + PassphraseGenerator::GetInstance().Generate(32).toUtf8() + + QDateTime::currentDateTime().toString().toUtf8(), QCryptographicHash::Sha256) .toHex(); } else { - hash_obj_key = QCryptographicHash::hash(hash_key_.append(_key.toUtf8()), + hash_obj_key = QCryptographicHash::hash(hash_key_ + key.toUtf8(), QCryptographicHash::Sha256) .toHex(); } - const auto obj_path = app_data_objs_path_ + "/" + hash_obj_key; - - QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, - QAESEncryption::Padding::ISO); - auto encoded = - encryption.encode(QByteArray::fromStdString(to_string(value)), hash_key_); - GF_CORE_LOG_TRACE("saving data object {} to {} , size: {} bytes", - hash_obj_key, obj_path, encoded.size()); - - WriteFile(obj_path, encoded); + const auto target_obj_path = app_data_objs_path_ + "/" + hash_obj_key; + auto encoded_data = + QAESEncryption(QAESEncryption::AES_256, QAESEncryption::ECB, + QAESEncryption::Padding::ISO) + .encode(value.toJson(), hash_key_); + GF_CORE_LOG_TRACE("saving data object {} to disk {} , size: {} bytes", + hash_obj_key, target_obj_path, encoded_data.size()); + + // recreate if not exists + if (!QDir(app_data_objs_path_).exists()) { + QDir(app_data_objs_path_).mkpath("."); + } - return _key.isEmpty() ? hash_obj_key : QString(); + if (!WriteFile(target_obj_path, encoded_data)) { + GF_CORE_LOG_ERROR("failed to write data object to disk: {}", key); + } + return key.isEmpty() ? hash_obj_key : QString(); } -auto DataObjectOperator::GetDataObject(const QString& _key) - -> std::optional { +auto DataObjectOperator::GetDataObject(const QString& key) + -> std::optional { try { - GF_CORE_LOG_TRACE("get data object from disk {}", _key); - auto hash_obj_key = - QCryptographicHash::hash(hash_key_.append(_key.toUtf8()), - QCryptographicHash::Sha256) - .toHex(); + GF_CORE_LOG_TRACE("try to get data object from disk, key: {}", key); + auto hash_obj_key = QCryptographicHash::hash(hash_key_ + key.toUtf8(), + QCryptographicHash::Sha256) + .toHex(); const auto obj_path = app_data_objs_path_ + "/" + hash_obj_key; - if (!QFileInfo(obj_path).exists()) { - GF_CORE_LOG_WARN("data object not found, key: {}", _key); + GF_CORE_LOG_WARN("data object not found from disk, key: {}", key); return {}; } QByteArray encoded_data; if (!ReadFile(obj_path, encoded_data)) { - GF_CORE_LOG_ERROR("failed to read data object, key: {}", _key); + GF_CORE_LOG_ERROR("failed to read data object from disk, key: {}", key); return {}; } QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); - GF_CORE_LOG_TRACE("decrypting data object {} , hash key size: {}", - encoded_data.size(), hash_key_.size()); - - auto decoded = + auto decoded_data = encryption.removePadding(encryption.decode(encoded_data, hash_key_)); - - GF_CORE_LOG_TRACE("data object decoded: {}", _key); - - return nlohmann::json::parse(decoded.toStdString()); + GF_CORE_LOG_TRACE("data object has been decoded, key: {}, data: {}", key, + decoded_data); + return QJsonDocument::fromJson(decoded_data); } catch (...) { - GF_CORE_LOG_ERROR("failed to get data object, caught exception: {}", _key); + GF_CORE_LOG_ERROR("failed to get data object, caught exception: {}", key); return {}; } } auto DataObjectOperator::GetDataObjectByRef(const QString& _ref) - -> std::optional { + -> std::optional { if (_ref.size() != 64) return {}; try { @@ -151,10 +149,10 @@ auto DataObjectOperator::GetDataObjectByRef(const QString& _ref) QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::Padding::ISO); - auto decoded = + auto decoded_data = encryption.removePadding(encryption.decode(encoded_data, hash_key_)); - return nlohmann::json::parse(decoded.toStdString()); + return QJsonDocument::fromJson(decoded_data); } catch (...) { return {}; } -- cgit v1.2.3 From 5bcf07c5f6a3429bc787c31d26edd796c8cad9c6 Mon Sep 17 00:00:00 2001 From: saturneric Date: Wed, 17 Jan 2024 01:41:52 +0800 Subject: fix: solve discovered issues --- src/core/function/DataObjectOperator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index 1d4d2c4a..e1d8b4da 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -45,7 +45,7 @@ void DataObjectOperator::init_app_secure_key() { DataObjectOperator::DataObjectOperator(int channel) : SingletonFunctionObject(channel) { - if (!QDir(app_secure_path_).exists()) QDir(app_secure_path_).mkdir("."); + if (!QDir(app_secure_path_).exists()) QDir(app_secure_path_).mkpath("."); if (!QFileInfo(app_secure_key_path_).exists()) init_app_secure_key(); QByteArray key; -- cgit v1.2.3 From 37848811b6c8ca6c2a707431ec077c8098918afe Mon Sep 17 00:00:00 2001 From: saturneric Date: Thu, 18 Jan 2024 00:14:13 +0800 Subject: fix: improve code quality, docs and ci files --- src/core/function/DataObjectOperator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/core/function/DataObjectOperator.cpp') diff --git a/src/core/function/DataObjectOperator.cpp b/src/core/function/DataObjectOperator.cpp index e1d8b4da..cbf21f8e 100644 --- a/src/core/function/DataObjectOperator.cpp +++ b/src/core/function/DataObjectOperator.cpp @@ -65,7 +65,7 @@ DataObjectOperator::DataObjectOperator(int channel) auto DataObjectOperator::SaveDataObj(const QString& key, const QJsonDocument& value) -> QString { - QByteArray hash_obj_key = {}; + QByteArray hash_obj_key; if (key.isEmpty()) { hash_obj_key = QCryptographicHash::hash( -- cgit v1.2.3