#[cfg(feature = "diesel")]
pub(in crate::biome) mod diesel;
pub mod error;
pub(in crate::biome) mod memory;
#[cfg(feature = "biome-credentials")]
use crate::biome::credentials::store::PasswordEncryptionCost;
use super::Key;
pub use error::KeyStoreError;
pub trait KeyStore: Sync + Send {
fn add_key(&self, key: Key) -> Result<(), KeyStoreError>;
fn update_key(
&self,
public_key: &str,
user_id: &str,
new_display_name: &str,
) -> Result<(), KeyStoreError>;
fn replace_keys(&self, user_id: &str, keys: &[Key]) -> Result<(), KeyStoreError> {
for key in self.list_keys(Some(user_id))? {
self.remove_key(&key.public_key, user_id)?;
}
for key in keys {
self.add_key(key.clone())?;
}
Ok(())
}
fn remove_key(&self, public_key: &str, user_id: &str) -> Result<Key, KeyStoreError>;
fn fetch_key(&self, public_key: &str, user_id: &str) -> Result<Key, KeyStoreError>;
fn list_keys(&self, user_id: Option<&str>) -> Result<Vec<Key>, KeyStoreError>;
#[cfg(feature = "biome-credentials")]
fn update_keys_and_password(
&self,
user_id: &str,
updated_password: &str,
password_encryption_cost: PasswordEncryptionCost,
keys: &[Key],
) -> Result<(), KeyStoreError>;
}
impl<KS> KeyStore for Box<KS>
where
KS: KeyStore + ?Sized,
{
fn add_key(&self, key: Key) -> Result<(), KeyStoreError> {
(**self).add_key(key)
}
fn update_key(
&self,
public_key: &str,
user_id: &str,
new_display_name: &str,
) -> Result<(), KeyStoreError> {
(**self).update_key(public_key, user_id, new_display_name)
}
fn replace_keys(&self, user_id: &str, keys: &[Key]) -> Result<(), KeyStoreError> {
(**self).replace_keys(user_id, keys)
}
fn remove_key(&self, public_key: &str, user_id: &str) -> Result<Key, KeyStoreError> {
(**self).remove_key(public_key, user_id)
}
fn fetch_key(&self, public_key: &str, user_id: &str) -> Result<Key, KeyStoreError> {
(**self).fetch_key(public_key, user_id)
}
fn list_keys(&self, user_id: Option<&str>) -> Result<Vec<Key>, KeyStoreError> {
(**self).list_keys(user_id)
}
#[cfg(feature = "biome-credentials")]
fn update_keys_and_password(
&self,
user_id: &str,
updated_password: &str,
password_encryption_cost: PasswordEncryptionCost,
keys: &[Key],
) -> Result<(), KeyStoreError> {
(**self).update_keys_and_password(user_id, updated_password, password_encryption_cost, keys)
}
}