aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2022-02-06 05:29:01 +0000
committerSaturneric <[email protected]>2022-02-06 05:29:01 +0000
commita2d75efab5dca4e9a9721afef61cad0f62d4825f (patch)
treee2d9647e68d7ef9f47cfe3e6b3100ef8aed076f8 /src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp
parent<chore>(project, ci): Make the Windows platform pass the compilation (diff)
downloadGpgFrontend-a2d75efab5dca4e9a9721afef61cad0f62d4825f.tar.gz
GpgFrontend-a2d75efab5dca4e9a9721afef61cad0f62d4825f.zip
<refactor>(core, ui): Adjust the core code directory structure.
Diffstat (limited to 'src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp')
-rw-r--r--src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp b/src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp
new file mode 100644
index 00000000..ff3d2e27
--- /dev/null
+++ b/src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp
@@ -0,0 +1,97 @@
+/**
+ * Copyright (C) 2021 Saturneric
+ *
+ * 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.
+ *
+ * GpgFrontend 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 GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from
+ * 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.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+#include "GpgDecryptResultAnalyse.h"
+
+#include "function/gpg/GpgKeyGetter.h"
+
+GpgFrontend::GpgDecryptResultAnalyse::GpgDecryptResultAnalyse(GpgError m_error,
+ GpgDecrResult m_result)
+ : error_(m_error), result_(std::move(m_result)) {}
+
+void GpgFrontend::GpgDecryptResultAnalyse::do_analyse() {
+ stream_ << "[#] " << _("Decrypt Operation");
+
+ if (gpgme_err_code(error_) == GPG_ERR_NO_ERROR) {
+ stream_ << "[" << _("Success") << "]" << std::endl;
+ } else {
+ stream_ << "[" << _("Failed") << "] " << gpgme_strerror(error_)
+ << std::endl;
+ set_status(-1);
+ if (result_ != nullptr && result_->unsupported_algorithm != nullptr) {
+ stream_ << "------------>" << std::endl;
+ stream_ << _("Unsupported Algo") << ": " << result_->unsupported_algorithm
+ << std::endl;
+ }
+ }
+
+ if (result_ != nullptr && result_->recipients != nullptr) {
+ stream_ << "------------>" << std::endl;
+ if (result_->file_name != nullptr) {
+ stream_ << _("File Name") << ": " << result_->file_name << std::endl;
+ stream_ << std::endl;
+ }
+ if (result_->is_mime) {
+ stream_ << _("MIME") << ": " << _("true") << std::endl;
+ }
+
+ auto recipient = result_->recipients;
+ if (recipient != nullptr) stream_ << _("Recipient(s)") << ": " << std::endl;
+ while (recipient != nullptr) {
+ print_recipient(stream_, recipient);
+ recipient = recipient->next;
+ }
+ stream_ << "<------------" << std::endl;
+ }
+
+ stream_ << std::endl;
+}
+
+void GpgFrontend::GpgDecryptResultAnalyse::print_recipient(
+ std::stringstream &stream, gpgme_recipient_t recipient) {
+ // check
+ if (recipient->keyid == nullptr) return;
+
+ stream << " {>} " << _("Recipient") << ": ";
+ auto key = GpgFrontend::GpgKeyGetter::GetInstance().GetKey(recipient->keyid);
+ if (key.IsGood()) {
+ stream << key.GetName().c_str();
+ if (!key.GetEmail().empty()) {
+ stream << "<" << key.GetEmail().c_str() << ">";
+ }
+ } else {
+ stream << "<" << _("Unknown") << ">";
+ set_status(0);
+ }
+
+ stream << std::endl;
+
+ stream << " " << _("Key ID") << ": " << recipient->keyid << std::endl;
+ stream << " " << _("Public Key Algo") << ": "
+ << gpgme_pubkey_algo_name(recipient->pubkey_algo) << std::endl;
+}