maintain an in-memory file map instead of searching the entire vault on every operation
This commit is contained in:
14
src/vault.h
14
src/vault.h
@@ -4,16 +4,18 @@
|
||||
#include <botan/secmem.h>
|
||||
#include <fstream>
|
||||
#include <optional>
|
||||
#include <unordered_map>
|
||||
|
||||
constexpr i16 VERSION = 1;
|
||||
constexpr u16 VERSION = 1;
|
||||
constexpr u64 AFTER_HEADER_OFFSET = 68;
|
||||
|
||||
// !!! REMEMBER TO UPDATE entry_total_size IN Vault::delete_file
|
||||
struct FileHeader {
|
||||
u64 offset;
|
||||
bool deleted;
|
||||
u64 name_ciphertext_size;
|
||||
std::string name;
|
||||
u64 content_ciphertext_size;
|
||||
u64 content_offset;
|
||||
};
|
||||
|
||||
class Vault {
|
||||
@@ -22,18 +24,22 @@ public:
|
||||
|
||||
static void create(const std::string &path, const std::string &password);
|
||||
|
||||
std::vector<FileHeader> read_file_headers();
|
||||
std::optional<std::string> read_file(const std::string &name);
|
||||
std::string read_file(const std::string &name);
|
||||
void create_file(const std::string &name, const std::string &content);
|
||||
void delete_file(const std::string &name);
|
||||
void update_file(const std::string &name, const std::string &content);
|
||||
|
||||
const std::string &path() const { return m_path; }
|
||||
const std::unordered_map<std::string, FileHeader> &file_map() const {
|
||||
return m_file_map;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string m_path;
|
||||
std::fstream m_file;
|
||||
Botan::secure_vector<u8> m_key;
|
||||
std::unordered_map<std::string, FileHeader> m_file_map;
|
||||
|
||||
void build_file_map();
|
||||
std::optional<FileHeader> read_file_header();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user