Krzysztof Grobelny | 73da690 | 2020-09-24 13:42:04 +0200 | [diff] [blame] | 1 | #pragma once |
| 2 | |
| 3 | #include "interfaces/json_storage.hpp" |
| 4 | |
| 5 | class PersistentJsonStorage : public interfaces::JsonStorage |
| 6 | { |
| 7 | public: |
| 8 | explicit PersistentJsonStorage(const DirectoryPath& directory); |
| 9 | |
| 10 | void store(const FilePath& subPath, const nlohmann::json& data) override; |
| 11 | bool remove(const FilePath& subPath) override; |
Wludzik, Jozef | e236279 | 2020-10-27 17:23:55 +0100 | [diff] [blame] | 12 | bool exist(const FilePath& path) const override; |
Krzysztof Grobelny | 73da690 | 2020-09-24 13:42:04 +0200 | [diff] [blame] | 13 | std::optional<nlohmann::json> load(const FilePath& subPath) const override; |
Wludzik, Jozef | e236279 | 2020-10-27 17:23:55 +0100 | [diff] [blame] | 14 | std::vector<FilePath> list() const override; |
Krzysztof Grobelny | 73da690 | 2020-09-24 13:42:04 +0200 | [diff] [blame] | 15 | |
| 16 | private: |
| 17 | DirectoryPath directory; |
| 18 | |
| 19 | static std::filesystem::path join(const std::filesystem::path&, |
| 20 | const std::filesystem::path&); |
| 21 | static void limitPermissions(const std::filesystem::path& path); |
Krzysztof Grobelny | a06626d | 2022-11-24 15:22:40 +0000 | [diff] [blame] | 22 | static void assertThatPathIsNotSymlink(const std::filesystem::path& path); |
Krzysztof Grobelny | 73da690 | 2020-09-24 13:42:04 +0200 | [diff] [blame] | 23 | }; |