diff options
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/UserInterfaceUtils.cpp | 78 | ||||
-rw-r--r-- | src/ui/settings/GlobalSettingStation.cpp | 96 |
2 files changed, 103 insertions, 71 deletions
diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp index 2f085c21..ab81242d 100644 --- a/src/ui/UserInterfaceUtils.cpp +++ b/src/ui/UserInterfaceUtils.cpp @@ -30,9 +30,10 @@ #include <utility> -#include "dialog/WaitingDialog.h" +#include "core/file/FileOperator.h" #include "core/result_analyse/GpgResultAnalyse.h" #include "ui/SignalStation.h" +#include "ui/dialog/WaitingDialog.h" #include "ui/mail/SendMailDialog.h" #include "ui/settings/GlobalSettingStation.h" #include "ui/widgets/InfoBoardWidget.h" @@ -44,8 +45,8 @@ std::unique_ptr<GpgFrontend::UI::CommonUtils> GpgFrontend::UI::CommonUtils::instance_ = nullptr; #ifdef SMTP_SUPPORT -void send_an_email(QWidget* parent, InfoBoardWidget* info_board, - const QString& text, bool attach_signature) { +void send_an_email(QWidget *parent, InfoBoardWidget *info_board, + const QString &text, bool attach_signature) { info_board->AddOptionalAction(_("Send Encrypted Mail"), [=]() { bool smtp_enabled = false; try { @@ -68,8 +69,8 @@ void send_an_email(QWidget* parent, InfoBoardWidget* info_board, } #endif -void show_verify_details(QWidget* parent, InfoBoardWidget* info_board, - GpgError error, const GpgVerifyResult& verify_result) { +void show_verify_details(QWidget *parent, InfoBoardWidget *info_board, + GpgError error, const GpgVerifyResult &verify_result) { // take out result info_board->ResetOptionActionsMenu(); info_board->AddOptionalAction("Show Verify Details", [=]() { @@ -77,8 +78,8 @@ void show_verify_details(QWidget* parent, InfoBoardWidget* info_board, }); } -void import_unknown_key_from_keyserver(QWidget* parent, - const GpgVerifyResultAnalyse& verify_res) { +void import_unknown_key_from_keyserver( + QWidget *parent, const GpgVerifyResultAnalyse &verify_res) { QMessageBox::StandardButton reply; reply = QMessageBox::question( parent, _("Public key not found locally"), @@ -89,7 +90,7 @@ void import_unknown_key_from_keyserver(QWidget* parent, if (reply == QMessageBox::Yes) { auto dialog = KeyServerImportDialog(true, parent); auto key_ids = std::make_unique<KeyIdArgsList>(); - auto* signature = verify_res.GetSignatures(); + auto *signature = verify_res.GetSignatures(); while (signature != nullptr) { LOG(INFO) << "signature fpr" << signature->fpr; key_ids->push_back(signature->fpr); @@ -100,8 +101,8 @@ void import_unknown_key_from_keyserver(QWidget* parent, } } -void refresh_info_board(InfoBoardWidget* info_board, int status, - const std::string& report_text) { +void refresh_info_board(InfoBoardWidget *info_board, int status, + const std::string &report_text) { if (status < 0) info_board->SlotRefresh(QString::fromStdString(report_text), INFO_ERROR_CRITICAL); @@ -112,16 +113,16 @@ void refresh_info_board(InfoBoardWidget* info_board, int status, INFO_ERROR_WARN); } -void process_result_analyse(TextEdit* edit, InfoBoardWidget* info_board, - const GpgResultAnalyse& result_analyse) { +void process_result_analyse(TextEdit *edit, InfoBoardWidget *info_board, + const GpgResultAnalyse &result_analyse) { info_board->AssociateTabWidget(edit->tab_widget_); refresh_info_board(info_board, result_analyse.GetStatus(), result_analyse.GetResultReport()); } -void process_result_analyse(TextEdit* edit, InfoBoardWidget* info_board, - const GpgResultAnalyse& result_analyse_a, - const GpgResultAnalyse& result_analyse_b) { +void process_result_analyse(TextEdit *edit, InfoBoardWidget *info_board, + const GpgResultAnalyse &result_analyse_a, + const GpgResultAnalyse &result_analyse_b) { LOG(INFO) << "process_result_analyse Started"; info_board->AssociateTabWidget(edit->tab_widget_); @@ -132,14 +133,14 @@ void process_result_analyse(TextEdit* edit, InfoBoardWidget* info_board, result_analyse_a.GetResultReport() + result_analyse_b.GetResultReport()); } -void process_operation(QWidget* parent, const std::string& waiting_title, - const std::function<void()>& func) { +void process_operation(QWidget *parent, const std::string &waiting_title, + const std::function<void()> &func) { auto thread = QThread::create(func); QApplication::connect(thread, &QThread::finished, thread, &QThread::deleteLater); thread->start(); - auto* dialog = + auto *dialog = new WaitingDialog(QString::fromStdString(waiting_title), parent); while (thread->isRunning()) { QApplication::processEvents(); @@ -147,7 +148,7 @@ void process_operation(QWidget* parent, const std::string& waiting_title, dialog->close(); } -CommonUtils* CommonUtils::GetInstance() { +CommonUtils *CommonUtils::GetInstance() { if (instance_ == nullptr) { instance_ = std::make_unique<CommonUtils>(); } @@ -155,7 +156,8 @@ CommonUtils* CommonUtils::GetInstance() { } CommonUtils::CommonUtils() : QWidget(nullptr) { - connect(this, &CommonUtils::SignalKeyStatusUpdated, SignalStation::GetInstance(), + connect(this, &CommonUtils::SignalKeyStatusUpdated, + SignalStation::GetInstance(), &SignalStation::SignalKeyDatabaseRefresh); connect(this, &CommonUtils::SignalGnupgNotInstall, this, []() { QMessageBox::critical( @@ -168,42 +170,48 @@ CommonUtils::CommonUtils() : QWidget(nullptr) { }); } -void CommonUtils::SlotImportKeys(QWidget* parent, - const std::string& in_buffer) { +void CommonUtils::SlotImportKeys(QWidget *parent, + const std::string &in_buffer) { GpgImportInformation result = GpgKeyImportExporter::GetInstance().ImportKey( std::make_unique<ByteArray>(in_buffer)); emit SignalKeyStatusUpdated(); new KeyImportDetailDialog(result, false, parent); } -void CommonUtils::SlotImportKeyFromFile(QWidget* parent) { +void CommonUtils::SlotImportKeyFromFile(QWidget *parent) { QString file_name = QFileDialog::getOpenFileName( this, _("Open Key"), QString(), QString(_("Key Files")) + " (*.asc *.txt);;" + _("Keyring files") + " (*.gpg);;All Files (*)"); if (!file_name.isNull()) { - SlotImportKeys(parent, read_all_data_in_file(file_name.toStdString())); + QByteArray key_buffer; + if (!FileOperator::ReadFile(file_name, key_buffer)) { + QMessageBox::critical(nullptr, _("File Open Failed"), + _("Failed to open file: ") + file_name); + return; + } + SlotImportKeys(parent, key_buffer.toStdString()); } } -void CommonUtils::SlotImportKeyFromKeyServer(QWidget* parent) { +void CommonUtils::SlotImportKeyFromKeyServer(QWidget *parent) { auto dialog = new KeyServerImportDialog(false, parent); dialog->show(); } -void CommonUtils::SlotImportKeyFromClipboard(QWidget* parent) { - QClipboard* cb = QApplication::clipboard(); +void CommonUtils::SlotImportKeyFromClipboard(QWidget *parent) { + QClipboard *cb = QApplication::clipboard(); SlotImportKeys(parent, cb->text(QClipboard::Clipboard).toUtf8().toStdString()); } void CommonUtils::SlotExecuteGpgCommand( - const QStringList& arguments, - const std::function<void(QProcess*)>& interact_func) { + const QStringList &arguments, + const std::function<void(QProcess *)> &interact_func) { QEventLoop looper; auto dialog = new WaitingDialog(_("Processing"), nullptr); dialog->show(); - auto* gpg_process = new QProcess(&looper); + auto *gpg_process = new QProcess(&looper); gpg_process->setProcessChannelMode(QProcess::MergedChannels); connect(gpg_process, @@ -244,12 +252,12 @@ void CommonUtils::SlotExecuteGpgCommand( } void CommonUtils::SlotImportKeyFromKeyServer( - int ctx_channel, const KeyIdArgsList& key_ids, - const ImportCallbackFunctiopn& callback) { + int ctx_channel, const KeyIdArgsList &key_ids, + const ImportCallbackFunctiopn &callback) { std::string target_keyserver; if (target_keyserver.empty()) { try { - auto& settings = GlobalSettingStation::GetInstance().GetUISettings(); + auto &settings = GlobalSettingStation::GetInstance().GetUISettings(); target_keyserver = settings.lookup("keyserver.default_server").c_str(); @@ -272,7 +280,7 @@ void CommonUtils::SlotImportKeyFromKeyServer( auto network_manager = std::make_unique<QNetworkAccessManager>(); // LOOP decltype(key_ids.size()) current_index = 1, all_index = key_ids.size(); - for (const auto& key_id : key_ids) { + for (const auto &key_id : key_ids) { // New Req Url QUrl req_url(target_keyserver_url.scheme() + "://" + target_keyserver_url.host() + @@ -282,7 +290,7 @@ void CommonUtils::SlotImportKeyFromKeyServer( LOG(INFO) << "request url" << req_url.toString().toStdString(); // Waiting for reply - QNetworkReply* reply = network_manager->get(QNetworkRequest(req_url)); + QNetworkReply *reply = network_manager->get(QNetworkRequest(req_url)); QEventLoop loop; connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); diff --git a/src/ui/settings/GlobalSettingStation.cpp b/src/ui/settings/GlobalSettingStation.cpp index 54e7daaf..5401536f 100644 --- a/src/ui/settings/GlobalSettingStation.cpp +++ b/src/ui/settings/GlobalSettingStation.cpp @@ -34,10 +34,12 @@ #include <vmime/security/cert/openssl/X509Certificate_OpenSSL.hpp> #include <vmime/vmime.hpp> +#include "core/file/FileOperator.h" + std::unique_ptr<GpgFrontend::UI::GlobalSettingStation> GpgFrontend::UI::GlobalSettingStation::instance_ = nullptr; -GpgFrontend::UI::GlobalSettingStation& +GpgFrontend::UI::GlobalSettingStation & GpgFrontend::UI::GlobalSettingStation::GetInstance() { if (instance_ == nullptr) { instance_ = std::make_unique<GlobalSettingStation>(); @@ -52,7 +54,7 @@ void GpgFrontend::UI::GlobalSettingStation::SyncSettings() noexcept { LOG(INFO) << _("Updated ui configuration successfully written to") << ui_config_path_; - } catch (const FileIOException& fioex) { + } catch (const FileIOException &fioex) { LOG(ERROR) << _("I/O error while writing ui configuration file") << ui_config_path_; } @@ -70,26 +72,35 @@ GpgFrontend::UI::GlobalSettingStation::GlobalSettingStation() noexcept { 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_configure_path_)) + create_directory(app_configure_path_); - if (!is_directory(app_data_path_)) create_directory(app_data_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(app_log_path_)) + create_directory(app_log_path_); - if (!is_directory(ui_config_dir_path_)) create_directory(ui_config_dir_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 (!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()); + std::string key; + if (!FileOperator::ReadFileStd(app_secure_key_path_.string(), key)) { + LOG(ERROR) << _("Failed to read app secure key file") + << app_secure_key_path_; + } hash_key_ = QCryptographicHash::hash(QByteArray::fromStdString(key), QCryptographicHash::Sha256); - if (!exists(app_data_objs_path_)) create_directory(app_data_objs_path_); + if (!exists(app_data_objs_path_)) + create_directory(app_data_objs_path_); if (!exists(ui_config_path_)) { try { @@ -97,7 +108,7 @@ GpgFrontend::UI::GlobalSettingStation::GlobalSettingStation() noexcept { LOG(INFO) << _("UserInterface configuration successfully written to") << ui_config_path_; - } catch (const FileIOException& fioex) { + } catch (const FileIOException &fioex) { LOG(ERROR) << _("I/O error while writing UserInterface configuration file") << ui_config_path_; @@ -107,9 +118,9 @@ GpgFrontend::UI::GlobalSettingStation::GlobalSettingStation() noexcept { this->ui_cfg_.readFile(ui_config_path_.string().c_str()); LOG(INFO) << _("UserInterface configuration successfully read from") << ui_config_path_; - } catch (const FileIOException& fioex) { + } catch (const FileIOException &fioex) { LOG(ERROR) << _("I/O error while reading UserInterface configure file"); - } catch (const ParseException& pex) { + } catch (const ParseException &pex) { LOG(ERROR) << _("Parse error at ") << pex.getFile() << ":" << pex.getLine() << " - " << pex.getError(); } @@ -117,18 +128,24 @@ GpgFrontend::UI::GlobalSettingStation::GlobalSettingStation() noexcept { } void GpgFrontend::UI::GlobalSettingStation::AddRootCert( - const boost::filesystem::path& path) { - auto out_buffer = GpgFrontend::read_all_data_in_file(path.string()); + const boost::filesystem::path &path) { + + std::string out_buffer; + if (!FileOperator::ReadFileStd(path.string(), out_buffer)) { + LOG(ERROR) << _("Failed to read root certificate file") << path; + return; + } 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); }); + [](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); }); + [](X509 *_p) { X509_free(_p); }); - if (!x509) return; + if (!x509) + return; root_certs_.push_back(x509); } @@ -140,7 +157,7 @@ GpgFrontend::UI::GlobalSettingStation::GetCertVerifier() const { std::vector<vmime::shared_ptr<vmime::security::cert::X509Certificate>> _root_certs; - for (const auto& cert : root_certs_) { + for (const auto &cert : root_certs_) { _root_certs.push_back( std::make_shared<vmime::security::cert::X509Certificate_OpenSSL>( cert.get())); @@ -148,18 +165,17 @@ GpgFrontend::UI::GlobalSettingStation::GetCertVerifier() const { return p_cv; } -const std::vector<std::shared_ptr<X509>>& +const std::vector<std::shared_ptr<X509>> & GpgFrontend::UI::GlobalSettingStation::GetRootCerts() { return root_certs_; } -std::string GpgFrontend::UI::GlobalSettingStation::generate_passphrase( - int len) { +std::string +GpgFrontend::UI::GlobalSettingStation::generate_passphrase(int len) { std::uniform_int_distribution<int> dist(999, 99999); - static const char alphanum[] = - "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; + static const char alphanum[] = "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; std::string tmp_str; tmp_str.reserve(len); @@ -173,13 +189,13 @@ std::string GpgFrontend::UI::GlobalSettingStation::generate_passphrase( 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); + 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) { + const std::string &_key, const nlohmann::json &value) { std::string _hash_obj_key = {}; if (_key.empty()) { _hash_obj_key = @@ -212,7 +228,7 @@ std::string GpgFrontend::UI::GlobalSettingStation::SaveDataObj( } std::optional<nlohmann::json> -GpgFrontend::UI::GlobalSettingStation::GetDataObject(const std::string& _key) { +GpgFrontend::UI::GlobalSettingStation::GetDataObject(const std::string &_key) { try { auto _hash_obj_key = QCryptographicHash::hash(hash_key_ + QByteArray::fromStdString(_key), @@ -226,7 +242,11 @@ GpgFrontend::UI::GlobalSettingStation::GetDataObject(const std::string& _key) { return {}; } - auto buffer = GpgFrontend::read_all_data_in_file(obj_path.string()); + std::string buffer; + if (!FileOperator::ReadFileStd(obj_path.string(), buffer)) { + return {}; + } + auto encoded = QByteArray::fromStdString(buffer); QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, @@ -242,16 +262,20 @@ GpgFrontend::UI::GlobalSettingStation::GetDataObject(const std::string& _key) { } std::optional<nlohmann::json> GpgFrontend::UI::GlobalSettingStation::GetDataObjectByRef( - const std::string& _ref) { - if (_ref.size() != 64) return {}; + 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 {}; + if (!boost::filesystem::exists(obj_path)) + return {}; - auto buffer = GpgFrontend::read_all_data_in_file(obj_path.string()); + std::string buffer; + if (!FileOperator::ReadFileStd(obj_path.string(), buffer)) + return {}; auto encoded = QByteArray::fromStdString(buffer); QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, |