diff options
author | Saturneric <[email protected]> | 2021-09-12 13:56:18 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-09-12 13:56:18 +0000 |
commit | 5874147d9ec0f94a5058241a06c69f586b766a3b (patch) | |
tree | 9da52dd2d97af42952e17e570a630ee6e4aa008e /src/gpg/function | |
parent | Add clang-related branch coverage options. (diff) | |
download | GpgFrontend-5874147d9ec0f94a5058241a06c69f586b766a3b.tar.gz GpgFrontend-5874147d9ec0f94a5058241a06c69f586b766a3b.zip |
Continue to write core test code.
Diffstat (limited to 'src/gpg/function')
-rw-r--r-- | src/gpg/function/GpgCommandExecutor.cpp | 7 | ||||
-rw-r--r-- | src/gpg/function/GpgFileOpera.cpp | 104 | ||||
-rw-r--r-- | src/gpg/function/GpgKeyGetter.cpp | 27 |
3 files changed, 42 insertions, 96 deletions
diff --git a/src/gpg/function/GpgCommandExecutor.cpp b/src/gpg/function/GpgCommandExecutor.cpp index b5e6ccae..efe1446f 100644 --- a/src/gpg/function/GpgCommandExecutor.cpp +++ b/src/gpg/function/GpgCommandExecutor.cpp @@ -29,8 +29,7 @@ using boost::process::async_pipe; void GpgFrontend::GpgCommandExecutor::Execute( StringArgsRef arguments, - const std::function<void(async_pipe &in, async_pipe &out)> &interact_func) { - + const std::function<void(async_pipe& in, async_pipe& out)>& interact_func) { using namespace boost::process; boost::asio::io_service ios; @@ -40,12 +39,12 @@ void GpgFrontend::GpgCommandExecutor::Execute( async_pipe in_pipe_stream(ios); async_pipe out_pipe_stream(ios); - child child_process(ctx.GetInfo().appPath.c_str(), arguments, + child child_process(ctx.GetInfo().AppPath.c_str(), arguments, std_out > in_pipe_stream, std_in < out_pipe_stream); boost::asio::async_read( in_pipe_stream, boost::asio::buffer(buf), - [&](const boost::system::error_code &ec, std::size_t size) { + [&](const boost::system::error_code& ec, std::size_t size) { interact_func(in_pipe_stream, out_pipe_stream); }); diff --git a/src/gpg/function/GpgFileOpera.cpp b/src/gpg/function/GpgFileOpera.cpp index 71e60f76..79214d2d 100644 --- a/src/gpg/function/GpgFileOpera.cpp +++ b/src/gpg/function/GpgFileOpera.cpp @@ -26,42 +26,15 @@ #include "gpg/function/BasicOperator.h" #include <boost/process/detail/config.hpp> -#include <filesystem> + #include <iterator> #include <memory> #include <string> -std::string read_all_data_in_file(const std::string &path) { - using namespace std::filesystem; - class path file_info(path.c_str()); - - if (!exists(file_info) || !is_regular_file(path)) - throw std::runtime_error("no permission"); - - std::ifstream in_file; - in_file.open(path, std::ios::in); - if (!in_file.good()) - throw std::runtime_error("cannot open file"); - std::istreambuf_iterator<char> begin(in_file); - std::istreambuf_iterator<char> end; - std::string in_buffer(begin, end); - in_file.close(); - return in_buffer; -} - -void write_buufer_to_file(const std::string &path, - const std::string &out_buffer) { - std::ofstream out_file(path); - out_file.open(path.c_str(), std::ios::out); - if (!out_file.good()) - throw std::runtime_error("cannot open file"); - out_file.write(out_buffer.c_str(), out_buffer.size()); - out_file.close(); -} - GpgFrontend::GpgError GpgFrontend::GpgFileOpera::EncryptFile( - KeyArgsList &keys, const std::string &path, GpgEncrResult &result) { - + KeyArgsList& keys, + const std::string& path, + GpgEncrResult& result) { std::string in_buffer = read_all_data_in_file(path); std::unique_ptr<std::string> out_buffer; @@ -70,38 +43,13 @@ GpgFrontend::GpgError GpgFrontend::GpgFileOpera::EncryptFile( assert(check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR); - write_buufer_to_file(path + ".asc", *out_buffer); + write_buffer_to_file(path + ".asc", *out_buffer); return err; } -std::string get_file_extension(const std::string &path) { - // Create a Path object from given string - std::filesystem::path path_obj(path); - // Check if file name in the path object has extension - if (path_obj.has_extension()) { - // Fetch the extension from path object and return - return path_obj.extension().string(); - } - // In case of no extension return empty string - return std::string(); -} - -std::string get_file_name_with_path(const std::string &path) { - // Create a Path object from given string - std::filesystem::path path_obj(path); - // Check if file name in the path object has extension - if (path_obj.has_filename()) { - // Fetch the extension from path object and return - return path_obj.parent_path() / path_obj.filename(); - } - // In case of no extension return empty string - throw std::runtime_error("invalid file path"); -} - -GpgFrontend::GpgError -GpgFrontend::GpgFileOpera::DecryptFile(const std::string &path, - GpgDecrResult &result) { - +GpgFrontend::GpgError GpgFrontend::GpgFileOpera::DecryptFile( + const std::string& path, + GpgDecrResult& result) { std::string in_buffer = read_all_data_in_file(path); std::unique_ptr<std::string> out_buffer; @@ -116,15 +64,14 @@ GpgFrontend::GpgFileOpera::DecryptFile(const std::string &path, if (!(file_extension == ".asc" || file_extension == ".gpg")) out_file_name += ".out"; - write_buufer_to_file(out_file_name, *out_buffer); + write_buffer_to_file(out_file_name, *out_buffer); return err; } -gpgme_error_t GpgFrontend::GpgFileOpera::SignFile(KeyArgsList &keys, - const std::string &path, - GpgSignResult &result) { - +gpgme_error_t GpgFrontend::GpgFileOpera::SignFile(KeyArgsList& keys, + const std::string& path, + GpgSignResult& result) { auto in_buffer = read_all_data_in_file(path); std::unique_ptr<std::string> out_buffer; @@ -133,14 +80,13 @@ gpgme_error_t GpgFrontend::GpgFileOpera::SignFile(KeyArgsList &keys, assert(check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR); - write_buufer_to_file(path + ".sig", *out_buffer); + write_buffer_to_file(path + ".sig", *out_buffer); return err; } -gpgme_error_t GpgFrontend::GpgFileOpera::VerifyFile(const std::string &path, - GpgVerifyResult &result) { - +gpgme_error_t GpgFrontend::GpgFileOpera::VerifyFile(const std::string& path, + GpgVerifyResult& result) { auto in_buffer = read_all_data_in_file(path); std::unique_ptr<std::string> sign_buffer = nullptr; @@ -162,9 +108,10 @@ gpgme_error_t GpgFrontend::GpgFileOpera::VerifyFile(const std::string &path, // TODO gpg_error_t GpgFrontend::GpgFileOpera::EncryptSignFile( - KeyArgsList &keys, const std::string &path, GpgEncrResult &encr_res, - GpgSignResult &sign_res) { - + KeyArgsList& keys, + const std::string& path, + GpgEncrResult& encr_res, + GpgSignResult& sign_res) { auto in_buffer = read_all_data_in_file(path); std::unique_ptr<std::string> out_buffer = nullptr; @@ -177,16 +124,15 @@ gpg_error_t GpgFrontend::GpgFileOpera::EncryptSignFile( assert(check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR); - write_buufer_to_file(path + ".gpg", *out_buffer); + write_buffer_to_file(path + ".gpg", *out_buffer); return err; } -gpg_error_t -GpgFrontend::GpgFileOpera::DecryptVerifyFile(const std::string &path, - GpgDecrResult &decr_res, - GpgVerifyResult &verify_res) { - +gpg_error_t GpgFrontend::GpgFileOpera::DecryptVerifyFile( + const std::string& path, + GpgDecrResult& decr_res, + GpgVerifyResult& verify_res) { auto in_buffer = read_all_data_in_file(path); std::unique_ptr<std::string> out_buffer = nullptr; @@ -200,7 +146,7 @@ GpgFrontend::GpgFileOpera::DecryptVerifyFile(const std::string &path, if (!(file_extension == ".asc" || file_extension == ".gpg")) out_file_name = path + ".out"; - write_buufer_to_file(out_file_name, *out_buffer); + write_buffer_to_file(out_file_name, *out_buffer); return err; } diff --git a/src/gpg/function/GpgKeyGetter.cpp b/src/gpg/function/GpgKeyGetter.cpp index 88f80fbf..6d80088a 100644 --- a/src/gpg/function/GpgKeyGetter.cpp +++ b/src/gpg/function/GpgKeyGetter.cpp @@ -23,49 +23,50 @@ */ #include "gpg/function/GpgKeyGetter.h" +#include <gpg-error.h> +#include "GpgConstants.h" -GpgFrontend::GpgKey GpgFrontend::GpgKeyGetter::GetKey(const std::string &fpr) { - LOG(INFO) << "GpgKeyGetter GetKey Fpr " << fpr; +GpgFrontend::GpgKey GpgFrontend::GpgKeyGetter::GetKey(const std::string& fpr) { + DLOG(INFO) << "GpgKeyGetter GetKey Fpr " << fpr; gpgme_key_t _p_key; gpgme_get_key(ctx, fpr.c_str(), &_p_key, 1); if (_p_key == nullptr) - LOG(WARNING) << "GpgKeyGetter GetKey _p_key Null"; + DLOG(WARNING) << "GpgKeyGetter GetKey _p_key Null"; return GpgKey(std::move(_p_key)); } -GpgFrontend::GpgKey -GpgFrontend::GpgKeyGetter::GetPubkey(const std::string &fpr) { +GpgFrontend::GpgKey GpgFrontend::GpgKeyGetter::GetPubkey( + const std::string& fpr) { gpgme_key_t _p_key; gpgme_get_key(ctx, fpr.c_str(), &_p_key, 0); return GpgKey(std::move(_p_key)); } GpgFrontend::KeyListPtr GpgFrontend::GpgKeyGetter::FetchKey() { - gpgme_error_t err; - LOG(INFO) << "Clear List and Map"; + DLOG(INFO) << "Clear List and Map"; KeyListPtr keys_list = std::make_unique<std::vector<GpgKey>>(); - LOG(INFO) << "Operate KeyList Start"; + DLOG(INFO) << "Operate KeyList Start"; err = gpgme_op_keylist_start(ctx, nullptr, 0); - assert(gpg_err_code(err) != GPG_ERR_NO_ERROR); + assert(check_gpg_error_2_err_code(err) == GPG_ERR_NO_ERROR); - LOG(INFO) << "Start Loop"; + DLOG(INFO) << "Start Loop"; gpgme_key_t key; while ((err = gpgme_op_keylist_next(ctx, &key)) == GPG_ERR_NO_ERROR) { keys_list->push_back(GpgKey(std::move(key))); - LOG(INFO) << "Append Key" << keys_list->back().id().c_str(); + DLOG(INFO) << "Append Key" << keys_list->back().id().c_str(); } - assert(gpg_err_code(err) != GPG_ERR_NO_ERROR); + assert(check_gpg_error_2_err_code(err, GPG_ERR_EOF) == GPG_ERR_EOF); err = gpgme_op_keylist_end(ctx); - LOG(INFO) << "Operate KeyList End"; + DLOG(INFO) << "Operate KeyList End"; return keys_list; } |