Rename Store to Vault and move to lib root
Signed-off-by: Lee Smet <lee.smet@hotmail.com>
This commit is contained in:
parent
2014c63b78
commit
d29a8fbb67
@ -1,47 +0,0 @@
|
|||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
use std::path::{Path, PathBuf};
|
|
||||||
|
|
||||||
use crate::{error::Error, key::symmetric::SymmetricKey, keyspace::KeySpace};
|
|
||||||
|
|
||||||
/// Store is a 2 tiered key-value store. That is, it is a collection of [`spaces`](KeySpace), where
|
|
||||||
/// each [`space`](KeySpace) is itself an encrypted key-value store
|
|
||||||
pub struct Store {
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
path: PathBuf,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
impl Store {
|
|
||||||
/// Create a new store at the given path, creating the path if it does not exist yet.
|
|
||||||
pub async fn new(path: &Path) -> Result<Self, Error> {
|
|
||||||
if path.exists() {
|
|
||||||
if !path.is_dir() {
|
|
||||||
return Err(Error::IOError(std::io::Error::new(
|
|
||||||
std::io::ErrorKind::InvalidInput,
|
|
||||||
"expected directory",
|
|
||||||
)));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
std::fs::create_dir_all(path)?;
|
|
||||||
}
|
|
||||||
Ok(Self {
|
|
||||||
path: path.to_path_buf(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Store {
|
|
||||||
/// Open a keyspace with the given name
|
|
||||||
pub async fn open_keyspace(&self, name: &str, password: &str) -> Result<KeySpace, Error> {
|
|
||||||
let encryption_key = SymmetricKey::derive_from_password(password);
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
{
|
|
||||||
let path = self.path.join(name);
|
|
||||||
KeySpace::open(&path, encryption_key).await
|
|
||||||
}
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
{
|
|
||||||
KeySpace::open(name, encryption_key).await
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +1,51 @@
|
|||||||
pub mod error;
|
pub mod error;
|
||||||
pub mod key;
|
pub mod key;
|
||||||
pub mod keyspace;
|
pub mod keyspace;
|
||||||
pub mod kvs;
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
|
use crate::{error::Error, key::symmetric::SymmetricKey, keyspace::KeySpace};
|
||||||
|
|
||||||
|
/// Vault is a 2 tiered key-value store. That is, it is a collection of [`spaces`](KeySpace), where
|
||||||
|
/// each [`space`](KeySpace) is itself an encrypted key-value store
|
||||||
|
pub struct Vault {
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
path: PathBuf,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
impl Vault {
|
||||||
|
/// Create a new store at the given path, creating the path if it does not exist yet.
|
||||||
|
pub async fn new(path: &Path) -> Result<Self, Error> {
|
||||||
|
if path.exists() {
|
||||||
|
if !path.is_dir() {
|
||||||
|
return Err(Error::IOError(std::io::Error::new(
|
||||||
|
std::io::ErrorKind::InvalidInput,
|
||||||
|
"expected directory",
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
std::fs::create_dir_all(path)?;
|
||||||
|
}
|
||||||
|
Ok(Self {
|
||||||
|
path: path.to_path_buf(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Vault {
|
||||||
|
/// Open a keyspace with the given name
|
||||||
|
pub async fn open_keyspace(&self, name: &str, password: &str) -> Result<KeySpace, Error> {
|
||||||
|
let encryption_key = SymmetricKey::derive_from_password(password);
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
{
|
||||||
|
let path = self.path.join(name);
|
||||||
|
KeySpace::open(&path, encryption_key).await
|
||||||
|
}
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
{
|
||||||
|
KeySpace::open(name, encryption_key).await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user