From ff3b2314bf227856522f3b8e26e8e05a1c72a17b Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 30 Aug 2025 15:36:15 -0500 Subject: [PATCH] Implement secure key via KDF for transparent data encryption/decryption #60 --- .../include/file_manager/file_manager.hpp | 4 ++ .../include/file_manager/i_file_manager.hpp | 4 ++ .../include/providers/base_provider.hpp | 8 +++ .../providers/encrypt/encrypt_provider.hpp | 4 ++ .../include/providers/i_provider.hpp | 4 ++ .../include/rpc/client/client.hpp | 2 + .../include/rpc/server/full_server.hpp | 3 + repertory/librepertory/include/types/rpc.hpp | 1 + .../librepertory/include/utils/cli_utils.hpp | 2 + .../src/file_manager/file_manager.cpp | 14 +++++ .../src/providers/base_provider.cpp | 48 ++++++++++++++++ .../providers/encrypt/encrypt_provider.cpp | 32 +++++++++++ .../librepertory/src/rpc/client/client.cpp | 29 ++++++++++ .../src/rpc/server/full_server.cpp | 19 +++++++ repertory/repertory/include/cli/actions.hpp | 3 + .../include/cli/get_directory_items.hpp | 2 +- .../repertory/include/cli/get_item_info.hpp | 56 +++++++++++++++++++ repertory/repertory/include/cli/help.hpp | 4 ++ .../include/mocks/mock_provider.hpp | 4 ++ 19 files changed, 242 insertions(+), 1 deletion(-) create mode 100644 repertory/repertory/include/cli/get_item_info.hpp diff --git a/repertory/librepertory/include/file_manager/file_manager.hpp b/repertory/librepertory/include/file_manager/file_manager.hpp index 1c2b0f98..26732e49 100644 --- a/repertory/librepertory/include/file_manager/file_manager.hpp +++ b/repertory/librepertory/include/file_manager/file_manager.hpp @@ -135,6 +135,10 @@ public: [[nodiscard]] auto evict_file(const std::string &api_path) -> bool override; + [[nodiscard]] auto get_directory_item(const std::string &api_path, + directory_item &item) const + -> api_error override; + [[nodiscard]] auto get_directory_items(const std::string &api_path) const -> directory_item_list override; diff --git a/repertory/librepertory/include/file_manager/i_file_manager.hpp b/repertory/librepertory/include/file_manager/i_file_manager.hpp index 2cab28cf..c8fc81c2 100644 --- a/repertory/librepertory/include/file_manager/i_file_manager.hpp +++ b/repertory/librepertory/include/file_manager/i_file_manager.hpp @@ -34,6 +34,10 @@ public: [[nodiscard]] virtual auto evict_file(const std::string &api_path) -> bool = 0; + [[nodiscard]] virtual auto get_directory_item(const std::string &api_path, + directory_item &item) const + -> api_error = 0; + [[nodiscard]] virtual auto get_directory_items(const std::string &api_path) const -> directory_item_list = 0; diff --git a/repertory/librepertory/include/providers/base_provider.hpp b/repertory/librepertory/include/providers/base_provider.hpp index f698fa3d..d82f36a7 100644 --- a/repertory/librepertory/include/providers/base_provider.hpp +++ b/repertory/librepertory/include/providers/base_provider.hpp @@ -110,6 +110,10 @@ protected: [[nodiscard]] auto get_db() const -> const i_meta_db & { return *db3_; } + [[nodiscard]] virtual auto + get_directory_item_impl(const std::string &api_path, bool directory, + directory_item &item) const -> api_error; + [[nodiscard]] virtual auto get_directory_items_impl(const std::string &api_path, directory_item_list &list) const -> api_error = 0; @@ -147,6 +151,10 @@ public: std::string &api_path) const -> api_error override; + [[nodiscard]] auto get_directory_item(const std::string &api_path, + directory_item &item) const + -> api_error override; + [[nodiscard]] auto get_directory_items(const std::string &api_path, directory_item_list &list) const -> api_error override; diff --git a/repertory/librepertory/include/providers/encrypt/encrypt_provider.hpp b/repertory/librepertory/include/providers/encrypt/encrypt_provider.hpp index d104aefb..d26dbf5c 100644 --- a/repertory/librepertory/include/providers/encrypt/encrypt_provider.hpp +++ b/repertory/librepertory/include/providers/encrypt/encrypt_provider.hpp @@ -118,6 +118,10 @@ public: [[nodiscard]] auto get_directory_item_count(const std::string &api_path) const -> std::uint64_t override; + [[nodiscard]] auto get_directory_item(const std::string &api_path, + directory_item &item) const + -> api_error override; + [[nodiscard]] auto get_directory_items(const std::string &api_path, directory_item_list &list) const -> api_error override; diff --git a/repertory/librepertory/include/providers/i_provider.hpp b/repertory/librepertory/include/providers/i_provider.hpp index d1b5f616..d1205f94 100644 --- a/repertory/librepertory/include/providers/i_provider.hpp +++ b/repertory/librepertory/include/providers/i_provider.hpp @@ -55,6 +55,10 @@ public: get_directory_item_count(const std::string &api_path) const -> std::uint64_t = 0; + [[nodiscard]] virtual auto get_directory_item(const std::string &api_path, + directory_item &list) const + -> api_error = 0; + [[nodiscard]] virtual auto get_directory_items(const std::string &api_path, directory_item_list &list) const -> api_error = 0; diff --git a/repertory/librepertory/include/rpc/client/client.hpp b/repertory/librepertory/include/rpc/client/client.hpp index e07df4cf..a9cea483 100644 --- a/repertory/librepertory/include/rpc/client/client.hpp +++ b/repertory/librepertory/include/rpc/client/client.hpp @@ -44,6 +44,8 @@ public: [[nodiscard]] auto get_directory_items(const std::string &api_path) -> rpc_response; + [[nodiscard]] auto get_item_info(const std::string &api_path) -> rpc_response; + [[nodiscard]] auto get_open_files() -> rpc_response; [[nodiscard]] auto get_pinned_files() -> rpc_response; diff --git a/repertory/librepertory/include/rpc/server/full_server.hpp b/repertory/librepertory/include/rpc/server/full_server.hpp index 99176efe..cbe935dc 100644 --- a/repertory/librepertory/include/rpc/server/full_server.hpp +++ b/repertory/librepertory/include/rpc/server/full_server.hpp @@ -43,6 +43,9 @@ private: void handle_get_directory_items(const httplib::Request &req, httplib::Response &res); + void handle_get_item_info(const httplib::Request &req, + httplib::Response &res); + void handle_get_drive_information(const httplib::Request &req, httplib::Response &res); diff --git a/repertory/librepertory/include/types/rpc.hpp b/repertory/librepertory/include/types/rpc.hpp index c7a37663..f7ed6f61 100644 --- a/repertory/librepertory/include/types/rpc.hpp +++ b/repertory/librepertory/include/types/rpc.hpp @@ -45,6 +45,7 @@ namespace rpc_method { const std::string get_config = "get_config"; const std::string get_config_value_by_name = "get_config_value_by_name"; const std::string get_directory_items = "get_directory_items"; +const std::string get_item_info = "get_item_info"; const std::string get_drive_information = "get_drive_information"; const std::string get_open_files = "get_open_files"; const std::string get_pinned_files = "get_pinned_files"; diff --git a/repertory/librepertory/include/utils/cli_utils.hpp b/repertory/librepertory/include/utils/cli_utils.hpp index 8f2a8c0c..3152e0e7 100644 --- a/repertory/librepertory/include/utils/cli_utils.hpp +++ b/repertory/librepertory/include/utils/cli_utils.hpp @@ -39,6 +39,7 @@ inline const option generate_config_option = {"-gc", "--generate_config"}; inline const option get_option = {"-get", "--get"}; inline const option get_directory_items_option = {"-gdi", "--get_directory_items"}; +inline const option get_item_info_option = {"-gi", "--get_item_info"}; inline const option get_pinned_files_option = {"-gpf", "--get_pinned_files"}; inline const option help_option = {"-h", "--help"}; inline const option hidden_option = {"-hidden", "--hidden"}; @@ -69,6 +70,7 @@ inline const std::vector