aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/settings/GlobalSettingStation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/settings/GlobalSettingStation.cpp')
-rw-r--r--src/ui/settings/GlobalSettingStation.cpp266
1 files changed, 0 insertions, 266 deletions
diff --git a/src/ui/settings/GlobalSettingStation.cpp b/src/ui/settings/GlobalSettingStation.cpp
deleted file mode 100644
index e1e5f6f4..00000000
--- a/src/ui/settings/GlobalSettingStation.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/**
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Foobar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from gpg4usb-team.
- * Their source code version also complies with GNU General Public License.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]> starting on May 12, 2021.
- *
- */
-
-#include "GlobalSettingStation.h"
-
-#include <openssl/bio.h>
-#include <openssl/pem.h>
-
-#include <vmime/security/cert/openssl/X509Certificate_OpenSSL.hpp>
-#include <vmime/vmime.hpp>
-
-std::unique_ptr<GpgFrontend::UI::GlobalSettingStation>
- GpgFrontend::UI::GlobalSettingStation::_instance = nullptr;
-
-GpgFrontend::UI::GlobalSettingStation&
-GpgFrontend::UI::GlobalSettingStation::GetInstance() {
- if (_instance == nullptr) {
- _instance = std::make_unique<GlobalSettingStation>();
- }
- return *_instance;
-}
-
-void GpgFrontend::UI::GlobalSettingStation::SyncSettings() noexcept {
- using namespace libconfig;
- try {
- ui_cfg.writeFile(ui_config_path.string().c_str());
- LOG(INFO) << _("Updated ui configuration successfully written to")
- << ui_config_path;
-
- } catch (const FileIOException& fioex) {
- LOG(ERROR) << _("I/O error while writing ui configuration file")
- << ui_config_path;
- }
-}
-
-GpgFrontend::UI::GlobalSettingStation::GlobalSettingStation() noexcept {
- using namespace boost::filesystem;
- using namespace libconfig;
-
- el::Loggers::addFlag(el::LoggingFlag::AutoSpacing);
-
- LOG(INFO) << _("App Path") << app_path;
- LOG(INFO) << _("App Configure Path") << app_configure_path;
- LOG(INFO) << _("App Data Path") << app_data_path;
- LOG(INFO) << _("App Log Path") << app_log_path;
- LOG(INFO) << _("App Locale Path") << app_locale_path;
-
- if (!is_directory(app_configure_path)) create_directory(app_configure_path);
-
- if (!is_directory(app_data_path)) create_directory(app_data_path);
-
- if (!is_directory(app_log_path)) create_directory(app_log_path);
-
- if (!is_directory(ui_config_dir_path)) create_directory(ui_config_dir_path);
-
- if (!is_directory(app_secure_path)) create_directory(app_secure_path);
-
- if (!exists(app_secure_key_path)) {
- init_app_secure_key();
- }
-
- const auto key =
- GpgFrontend::read_all_data_in_file(app_secure_key_path.string());
- hash_key_ = QCryptographicHash::hash(QByteArray::fromStdString(key),
- QCryptographicHash::Sha256);
-
- if (!exists(app_data_objs_path)) create_directory(app_data_objs_path);
-
- if (!exists(ui_config_path)) {
- try {
- this->ui_cfg.writeFile(ui_config_path.string().c_str());
- LOG(INFO) << _("UserInterface configuration successfully written to")
- << ui_config_path;
-
- } catch (const FileIOException& fioex) {
- LOG(ERROR)
- << _("I/O error while writing UserInterface configuration file")
- << ui_config_path;
- }
- } else {
- try {
- this->ui_cfg.readFile(ui_config_path.string().c_str());
- LOG(INFO) << _("UserInterface configuration successfully read from")
- << ui_config_path;
- } catch (const FileIOException& fioex) {
- LOG(ERROR) << _("I/O error while reading UserInterface configure file");
- } catch (const ParseException& pex) {
- LOG(ERROR) << _("Parse error at ") << pex.getFile() << ":"
- << pex.getLine() << " - " << pex.getError();
- }
- }
-}
-
-void GpgFrontend::UI::GlobalSettingStation::AddRootCert(
- const boost::filesystem::path& path) {
- auto out_buffer = GpgFrontend::read_all_data_in_file(path.string());
-
- auto mem_bio = std::shared_ptr<BIO>(
- BIO_new_mem_buf(out_buffer.data(), static_cast<int>(out_buffer.size())),
- [](BIO* _p) { BIO_free(_p); });
-
- auto x509 = std::shared_ptr<X509>(
- PEM_read_bio_X509(mem_bio.get(), nullptr, nullptr, nullptr),
- [](X509* _p) { X509_free(_p); });
-
- if (!x509) return;
-
- root_certs_.push_back(x509);
-}
-
-vmime::shared_ptr<vmime::security::cert::defaultCertificateVerifier>
-GpgFrontend::UI::GlobalSettingStation::GetCertVerifier() const {
- auto p_cv =
- vmime::make_shared<vmime::security::cert::defaultCertificateVerifier>();
-
- std::vector<vmime::shared_ptr<vmime::security::cert::X509Certificate>>
- _root_certs;
- for (const auto& cert : root_certs_) {
- _root_certs.push_back(
- std::make_shared<vmime::security::cert::X509Certificate_OpenSSL>(
- cert.get()));
- }
- return p_cv;
-}
-
-const std::vector<std::shared_ptr<X509>>&
-GpgFrontend::UI::GlobalSettingStation::GetRootCerts() {
- return root_certs_;
-}
-
-std::string GpgFrontend::UI::GlobalSettingStation::generate_passphrase(
- int len) {
- std::uniform_int_distribution<int> dist(999, 99999);
- static const char alphanum[] =
- "0123456789"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz";
- std::string tmp_str;
- tmp_str.reserve(len);
-
- for (int i = 0; i < len; ++i) {
- tmp_str += alphanum[dist(mt) % (sizeof(alphanum) - 1)];
- }
-
- return tmp_str;
-}
-
-void GpgFrontend::UI::GlobalSettingStation::init_app_secure_key() {
- GpgFrontend::write_buffer_to_file(app_secure_key_path.string(),
- generate_passphrase(256));
- boost::filesystem::permissions(
- app_secure_key_path,
- boost::filesystem::owner_read | boost::filesystem::owner_write);
-}
-
-std::string GpgFrontend::UI::GlobalSettingStation::SaveDataObj(
- const std::string& _key, const nlohmann::json& value) {
- std::string _hash_obj_key = {};
- if (_key.empty()) {
- _hash_obj_key =
- QCryptographicHash::hash(
- hash_key_ + QByteArray::fromStdString(
- generate_passphrase(32) +
- to_iso_extended_string(
- boost::posix_time::second_clock::local_time())),
- QCryptographicHash::Sha256)
- .toHex()
- .toStdString();
- } else {
- _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;
-
- QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB,
- QAESEncryption::Padding::ISO);
- auto encoded =
- encryption.encode(QByteArray::fromStdString(to_string(value)), hash_key_);
-
- GpgFrontend::write_buffer_to_file(obj_path.string(), encoded.toStdString());
-
- return _key.empty() ? _hash_obj_key : std::string();
-}
-
-std::optional<nlohmann::json>
-GpgFrontend::UI::GlobalSettingStation::GetDataObject(const std::string& _key) {
- try {
- 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;
-
- if (!boost::filesystem::exists(obj_path)) {
- return {};
- }
-
- auto buffer = GpgFrontend::read_all_data_in_file(obj_path.string());
- auto encoded = QByteArray::fromStdString(buffer);
-
- QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB,
- QAESEncryption::Padding::ISO);
-
- auto decoded =
- encryption.removePadding(encryption.decode(encoded, hash_key_));
-
- return nlohmann::json::parse(decoded.toStdString());
- } catch (...) {
- return {};
- }
-}
-std::optional<nlohmann::json>
-GpgFrontend::UI::GlobalSettingStation::GetDataObjectByRef(
- const std::string& _ref) {
- if (_ref.size() != 64) return {};
-
- try {
- auto _hash_obj_key = _ref;
- const auto obj_path = app_data_objs_path / _hash_obj_key;
-
- if (!boost::filesystem::exists(obj_path)) return {};
-
- auto buffer = GpgFrontend::read_all_data_in_file(obj_path.string());
- auto encoded = QByteArray::fromStdString(buffer);
-
- QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB,
- QAESEncryption::Padding::ISO);
-
- auto decoded =
- encryption.removePadding(encryption.decode(encoded, hash_key_));
-
- return nlohmann::json::parse(decoded.toStdString());
- } catch (...) {
- return {};
- }
-}
-
-GpgFrontend::UI::GlobalSettingStation::~GlobalSettingStation() noexcept =
- default;