diff options
author | Saturn&Eric <[email protected]> | 2024-01-23 07:21:28 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2024-01-23 07:21:28 +0000 |
commit | 56acf161d439ce73eceaa145c40fe703bb2c3f02 (patch) | |
tree | a5d4790a6b2efc8786a3c0f74a07f5a8032d4e94 /src/ui/dialog/import_export/KeyUploadDialog.cpp | |
parent | fix: use more secure cdn links (diff) | |
parent | fix: solve issues on detected gnupg path function and fix linking errors on w... (diff) | |
download | GpgFrontend-56acf161d439ce73eceaa145c40fe703bb2c3f02.tar.gz GpgFrontend-56acf161d439ce73eceaa145c40fe703bb2c3f02.zip |
Merge pull request #126 from saturneric/dev/2.1.1/main
Develop 2.1.2.1
Diffstat (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp')
-rw-r--r-- | src/ui/dialog/import_export/KeyUploadDialog.cpp | 133 |
1 files changed, 65 insertions, 68 deletions
diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 5e05da2d..903b2e14 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -1,5 +1,5 @@ /** - * Copyright (C) 2021 Saturneric + * Copyright (C) 2021 Saturneric <[email protected]> * * 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<[email protected]> starting on May 12, 2021. + * Saturneric <[email protected]> starting on May 12, 2021. * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -28,12 +28,15 @@ #include "KeyUploadDialog.h" -#include <algorithm> +#include <QtNetwork> -#include "core/function/GlobalSettingStation.h" +#include "core/GpgModel.h" #include "core/function/gpg/GpgKeyGetter.h" #include "core/function/gpg/GpgKeyImportExporter.h" +#include "core/utils/GpgUtils.h" +#include "ui/UserInterfaceUtils.h" #include "ui/struct/SettingsObject.h" +#include "ui/struct/settings/KeyServerSO.h" namespace GpgFrontend::UI { @@ -53,77 +56,72 @@ KeyUploadDialog::KeyUploadDialog(const KeyIdArgsListPtr& keys_ids, this->setLayout(layout); this->setModal(true); - this->setWindowTitle(_("Uploading Public Key")); + this->setWindowTitle(tr("Uploading Public Key")); this->setFixedSize(240, 42); - this->setPosCenterOfScreen(); + this->movePosition2CenterOfParent(); + this->setAttribute(Qt::WA_DeleteOnClose); } void KeyUploadDialog::SlotUpload() { - auto out_data = std::make_unique<ByteArray>(); - GpgKeyImportExporter::GetInstance().ExportKeys(*m_keys_, out_data); - slot_upload_key_to_server(*out_data); - - // Done - this->hide(); - this->close(); + GpgKeyImportExporter::GetInstance().ExportKeys( + *m_keys_, false, true, false, false, + [=](GpgError err, const DataObjectPtr& data_obj) { + if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { + CommonUtils::RaiseMessageBox(this, err); + return; + } + + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || + !data_obj->Check<GFBuffer>()) { + GF_CORE_LOG_ERROR("data object checking failed"); + QMessageBox::critical(this, tr("Error"), + tr("Unknown error occurred")); + // Done + this->hide(); + this->close(); + return; + } + + auto gf_buffer = ExtractParams<GFBuffer>(data_obj, 0); + slot_upload_key_to_server(gf_buffer); + + // Done + this->hide(); + this->close(); + }); } void KeyUploadDialog::slot_upload_key_to_server( - const GpgFrontend::ByteArray& keys_data) { - std::string target_keyserver; - - try { - SettingsObject key_server_json("key_server"); - - const auto key_server_list = - key_server_json.Check("server_list", nlohmann::json::array()); - - int default_key_server_index = key_server_json.Check("default_server", 0); - if (default_key_server_index >= key_server_list.size()) { - throw std::runtime_error("default_server index out of range"); - } - - target_keyserver = - key_server_list[default_key_server_index].get<std::string>(); + const GpgFrontend::GFBuffer& keys_data) { + KeyServerSO key_server(SettingsObject("general_settings_state")); + auto target_keyserver = key_server.GetTargetServer(); - SPDLOG_DEBUG("set target key server to default key server: {}", - target_keyserver); - - } catch (...) { - SPDLOG_ERROR(_("Cannot read default_keyserver From Settings")); - QMessageBox::critical(nullptr, _("Default Keyserver Not Found"), - _("Cannot read default keyserver from your settings, " - "please set a default keyserver first")); - return; - } - - QUrl req_url(QString::fromStdString(target_keyserver + "/pks/add")); - auto qnam = new QNetworkAccessManager(this); + QUrl req_url(target_keyserver + "/pks/add"); + auto* qnam = new QNetworkAccessManager(this); // Building Post Data - QByteArray postData; + QByteArray post_data; - auto data = std::string(keys_data); + auto data = keys_data.ConvertToQByteArray(); - boost::algorithm::replace_all(data, "\n", "%0A"); - boost::algorithm::replace_all(data, "\r", "%0D"); - boost::algorithm::replace_all(data, "(", "%28"); - boost::algorithm::replace_all(data, ")", "%29"); - boost::algorithm::replace_all(data, "/", "%2F"); - boost::algorithm::replace_all(data, ":", "%3A"); - boost::algorithm::replace_all(data, "+", "%2B"); - boost::algorithm::replace_all(data, "=", "%3D"); - boost::algorithm::replace_all(data, " ", "+"); + data.replace("\n", "%0A"); + data.replace("\r", "%0D"); + data.replace("(", "%28"); + data.replace(")", "%29"); + data.replace("/", "%2F"); + data.replace(":", "%3A"); + data.replace("+", "%2B"); + data.replace("=", "%3D"); + data.replace(" ", "+"); QNetworkRequest request(req_url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - postData.append("keytext").append("=").append( - QString::fromStdString(data).toUtf8()); + post_data.append("keytext").append("=").append(data); // Send Post Data - QNetworkReply* reply = qnam->post(request, postData); + QNetworkReply* reply = qnam->post(request, post_data); connect(reply, &QNetworkReply::finished, this, &KeyUploadDialog::slot_upload_finished); @@ -136,34 +134,33 @@ void KeyUploadDialog::slot_upload_key_to_server( void KeyUploadDialog::slot_upload_finished() { auto* reply = qobject_cast<QNetworkReply*>(sender()); + this->close(); QByteArray response = reply->readAll(); - SPDLOG_DEBUG("response: {}", response.toStdString()); + GF_UI_LOG_DEBUG("response: {}", response.toStdString()); auto error = reply->error(); if (error != QNetworkReply::NoError) { - SPDLOG_DEBUG("error from reply: {}", reply->errorString().toStdString()); + GF_UI_LOG_DEBUG("error from reply: {}", reply->errorString().toStdString()); QString message; switch (error) { case QNetworkReply::ContentNotFoundError: - message = _("Key Not Found"); + message = tr("Key Not Found"); break; case QNetworkReply::TimeoutError: - message = _("Timeout"); + message = tr("Timeout"); break; case QNetworkReply::HostNotFoundError: - message = _("Key Server Not Found"); + message = tr("Key Server Not Found"); break; default: - message = _("Connection Error"); + message = tr("Connection Error"); } - QMessageBox::critical(this, "Upload Failed", message); + QMessageBox::critical(this->parentWidget(), tr("Upload Failed"), message); return; - } else { - QMessageBox::information(this, _("Upload Success"), - _("Upload Public Key Successfully")); - SPDLOG_DEBUG("success while contacting keyserver!"); } - reply->deleteLater(); + + QMessageBox::information(this->parentWidget(), tr("Upload Success"), + tr("Upload Public Key Successfully")); } } // namespace GpgFrontend::UI |