diff --git a/include/app_config.hpp b/include/app_config.hpp index 77650aef..f22cd80e 100644 --- a/include/app_config.hpp +++ b/include/app_config.hpp @@ -30,39 +30,39 @@ namespace repertory { class app_config final { public: - [[nodiscard]] static auto default_agent_name(const provider_type &pt) + [[nodiscard]] static auto default_agent_name(const provider_type &prov) -> std::string; - [[nodiscard]] static auto default_api_port(const provider_type &pt) + [[nodiscard]] static auto default_api_port(const provider_type &prov) -> std::uint16_t; - [[nodiscard]] static auto default_data_directory(const provider_type &pt) + [[nodiscard]] static auto default_data_directory(const provider_type &prov) -> std::string; - [[nodiscard]] static auto default_rpc_port(const provider_type &pt) + [[nodiscard]] static auto default_rpc_port(const provider_type &prov) -> std::uint16_t; - [[nodiscard]] static auto get_provider_api_password(const provider_type &pt) + [[nodiscard]] static auto get_provider_api_password(const provider_type &prov) -> std::string; - [[nodiscard]] static auto get_provider_display_name(const provider_type &pt) + [[nodiscard]] static auto get_provider_display_name(const provider_type &prov) -> std::string; - [[nodiscard]] static auto get_provider_name(const provider_type &pt) + [[nodiscard]] static auto get_provider_name(const provider_type &prov) -> std::string; public: - app_config(const provider_type &pt, const std::string &data_directory = ""); + app_config(const provider_type &prov, const std::string &data_directory = ""); ~app_config() { save(); } private: - const provider_type pt_; + provider_type prov_; std::string api_auth_; std::uint16_t api_port_; std::string api_user_; bool config_changed_; - const std::string data_directory_; + std::string data_directory_; std::uint8_t download_timeout_secs_; bool enable_chunk_downloader_timeout_; bool enable_comm_duration_events_; @@ -129,7 +129,7 @@ private: template auto set_value(dest &dst, const source &src) -> bool { auto ret = false; - recur_mutex_lock l(read_write_mutex_); + recur_mutex_lock lock(read_write_mutex_); if (dst != src) { dst = src; config_changed_ = true; @@ -244,7 +244,9 @@ public: download_type::fallback); } - [[nodiscard]] auto get_provider_type() const -> provider_type { return pt_; } + [[nodiscard]] auto get_provider_type() const -> provider_type { + return prov_; + } [[nodiscard]] auto get_read_ahead_count() const -> std::uint8_t { return std::max(static_cast(1U), read_ahead_count_); diff --git a/include/cli/actions.hpp b/include/cli/actions.hpp index 3f0a5e3b..70829b1c 100644 --- a/include/cli/actions.hpp +++ b/include/cli/actions.hpp @@ -23,14 +23,12 @@ #define INCLUDE_CLI_ACTIONS_HPP_ #include "cli/check_version.hpp" -#include "cli/create_directory.hpp" #include "cli/display_config.hpp" #include "cli/drive_information.hpp" #include "cli/get.hpp" #include "cli/get_directory_items.hpp" #include "cli/get_pinned_files.hpp" #include "cli/help.hpp" -#include "cli/list_objects.hpp" #include "cli/mount.hpp" #include "cli/open_files.hpp" #include "cli/pin_file.hpp" @@ -57,11 +55,6 @@ static const std::unordered_map option_actions = { {utils::cli::options::check_version_option, cli::actions::check_version}, -#if defined(REPERTORY_ENABLE_S3) - {utils::cli::options::create_directory_option, - cli::actions::create_directory}, - {utils::cli::options::list_objects_option, cli::actions::list_objects}, -#endif {utils::cli::options::display_config_option, cli::actions::display_config}, {utils::cli::options::drive_information_option, diff --git a/include/cli/create_directory.hpp b/include/cli/create_directory.hpp deleted file mode 100644 index 94fda852..00000000 --- a/include/cli/create_directory.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright <2018-2023> - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ -#ifndef INCLUDE_CLI_CREATE_DIRECTORY_HPP_ -#define INCLUDE_CLI_CREATE_DIRECTORY_HPP_ -#if defined(REPERTORY_ENABLE_S3) - -#include "app_config.hpp" -#include "comm/s3/s3_comm.hpp" -#include "platform/platform.hpp" -#include "providers/i_provider.hpp" -#include "providers/provider.hpp" -#include "rpc/client/client.hpp" -#include "types/repertory.hpp" -#include "utils/cli_utils.hpp" - -namespace repertory::cli::actions { -[[nodiscard]] inline auto -create_directory(int argc, char *argv[], const std::string &data_directory, - const provider_type &pt, const std::string &unique_id, - std::string /* user */, std::string /* password */) - -> exit_code { - auto ret = exit_code::invalid_provider_type; - - if (pt == provider_type::s3) { - std::string api_path; - if ((ret = utils::cli::parse_string_option( - argc, argv, utils::cli::options::create_directory_option, - api_path)) == exit_code::success) { - lock_data lock(pt, unique_id); - const auto lock_res = lock.grab_lock(1u); - /* if (res == lock_result::locked) { */ - /* auto port = app_config::default_api_port(pt); */ - /* utils::cli::get_api_authentication_data(user, password, port, pt, - * data_directory); */ - /* const auto response = */ - /* client({"localhost", password, port, - * user}).create_directory(api_path); */ - /* std::cout << static_cast(response.response_type) << std::endl; */ - /* std::cout << response.data.dump(2) << std::endl; */ - /* } else */ - if (lock_res == lock_result::success) { - std::cout << "creating directory: '" << api_path << "'" << std::endl; - app_config config(pt, data_directory); - s3_comm comm(config); - const auto res = comm.create_directory(api_path); - std::cout << api_error_to_string(res) << std::endl; - ret = exit_code::success; - } else { - std::cout << "failed to grab lock: '" << static_cast(lock_res) - << "'" << std::endl; - ret = exit_code::lock_failed; - } - } - } - - return ret; -} -} // namespace repertory::cli::actions - -#endif // REPERTORY_ENABLE_S3 -#endif // INCLUDE_CLI_CREATE_DIRECTORY_HPP_ diff --git a/include/cli/help.hpp b/include/cli/help.hpp index 634d9c01..c738e8b0 100644 --- a/include/cli/help.hpp +++ b/include/cli/help.hpp @@ -42,11 +42,6 @@ template inline void help(int argc, char *argv[]) { std::cout << " -na,--name Unique name for S3 " "instance [Required]" << std::endl; - std::cout - << " -cd,--create_directory [API path] Create directory object in S3" - << std::endl; - std::cout << " -lo,--list_objects List all S3 objects" - << std::endl; #endif // defined(REPERTORY_ENABLE_S3) std::cout << " -gc,--generate_config Generate initial configuration" diff --git a/include/cli/list_objects.hpp b/include/cli/list_objects.hpp deleted file mode 100644 index 6e55e4c7..00000000 --- a/include/cli/list_objects.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright <2018-2023> - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ -#ifndef INCLUDE_CLI_LIST_OBJECTS_HPP_ -#define INCLUDE_CLI_LIST_OBJECTS_HPP_ -#if defined(REPERTORY_ENABLE_S3) - -#include "app_config.hpp" -#include "comm/s3/s3_comm.hpp" -#include "platform/platform.hpp" -#include "providers/i_provider.hpp" -#include "providers/provider.hpp" -#include "rpc/client/client.hpp" -#include "types/repertory.hpp" -#include "utils/cli_utils.hpp" - -namespace repertory::cli::actions { -[[nodiscard]] inline auto -list_objects(int /* argc */, char * /* argv */[], - const std::string &data_directory, const provider_type &pt, - const std::string &unique_id, std::string /* user */, - std::string /* password */) -> exit_code { - auto ret = exit_code::invalid_provider_type; - - if (pt == provider_type::s3) { - lock_data lock(pt, unique_id); - auto lock_res = lock.grab_lock(1u); - if (lock_res == lock_result::success) { - app_config config(pt, data_directory); - s3_comm comm(config); - std::vector list{}; - const auto res = comm.get_object_list(list); - if (res == api_error::success) { - for (const auto &di : list) { - std::cout << di.to_json().dump(2) << std::endl; - } - ret = exit_code::success; - } else { - std::cout << api_error_to_string(res) << std::endl; - } - } else { - std::cout << "failed to grab lock: '" << static_cast(lock_res) << "'" - << std::endl; - ret = exit_code::lock_failed; - } - } - - return ret; -} -} // namespace repertory::cli::actions - -#endif // REPERTORY_ENABLE_S3 -#endif // INCLUDE_CLI_LIST_OBJECTS_HPP_ diff --git a/include/comm/curl/requests/http_put_file.hpp b/include/comm/curl/requests/http_put_file.hpp index 3a010097..c5f2d73b 100644 --- a/include/comm/curl/requests/http_put_file.hpp +++ b/include/comm/curl/requests/http_put_file.hpp @@ -27,14 +27,17 @@ namespace repertory::curl::requests { struct http_put_file final : http_request_base { + http_put_file() = default; + http_put_file(const http_put_file &) = default; + http_put_file(http_put_file &&) = default; + + auto operator=(const http_put_file &) -> http_put_file & = default; + auto operator=(http_put_file &&) -> http_put_file & = default; + ~http_put_file() override = default; - std::optional encryption_token{}; - std::string file_name{}; - mutable std::shared_ptr reader{}; - std::string source_path{}; - - [[nodiscard]] auto get_path() const -> std::string override; + std::shared_ptr reader; + std::string source_path; [[nodiscard]] auto set_method(CURL *curl, stop_type &stop_requested) const -> bool override; diff --git a/include/comm/curl/requests/http_request_base.hpp b/include/comm/curl/requests/http_request_base.hpp index 52d4e517..01331296 100644 --- a/include/comm/curl/requests/http_request_base.hpp +++ b/include/comm/curl/requests/http_request_base.hpp @@ -54,8 +54,10 @@ struct http_request_base { http_request_base() = default; http_request_base(const http_request_base &) = default; http_request_base(http_request_base &&) = default; + auto operator=(const http_request_base &) -> http_request_base & = default; auto operator=(http_request_base &&) -> http_request_base & = default; + virtual ~http_request_base() = default; bool allow_timeout{}; diff --git a/include/comm/i_s3_comm.hpp b/include/comm/i_s3_comm.hpp deleted file mode 100644 index 7880aaf4..00000000 --- a/include/comm/i_s3_comm.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright <2018-2023> - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ -#ifndef INCLUDE_COMM_I_S3_COMM_HPP_ -#define INCLUDE_COMM_I_S3_COMM_HPP_ -#if defined(REPERTORY_ENABLE_S3) - -#include "types/repertory.hpp" -#include "types/s3.hpp" - -namespace repertory { -class i_provider; - -class i_s3_comm { - INTERFACE_SETUP(i_s3_comm); - -public: - [[nodiscard]] virtual auto create_directory(const std::string &api_path) - -> api_error = 0; - - [[nodiscard]] virtual auto directory_exists(const std::string &api_path) const - -> api_error = 0; - - [[nodiscard]] virtual auto file_exists(const std::string &api_path, - const get_key_callback &get_key) const - -> api_error = 0; - - [[nodiscard]] virtual auto - get_directory_item_count(const std::string &api_path, - meta_provider_callback meta_provider) const - -> std::size_t = 0; - - [[nodiscard]] virtual auto - get_directory_items(const std::string &api_path, - meta_provider_callback meta_provider, - directory_item_list &list) const -> api_error = 0; - - [[nodiscard]] virtual auto get_directory_list(api_file_list &list) const - -> api_error = 0; - - [[nodiscard]] virtual auto get_file(const std::string &api_path, - const get_key_callback &get_key, - const get_name_callback &get_name, - const get_token_callback &get_token, - api_file &file) const -> api_error = 0; - - [[nodiscard]] virtual auto - get_file_list(const get_api_file_token_callback &get_api_file_token, - const get_name_callback &get_name, api_file_list &list) const - -> api_error = 0; - - [[nodiscard]] virtual auto - get_object_list(std::vector &list) const -> api_error = 0; - - [[nodiscard]] virtual auto - get_object_name(const std::string &api_path, - const get_key_callback &get_key) const -> std::string = 0; - - [[nodiscard]] virtual auto get_s3_config() -> s3_config = 0; - - [[nodiscard]] virtual auto get_s3_config() const -> s3_config = 0; - - [[nodiscard]] virtual auto is_online() const -> bool = 0; - - [[nodiscard]] virtual auto read_file_bytes( - const std::string &api_path, std::size_t size, std::uint64_t offset, - data_buffer &data, const get_key_callback &get_key, - const get_size_callback &get_size, const get_token_callback &get_token, - stop_type &stop_requested) const -> api_error = 0; - - [[nodiscard]] virtual auto remove_directory(const std::string &api_path) - -> api_error = 0; - - [[nodiscard]] virtual auto remove_file(const std::string &api_path, - const get_key_callback &get_key) - -> api_error = 0; - - [[nodiscard]] virtual auto rename_file(const std::string &api_path, - const std::string &new_api_path) - -> api_error = 0; - - [[nodiscard]] virtual auto - upload_file(const std::string &api_path, const std::string &source_path, - const std::string &encryption_token, - const get_key_callback &get_key, const set_key_callback &set_key, - stop_type &stop_requested) -> api_error = 0; -}; -} // namespace repertory - -#endif // REPERTORY_ENABLE_S3 -#endif // INCLUDE_COMM_I_S3_COMM_HPP_ diff --git a/include/comm/s3/s3_comm.hpp b/include/comm/s3/s3_comm.hpp deleted file mode 100644 index 23d71d82..00000000 --- a/include/comm/s3/s3_comm.hpp +++ /dev/null @@ -1,177 +0,0 @@ -/* - Copyright <2018-2023> - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ -#ifndef INCLUDE_COMM_S3_S3_COMM_HPP_ -#define INCLUDE_COMM_S3_S3_COMM_HPP_ -#if defined(REPERTORY_ENABLE_S3) - -#include "comm/i_http_comm.hpp" -#include "comm/i_s3_comm.hpp" -#include "types/repertory.hpp" - -namespace repertory { -class app_config; - -class s3_comm final : public i_s3_comm { -public: - explicit s3_comm(const app_config &config); - s3_comm(s3_comm &&comm); - - ~s3_comm() override; - -private: - struct cache_entry final { - std::chrono::system_clock::time_point expiration; - directory_item_list items; - - void reset_timeout(std::chrono::seconds timeout) { - timeout = std::max(std::chrono::seconds(5u), timeout); - expiration = std::chrono::system_clock::now() + timeout; - } - }; - -private: - const app_config &config_; - s3_config s3_config_; - std::unique_ptr s3_client_; - -private: - mutable std::recursive_mutex cached_directories_mutex_; - mutable std::unordered_map cached_directories_; - -protected: - bool active_ = true; - -private: - void clear_expired_directories(); - - [[nodiscard]] auto - get_cached_directory_item_count(const std::string &api_path, - std::size_t &count) const -> bool; - - [[nodiscard]] auto - get_cached_directory_items(const std::string &api_path, - meta_provider_callback meta_provider, - directory_item_list &list) const -> bool; - - [[nodiscard]] auto get_cached_file_exists(const std::string &api_path) const - -> bool; - - [[nodiscard]] auto grab_directory_items(const std::string &api_path, - meta_provider_callback meta_provider, - directory_item_list &list) const - -> api_error; - - void raise_begin(const std::string &function_name, - const std::string &api_path) const; - - [[nodiscard]] auto raise_end(const std::string &function_name, - const std::string &api_path, - const api_error &error, long code) const - -> api_error; - - void remove_cached_directory(const std::string &api_path); - - void set_cached_directory_items(const std::string &api_path, - directory_item_list list) const; - -public: - [[nodiscard]] auto create_directory(const std::string &api_path) - -> api_error override; - - [[nodiscard]] auto directory_exists(const std::string &api_path) const - -> api_error override; - - [[nodiscard]] auto file_exists(const std::string &api_path, - const get_key_callback &get_key) const - -> api_error override; - - [[nodiscard]] auto - get_directory_item_count(const std::string &api_path, - meta_provider_callback meta_provider) const - -> std::size_t override; - - [[nodiscard]] auto get_directory_items(const std::string &api_path, - meta_provider_callback meta_provider, - directory_item_list &list) const - -> api_error override; - - [[nodiscard]] auto get_directory_list(api_file_list &list) const - -> api_error override; - - [[nodiscard]] auto get_file(const std::string &api_path, - const get_key_callback &get_key, - const get_name_callback &get_name, - const get_token_callback &get_token, - api_file &file) const -> api_error override; - - [[nodiscard]] auto - get_file_list(const get_api_file_token_callback &get_api_file_token, - const get_name_callback &get_name, api_file_list &list) const - -> api_error override; - - [[nodiscard]] auto get_object_list(std::vector &list) const - -> api_error override; - - [[nodiscard]] auto get_object_name(const std::string &api_path, - const get_key_callback &getKey) const - -> std::string override; - - [[nodiscard]] auto get_s3_config() -> s3_config override { - return s3_config_; - } - - [[nodiscard]] auto get_s3_config() const -> s3_config override { - return s3_config_; - } - - [[nodiscard]] auto is_online() const -> bool override { - // TODO implement this - return true; - } - - [[nodiscard]] auto read_file_bytes( - const std::string &api_path, std::size_t size, std::uint64_t offset, - data_buffer &data, const get_key_callback &get_key, - const get_size_callback &get_size, const get_token_callback &get_token, - stop_type &stop_requested) const -> api_error override; - - [[nodiscard]] auto remove_directory(const std::string &api_path) - -> api_error override; - - [[nodiscard]] auto remove_file(const std::string &api_path, - const get_key_callback &get_key) - -> api_error override; - - [[nodiscard]] auto rename_file(const std::string &api_path, - const std::string &new_api_path) - -> api_error override; - - [[nodiscard]] auto - upload_file(const std::string &api_path, const std::string &source_path, - const std::string &encryption_token, - const get_key_callback &get_key, const set_key_callback &set_key, - stop_type &stop_requested) -> api_error override; -}; -} // namespace repertory - -#endif // REPERTORY_ENABLE_S3 -#endif // INCLUDE_COMM_S3_S3_COMM_HPP_ diff --git a/include/db/directory_db.hpp b/include/db/directory_db.hpp deleted file mode 100644 index d354c271..00000000 --- a/include/db/directory_db.hpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - Copyright <2018-2023> - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ -#ifndef INCLUDE_DB_DIRECTORY_DB_HPP_ -#define INCLUDE_DB_DIRECTORY_DB_HPP_ - -#include "app_config.hpp" -#include "types/repertory.hpp" -#include "utils/rocksdb_utils.hpp" - -namespace repertory { -class directory_db final { -private: - class directory_tree final { - private: - std::unordered_map> - sub_directory_lookup_; - - public: - void add_path(const std::string &api_path, - const std::vector &files, rocksdb::DB &db); - - [[nodiscard]] auto get_count(const std::string &api_path) const - -> std::size_t; - - [[nodiscard]] auto get_directories() const -> std::vector; - - [[nodiscard]] auto get_sub_directories(const std::string &api_path) const - -> std::vector; - - [[nodiscard]] auto is_directory(const std::string &api_path) const -> bool; - - void remove_directory(const std::string &api_path, rocksdb::DB &db, - bool allow_remove_root = false); - }; - -public: - explicit directory_db(const app_config &config); - -public: - ~directory_db(); - -private: - mutable std::recursive_mutex directory_mutex_; - std::unique_ptr db_; - directory_tree tree_; - const std::string DIRDB_NAME = "directory_db"; - -private: - [[nodiscard]] auto get_directory_data(const std::string &api_path) const - -> json; - -public: - [[nodiscard]] auto create_directory(const std::string &api_path, - bool create_always = false) -> api_error; - - [[nodiscard]] auto create_file(const std::string &api_path) -> api_error; - - [[nodiscard]] auto get_directory_item_count(const std::string &api_path) const - -> std::uint64_t; - - [[nodiscard]] auto - get_file(const std::string &api_path, api_file &file, - api_file_provider_callback api_file_provider) const -> api_error; - - [[nodiscard]] auto - get_file_list(api_file_list &list, - api_file_provider_callback api_file_provider) const - -> api_error; - - [[nodiscard]] auto get_sub_directory_count(const std::string &api_path) const - -> std::size_t; - - [[nodiscard]] auto get_total_item_count() const -> std::uint64_t; - - [[nodiscard]] auto is_directory(const std::string &api_path) const -> bool; - - [[nodiscard]] auto is_file(const std::string &api_path) const -> bool; - - void populate_directory_files(const std::string &api_path, - meta_provider_callback meta_provider, - directory_item_list &list) const; - - void populate_sub_directories(const std::string &api_path, - meta_provider_callback meta_provider, - directory_item_list &list) const; - - [[nodiscard]] auto remove_directory(const std::string &api_path, - bool allow_remove_root = false) - -> api_error; - - [[nodiscard]] auto remove_file(const std::string &api_path) -> bool; - - [[nodiscard]] auto rename_file(const std::string &from_api_path, - const std::string &to_api_path) -> api_error; -}; -} // namespace repertory - -#endif // INCLUDE_DB_DIRECTORY_DB_HPP_ diff --git a/include/db/meta_db.hpp b/include/db/meta_db.hpp deleted file mode 100644 index 550590c9..00000000 --- a/include/db/meta_db.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright <2018-2023> - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ -#ifndef INCLUDE_DB_META_DB_HPP_ -#define INCLUDE_DB_META_DB_HPP_ - -#include "app_config.hpp" -#include "types/repertory.hpp" -#include "utils/rocksdb_utils.hpp" - -namespace repertory { -class meta_db final { -public: - explicit meta_db(const app_config &config); - -public: - ~meta_db(); - -private: - std::unique_ptr db_; - rocksdb::ColumnFamilyHandle *default_family_{}; - rocksdb::ColumnFamilyHandle *source_family_{}; - rocksdb::ColumnFamilyHandle *keys_family_{}; - const std::string METADB_NAME = "meta_db"; - -private: - [[nodiscard]] auto - perform_action(const std::string &function_name, - const std::function &action) const - -> api_error; - - [[nodiscard]] auto get_item_meta_json(const std::string &api_path, - json &json_data) const -> api_error; - - [[nodiscard]] auto store_item_meta(const std::string &api_path, - const std::string &key, - const std::string &value) -> api_error; - -public: - [[nodiscard]] auto create_iterator(bool source_family) const - -> std::shared_ptr; - - [[nodiscard]] auto get_api_path_from_key(const std::string &key, - std::string &api_path) const - -> api_error; - - [[nodiscard]] auto get_api_path_from_source(const std::string &source_path, - std::string &api_path) const - -> api_error; - - [[nodiscard]] auto get_item_meta(const std::string &api_path, - api_meta_map &meta) const -> api_error; - - [[nodiscard]] auto get_item_meta(const std::string &api_path, - const std::string &key, - std::string &value) const -> api_error; - - [[nodiscard]] auto get_item_meta_exists(const std::string &api_path) const - -> bool; - - [[nodiscard]] auto get_total_item_count() const -> std::uint64_t; - - [[nodiscard]] auto get_pinned_files() const -> std::vector; - - [[nodiscard]] auto - get_source_path_exists(const std::string &source_path) const -> bool; - - [[nodiscard]] auto remove_item_meta(const std::string &api_path) -> api_error; - - [[nodiscard]] auto remove_item_meta(const std::string &api_path, - const std::string &key) -> api_error; - - [[nodiscard]] auto rename_item_meta(const std::string &source_path, - const std::string &from_api_path, - const std::string &to_api_path) - -> api_error; - - [[nodiscard]] auto set_item_meta(const std::string &api_path, - const std::string &key, - const std::string &value) -> api_error; - - [[nodiscard]] auto set_item_meta(const std::string &api_path, - const api_meta_map &meta) -> api_error; - - [[nodiscard]] auto set_source_path(const std::string &api_path, - const std::string &source_path) - -> api_error; -}; -} // namespace repertory - -#endif // INCLUDE_DB_META_DB_HPP_ diff --git a/include/platform/unix_platform.hpp b/include/platform/unix_platform.hpp index 84ac3663..1c5c8468 100644 --- a/include/platform/unix_platform.hpp +++ b/include/platform/unix_platform.hpp @@ -68,11 +68,10 @@ public: [[nodiscard]] auto create_meta_attributes( std::uint64_t accessed_date, std::uint32_t attributes, std::uint64_t changed_date, std::uint64_t creation_date, bool directory, - const std::string &encryption_token, std::uint32_t gid, - const std::string &key, std::uint32_t mode, std::uint64_t modified_date, - std::uint32_t osx_backup, std::uint32_t osx_flags, std::uint64_t size, - const std::string &source_path, std::uint32_t uid, - std::uint64_t written_date) -> api_meta_map; + std::uint32_t gid, const std::string &key, std::uint32_t mode, + std::uint64_t modified_date, std::uint32_t osx_backup, + std::uint32_t osx_flags, std::uint64_t size, const std::string &source_path, + std::uint32_t uid, std::uint64_t written_date) -> api_meta_map; [[nodiscard]] auto provider_meta_handler(i_provider &provider, bool directory, const api_file &file) -> api_error; diff --git a/include/platform/win32_platform.hpp b/include/platform/win32_platform.hpp index 07629767..8d02d26f 100644 --- a/include/platform/win32_platform.hpp +++ b/include/platform/win32_platform.hpp @@ -73,11 +73,10 @@ public: [[nodiscard]] auto create_meta_attributes( std::uint64_t accessed_date, std::uint32_t attributes, std::uint64_t changed_date, std::uint64_t creation_date, bool directory, - const std::string &encryption_token, std::uint32_t gid, - const std::string &key, std::uint32_t mode, std::uint64_t modified_date, - std::uint32_t osx_backup, std::uint32_t osx_flags, std::uint64_t size, - const std::string &source_path, std::uint32_t uid, - std::uint64_t written_date) -> api_meta_map; + std::uint32_t gid, const std::string &key, std::uint32_t mode, + std::uint64_t modified_date, std::uint32_t osx_backup, + std::uint32_t osx_flags, std::uint64_t size, const std::string &source_path, + std::uint32_t uid, std::uint64_t written_date) -> api_meta_map; [[nodiscard]] auto provider_meta_handler(i_provider &provider, bool directory, const api_file &file) -> api_error; diff --git a/include/providers/base_provider.hpp b/include/providers/base_provider.hpp deleted file mode 100644 index a628d76e..00000000 --- a/include/providers/base_provider.hpp +++ /dev/null @@ -1,205 +0,0 @@ -/* - Copyright <2018-2023> - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ -#ifndef INCLUDE_PROVIDERS_BASE_PROVIDER_HPP_ -#define INCLUDE_PROVIDERS_BASE_PROVIDER_HPP_ - -#include "db/meta_db.hpp" -#include "providers/i_provider.hpp" - -namespace repertory { -class app_config; -class i_file_manager; - -class base_provider : public i_provider { -public: - explicit base_provider(app_config &config); - - ~base_provider() override = default; - -private: - app_config &config_; - std::atomic used_space_{0U}; - -protected: - api_item_added_callback api_item_added_; - std::unique_ptr meta_db_; - mutable std::recursive_mutex notify_added_mutex_; - i_file_manager *fm_ = nullptr; - stop_type stop_requested_ = false; - -protected: - void calculate_used_drive_space(bool add_missing); - - [[nodiscard]] virtual auto - check_file_exists(const std::string &api_path) const -> api_error = 0; - - void cleanup(); - - [[nodiscard]] auto get_config() -> app_config & { return config_; } - - [[nodiscard]] auto get_config() const -> app_config & { return config_; } - - [[nodiscard]] virtual auto - handle_rename_file(const std::string &from_api_path, - const std::string &to_api_path, - const std::string &source_path) -> api_error = 0; - - [[nodiscard]] auto notify_directory_added(const std::string &api_path, - const std::string &api_parent) const - -> api_error { - return const_cast(this)->notify_directory_added( - api_path, api_parent); - } - - [[nodiscard]] virtual auto - notify_directory_added(const std::string &api_path, - const std::string &api_parent) -> api_error; - - [[nodiscard]] auto notify_file_added(const std::string &api_path, - const std::string &api_parent, - std::uint64_t size) const -> api_error { - return const_cast(this)->notify_file_added( - api_path, api_parent, size); - } - - [[nodiscard]] virtual auto notify_file_added(const std::string &api_path, - const std::string &api_parent, - std::uint64_t size) - -> api_error = 0; - - [[nodiscard]] virtual auto - populate_directory_items(const std::string &api_path, - directory_item_list &list) const -> api_error = 0; - - [[nodiscard]] virtual auto populate_file(const std::string &api_path, - api_file &file) const - -> api_error = 0; - - auto processed_orphaned_file(const std::string &source_path, - const std::string &api_path = "") const -> bool; - - void remove_deleted_files(); - - void remove_expired_orphaned_files(); - - void remove_unknown_source_files(); - - [[nodiscard]] auto remove_item_meta(const std::string &api_path) - -> api_error { - return meta_db_->remove_item_meta(api_path); - } - - void update_filesystem_item(bool directory, const api_error &error, - const std::string &api_path, - filesystem_item &fsi) const; - -public: - [[nodiscard]] auto - create_directory_clone_source_meta(const std::string &source_api_path, - const std::string &api_path) - -> api_error override; - - [[nodiscard]] auto create_file(const std::string &api_path, - api_meta_map &meta) -> api_error override; - - [[nodiscard]] auto get_api_path_from_source(const std::string &source_path, - std::string &api_path) const - -> api_error override; - - [[nodiscard]] auto get_directory_items(const std::string &api_path, - directory_item_list &list) const - -> api_error override; - - [[nodiscard]] auto get_file(const std::string &api_path, api_file &file) const - -> api_error override; - - [[nodiscard]] auto get_file_size(const std::string &api_path, - std::uint64_t &file_size) const - -> api_error override; - - [[nodiscard]] auto get_filesystem_item(const std::string &api_path, - bool directory, - filesystem_item &fsi) const - -> api_error override; - - [[nodiscard]] auto get_filesystem_item_and_file(const std::string &api_path, - api_file &file, - filesystem_item &fsi) const - -> api_error override; - - [[nodiscard]] auto - get_filesystem_item_from_source_path(const std::string &source_path, - filesystem_item &fsi) const - -> api_error override; - - [[nodiscard]] auto get_item_meta(const std::string &api_path, - api_meta_map &meta) const - -> api_error override; - - [[nodiscard]] auto get_item_meta(const std::string &api_path, - const std::string &key, - std::string &value) const - -> api_error override; - - [[nodiscard]] auto get_pinned_files() const - -> std::vector override { - return meta_db_->get_pinned_files(); - } - - [[nodiscard]] auto get_used_drive_space() const -> std::uint64_t override; - - [[nodiscard]] auto is_file_writeable(const std::string &) const - -> bool override { - return true; - } - - [[nodiscard]] auto remove_item_meta(const std::string &api_path, - const std::string &key) - -> api_error override { - return meta_db_->remove_item_meta(api_path, key); - } - - [[nodiscard]] auto rename_file(const std::string &from_api_path, - const std::string &to_api_path) - -> api_error override; - - [[nodiscard]] auto set_item_meta(const std::string &api_path, - const std::string &key, - const std::string &value) - -> api_error override { - return meta_db_->set_item_meta(api_path, key, value); - } - - [[nodiscard]] auto set_item_meta(const std::string &api_path, - const api_meta_map &meta) - -> api_error override { - return meta_db_->set_item_meta(api_path, meta); - } - - [[nodiscard]] auto start(api_item_added_callback api_item_added, - i_file_manager *fm) -> bool override; - - void stop() override; -}; -} // namespace repertory - -#endif // INCLUDE_PROVIDERS_BASE_PROVIDER_HPP_ diff --git a/include/providers/encrypt/encrypt_provider.hpp b/include/providers/encrypt/encrypt_provider.hpp index a71b04c4..dfc3c027 100644 --- a/include/providers/encrypt/encrypt_provider.hpp +++ b/include/providers/encrypt/encrypt_provider.hpp @@ -33,6 +33,12 @@ public: ~encrypt_provider() override = default; +public: + encrypt_provider(const encrypt_provider &) = delete; + encrypt_provider(encrypt_provider &&) = delete; + auto operator=(const encrypt_provider &) -> encrypt_provider & = delete; + auto operator=(encrypt_provider &&) -> encrypt_provider & = delete; + private: struct reader_info final { std::chrono::system_clock::time_point last_access_time = @@ -47,7 +53,7 @@ private: rocksdb::ColumnFamilyHandle *dir_family_{}; rocksdb::ColumnFamilyHandle *file_family_{}; rocksdb::ColumnFamilyHandle *source_family_{}; - const std::string DB_NAME = "meta_db"; + std::string DB_NAME = "meta_db"; private: i_file_manager *fm_ = nullptr; @@ -56,7 +62,7 @@ private: std::recursive_mutex reader_lookup_mtx_{}; private: - static auto create_api_file(const std::string api_path, bool directory, + static auto create_api_file(const std::string &api_path, bool directory, const std::string &source_path) -> api_file; static void create_item_meta(api_meta_map &meta, bool directory, @@ -207,7 +213,6 @@ public: [[nodiscard]] auto upload_file(const std::string & /*api_path*/, const std::string & /*source_path*/, - const std::string & /*encryption_token*/, stop_type & /*stop_requested*/) -> api_error override { return api_error::not_implemented; diff --git a/include/providers/i_provider.hpp b/include/providers/i_provider.hpp index e1d4506a..7c981f22 100644 --- a/include/providers/i_provider.hpp +++ b/include/providers/i_provider.hpp @@ -147,9 +147,9 @@ public: virtual void stop() = 0; - [[nodiscard]] virtual auto - upload_file(const std::string &api_path, const std::string &source_path, - const std::string &encryption_token, stop_type &stop_requested) + [[nodiscard]] virtual auto upload_file(const std::string &api_path, + const std::string &source_path, + stop_type &stop_requested) -> api_error = 0; }; } // namespace repertory diff --git a/include/providers/s3/s3_provider.hpp b/include/providers/s3/s3_provider.hpp index 7d161b81..96c98c74 100644 --- a/include/providers/s3/s3_provider.hpp +++ b/include/providers/s3/s3_provider.hpp @@ -23,86 +23,129 @@ #define INCLUDE_PROVIDERS_S3_S3_PROVIDER_HPP_ #if defined(REPERTORY_ENABLE_S3) -#include "db/directory_db.hpp" -#include "providers/base_provider.hpp" +#include "providers/i_provider.hpp" #include "types/repertory.hpp" namespace repertory { class app_config; class i_file_manager; -class i_s3_comm; +class i_http_comm; +struct head_object_result; -class s3_provider final : public base_provider { +class s3_provider final : public i_provider { public: - s3_provider(app_config &config, i_s3_comm &s3_comm); + s3_provider(app_config &config, i_http_comm &comm); ~s3_provider() override = default; -private: - i_s3_comm &s3_comm_; +public: + s3_provider(const s3_provider &) = delete; + s3_provider(s3_provider &&) = delete; + auto operator=(const s3_provider &) -> s3_provider & = delete; + auto operator=(s3_provider &&) -> s3_provider & = delete; private: - std::unique_ptr directory_db_; - std::unique_ptr background_thread_; + app_config &config_; + i_http_comm &comm_; private: - void create_directories(); + api_item_added_callback api_item_added_; + std::unique_ptr db_; + std::string DB_NAME = "meta_db"; + i_file_manager *fm_{}; - void create_parent_directories(const api_file &file, bool directory); +private: + [[nodiscard]] auto add_if_not_found(api_file &file, + const std::string &object_name) const + -> api_error; - void update_item_meta(directory_item &di) const; + [[nodiscard]] static auto create_api_file(const std::string &path, + const std::string &key, + std::uint64_t size) -> api_file; -protected: - [[nodiscard]] auto check_file_exists(const std::string &api_path) const - -> api_error override; + [[nodiscard]] auto create_path_directories(const std::string &api_path, + const std::string &key) const + -> api_error; - [[nodiscard]] auto handle_rename_file(const std::string &from_api_path, - const std::string &to_api_path, - const std::string &source_path) - -> api_error override; + [[nodiscard]] auto decrypt_object_name(std::string &object_name) const + -> api_error; - [[nodiscard]] auto notify_directory_added(const std::string &api_path, - const std::string &api_parent) - -> api_error override; + [[nodiscard]] auto + get_object_info(const std::string &api_path, bool &is_encrypted, + std::string &object_name, head_object_result &result) const + -> api_error; - [[nodiscard]] auto notify_file_added(const std::string &api_path, - const std::string &api_parent, - std::uint64_t size) - -> api_error override; - - [[nodiscard]] auto populate_directory_items(const std::string &api_path, - directory_item_list &list) const - -> api_error override; - - [[nodiscard]] auto populate_file(const std::string &api_path, - api_file &file) const -> api_error override; + void remove_deleted_files(); public: -#ifdef REPERTORY_TESTING - void set_callback(api_item_added_callback cb) { api_item_added_ = cb; } -#endif // REPERTORY_TESTING - [[nodiscard]] auto create_directory(const std::string &api_path, api_meta_map &meta) -> api_error override; + [[nodiscard]] auto + create_directory_clone_source_meta(const std::string &source_api_path, + const std::string &api_path) + -> api_error override; + [[nodiscard]] auto create_file(const std::string &api_path, api_meta_map &meta) -> api_error override; + [[nodiscard]] auto get_api_path_from_source(const std::string &source_path, + std::string &api_path) const + -> api_error override; + [[nodiscard]] auto get_directory_item_count(const std::string &api_path) const -> std::uint64_t override; + [[nodiscard]] auto get_directory_items(const std::string &api_path, + directory_item_list &list) const + -> api_error override; + + [[nodiscard]] auto get_file(const std::string &api_path, api_file &file) const + -> api_error override; + [[nodiscard]] auto get_file_list(api_file_list &list) const -> api_error override; + [[nodiscard]] auto get_file_size(const std::string &api_path, + std::uint64_t &file_size) const + -> api_error override; + + [[nodiscard]] auto get_filesystem_item(const std::string &api_path, + bool directory, + filesystem_item &fsi) const + -> api_error override; + + [[nodiscard]] auto get_filesystem_item_and_file(const std::string &api_path, + api_file &file, + filesystem_item &fsi) const + -> api_error override; + + [[nodiscard]] auto + get_filesystem_item_from_source_path(const std::string &source_path, + filesystem_item &fsi) const + -> api_error override; + + [[nodiscard]] auto get_pinned_files() const + -> std::vector override; + + [[nodiscard]] auto get_item_meta(const std::string &api_path, + api_meta_map &meta) const + -> api_error override; + + [[nodiscard]] auto get_item_meta(const std::string &api_path, + const std::string &key, + std::string &value) const + -> api_error override; + + [[nodiscard]] auto get_total_drive_space() const -> std::uint64_t override; + + [[nodiscard]] auto get_total_item_count() const -> std::uint64_t override; + [[nodiscard]] auto get_provider_type() const -> provider_type override { return provider_type::s3; } - [[nodiscard]] auto get_total_drive_space() const -> std::uint64_t override { - return std::numeric_limits::max() / std::int64_t(2); - } - - [[nodiscard]] auto get_total_item_count() const -> std::uint64_t override; + [[nodiscard]] auto get_used_drive_space() const -> std::uint64_t override; [[nodiscard]] auto is_direct_only() const -> bool override { return false; } @@ -112,11 +155,14 @@ public: [[nodiscard]] auto is_file(const std::string &api_path, bool &exists) const -> api_error override; + [[nodiscard]] auto is_file_writeable(const std::string &api_path) const + -> bool override; + [[nodiscard]] auto is_online() const -> bool override; [[nodiscard]] auto is_rename_supported() const -> bool override { return false; - } + }; [[nodiscard]] auto read_file_bytes(const std::string &api_path, std::size_t size, std::uint64_t offset, @@ -130,14 +176,31 @@ public: [[nodiscard]] auto remove_file(const std::string &api_path) -> api_error override; + [[nodiscard]] auto remove_item_meta(const std::string &api_path, + const std::string &key) + -> api_error override; + + [[nodiscard]] auto rename_file(const std::string &from_api_path, + const std::string &to_api_path) + -> api_error override; + + [[nodiscard]] auto set_item_meta(const std::string &api_path, + const std::string &key, + const std::string &value) + -> api_error override; + + [[nodiscard]] auto set_item_meta(const std::string &api_path, + const api_meta_map &meta) + -> api_error override; + [[nodiscard]] auto start(api_item_added_callback api_item_added, i_file_manager *fm) -> bool override; void stop() override; - [[nodiscard]] auto - upload_file(const std::string &api_path, const std::string &source_path, - const std::string &encryption_token, stop_type &stop_requested) + [[nodiscard]] auto upload_file(const std::string &api_path, + const std::string &source_path, + stop_type &stop_requested) -> api_error override; }; } // namespace repertory diff --git a/include/providers/sia/sia_provider.hpp b/include/providers/sia/sia_provider.hpp index 5198fc60..45cada5c 100644 --- a/include/providers/sia/sia_provider.hpp +++ b/include/providers/sia/sia_provider.hpp @@ -36,15 +36,21 @@ public: ~sia_provider() override = default; +public: + sia_provider(const sia_provider &) = delete; + sia_provider(sia_provider &&) = delete; + auto operator=(const sia_provider &) -> sia_provider & = delete; + auto operator=(sia_provider &&) -> sia_provider & = delete; + private: app_config &config_; i_http_comm &comm_; private: - const std::string DB_NAME = "meta_db"; api_item_added_callback api_item_added_; std::unique_ptr db_; - i_file_manager *fm_ = nullptr; + std::string DB_NAME = "meta_db"; + i_file_manager *fm_{}; private: [[nodiscard]] static auto create_api_file(std::string path, @@ -57,7 +63,7 @@ private: [[nodiscard]] auto get_object_info(const std::string &api_path, json &object_info) const -> api_error; - [[nodiscard]] auto get_object_list(const std::string api_path, + [[nodiscard]] auto get_object_list(const std::string &api_path, nlohmann::json &object_list) const -> bool; void remove_deleted_files(); @@ -185,7 +191,6 @@ public: [[nodiscard]] auto upload_file(const std::string &api_path, const std::string &source_path, - const std::string & /* encryption_token */, stop_type &stop_requested) -> api_error override; }; diff --git a/include/types/repertory.hpp b/include/types/repertory.hpp index 3c031dc9..6aeb7d7e 100644 --- a/include/types/repertory.hpp +++ b/include/types/repertory.hpp @@ -29,7 +29,6 @@ const std::string META_BACKUP = "backup"; const std::string META_CHANGED = "changed"; const std::string META_CREATION = "creation"; const std::string META_DIRECTORY = "directory"; -const std::string META_ENCRYPTION_TOKEN = "token"; const std::string META_GID = "gid"; const std::string META_ID = "id"; const std::string META_KEY = "key"; @@ -43,24 +42,10 @@ const std::string META_UID = "uid"; const std::string META_WRITTEN = "written"; const std::vector META_USED_NAMES = { - META_ACCESSED, - META_ATTRIBUTES, - META_BACKUP, - META_CHANGED, - META_CREATION, - META_DIRECTORY, - META_ENCRYPTION_TOKEN, - META_GID, - META_ID, - META_KEY, - META_MODE, - META_MODIFIED, - META_OSXFLAGS, - META_PINNED, - META_SIZE, - META_SOURCE, - META_UID, - META_WRITTEN, + META_ACCESSED, META_ATTRIBUTES, META_BACKUP, META_CHANGED, META_CREATION, + META_DIRECTORY, META_GID, META_ID, META_KEY, META_MODE, + META_MODIFIED, META_OSXFLAGS, META_PINNED, META_SIZE, META_SOURCE, + META_UID, META_WRITTEN, }; using api_meta_map = std::map; @@ -141,6 +126,7 @@ enum class exit_code : std::int32_t { enum http_error_codes : std::int32_t { ok = 200, + multiple_choices = 300, not_found = 404, }; @@ -154,39 +140,37 @@ enum class provider_type : std::size_t { sia, remote, s3, - passthrough, encrypt, unknown, }; #ifdef _WIN32 struct open_file_data { - void *directory_buffer = nullptr; + void *directory_buffer{}; }; #else using open_file_data = int; #endif struct api_file { - std::string api_path{}; - std::string api_parent{}; - std::uint64_t accessed_date = 0u; - std::uint64_t changed_date = 0u; - std::uint64_t creation_date = 0u; - std::string encryption_token{}; - std::uint64_t file_size = 0u; - std::string key{}; - std::uint64_t modified_date = 0u; - std::string source_path{}; + std::string api_path; + std::string api_parent; + std::uint64_t accessed_date{}; + std::uint64_t changed_date{}; + std::uint64_t creation_date{}; + std::uint64_t file_size{}; + std::string key; + std::uint64_t modified_date{}; + std::string source_path; }; struct directory_item { - std::string api_path{}; - std::string api_parent{}; - bool directory = false; - std::uint64_t size = 0u; - api_meta_map meta{}; - bool resolved = false; + std::string api_path; + std::string api_parent; + bool directory{false}; + std::uint64_t size{}; + api_meta_map meta; + bool resolved{false}; [[nodiscard]] static auto from_json(const json &item) -> directory_item { directory_item ret{}; @@ -208,27 +192,22 @@ struct directory_item { }; struct filesystem_item { - std::string api_path{}; - std::string api_parent{}; - bool directory = false; - std::string encryption_token{}; - std::uint64_t size = 0u; - std::string source_path{}; - - [[nodiscard]] auto is_encrypted() const -> bool { - return not encryption_token.empty(); - } + std::string api_path; + std::string api_parent; + bool directory{false}; + std::uint64_t size{}; + std::string source_path; }; struct host_config { - std::string agent_string{}; - std::string api_password{}; - std::string api_user{}; - std::uint16_t api_port = 0u; - std::string host_name_or_ip = "localhost"; + std::string agent_string; + std::string api_password; + std::string api_user; + std::uint16_t api_port{}; + std::string host_name_or_ip{"localhost"}; std::string path{}; - std::string protocol = "http"; - std::uint32_t timeout_ms = 60000u; + std::string protocol{"http"}; + std::uint32_t timeout_ms{60000U}; auto operator==(const host_config &hc) const noexcept -> bool { if (&hc != this) { @@ -280,29 +259,25 @@ from_json(const json &j, host_config &hc) { } struct http_range { - std::uint64_t begin = 0u; - std::uint64_t end = 0u; -}; - -struct passthrough_config { - std::string location{}; - std::string name{}; + std::uint64_t begin; + std::uint64_t end; }; struct encrypt_config { - std::string encryption_token{}; - std::string path{}; + std::string encryption_token; + std::string path; }; struct s3_config { - std::string access_key{}; - std::string bucket{}; - std::uint16_t cache_timeout_secs = 60u; - std::string encryption_token{}; + std::string access_key; + std::string bucket; + std::uint16_t cache_timeout_secs{60U}; + std::string encryption_token; std::string region = "any"; - std::string secret_key{}; - std::uint32_t timeout_ms = 60000u; + std::string secret_key; + std::uint32_t timeout_ms{60000U}; std::string url; + bool use_path_style{false}; bool use_region_in_url{false}; }; diff --git a/include/utils/cli_utils.hpp b/include/utils/cli_utils.hpp index 3e9b6d11..98ed90ef 100644 --- a/include/utils/cli_utils.hpp +++ b/include/utils/cli_utils.hpp @@ -34,8 +34,6 @@ static const option data_directory_option = {"-dd", "--data_directory"}; static const option encrypt_option = {"-en", "--encrypt"}; static const option drive_information_option = {"-di", "--drive_information"}; #if defined(REPERTORY_ENABLE_S3) -static const option create_directory_option = {"-cd", "--create_directory"}; -static const option list_objects_option = {"-lo", "--list_objects"}; static const option name_option = {"-na", "--name"}; static const option s3_option = {"-s3", "--s3"}; #endif // defined(REPERTORY_ENABLE_S3) @@ -67,8 +65,6 @@ static const std::vector