use async_trait::async_trait;
use secrecy::SecretString;
use sos_core::{crypto::AccessKey, VaultId};
use sos_password::diceware::generate_passphrase_words;
const VAULT_PASSPHRASE_WORDS: usize = 12;
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
pub trait DelegatedAccess {
type Error: std::error::Error
+ From<crate::Error>
+ From<sos_password::Error>
+ std::fmt::Debug
+ Send
+ Sync
+ 'static;
async fn find_folder_password(
&self,
folder_id: &VaultId,
) -> Result<Option<AccessKey>, Self::Error>;
async fn remove_folder_password(
&mut self,
folder_id: &VaultId,
) -> Result<(), Self::Error>;
fn generate_folder_password(&self) -> Result<SecretString, Self::Error> {
let (vault_passphrase, _) =
generate_passphrase_words(VAULT_PASSPHRASE_WORDS)?;
Ok(vault_passphrase)
}
async fn save_folder_password(
&mut self,
folder_id: &VaultId,
key: AccessKey,
) -> Result<(), Self::Error>;
}