mask implementation to the rest of the code
Albatros default Details

This commit is contained in:
Quentin 2023-11-01 17:18:58 +01:00
parent 8ac3a8ce8b
commit cf8b9ac28d
Signed by: quentin
GPG Key ID: E9602264D639FF68
3 changed files with 24 additions and 20 deletions

View File

@ -24,7 +24,7 @@ use crate::storage::*;
pub trait LoginProvider {
/// The login method takes an account's password as an input to decypher
/// decryption keys and obtain full access to the user's account.
async fn login(&self, username: &str, password: &str) -> Result<AnyCredentials>;
async fn login(&self, username: &str, password: &str) -> Result<Credentials>;
/// The public_login method takes an account's email address and returns
/// public credentials for adding mails to the user's inbox.
async fn public_login(&self, email: &str) -> Result<PublicCredentials>;
@ -34,26 +34,12 @@ pub trait LoginProvider {
/// in many places in the code
pub type ArcLoginProvider = Arc<dyn LoginProvider + Send + Sync>;
pub enum AnyCredentials {
InMemory(Credentials<in_memory::MemTypes>),
Garage(Credentials<garage::GrgTypes>),
}
impl<X> AnyCredentials where X: Sto
{
fn to_gen(&self) -> Credentials<X> {
match self {
Self::InMemory(u) => u,
Self::Garage(u) => u,
}
}
}
/// The struct Credentials represent all of the necessary information to interact
/// with a user account's data after they are logged in.
#[derive(Clone, Debug)]
pub struct Credentials<T: Sto> {
pub struct Credentials {
/// The storage credentials are used to authenticate access to the underlying storage (S3, K2V)
pub storage: T::Builder,
pub storage: AnyEngine,
/// The cryptographic keys are used to encrypt and decrypt data stored in S3 and K2V
pub keys: CryptoKeys,
}

View File

@ -32,9 +32,9 @@ const MAILBOX_LIST_SK: &str = "list";
use crate::storage::*;
pub struct User<T: Sto> {
pub struct User {
pub username: String,
pub creds: Credentials<T>,
pub creds: Credentials,
pub k2v: K2vClient,
pub mailboxes: std::sync::Mutex<HashMap<UniqueIdent, Weak<Mailbox>>>,

View File

@ -29,12 +29,30 @@ pub enum Error {
}
pub trait Sto: Sized {
type Builder: RowStore<Self>;
type Builder: RowBuilder<Self>;
type Store: RowStore<Self>;
type Ref: RowRef<Self>;
type Value: RowValue<Self>;
}
pub struct Engine<T: Sto> {
bucket: String,
row: T::Builder,
}
pub enum AnyEngine {
InMemory(Engine<in_memory::MemTypes>),
Garage(Engine<garage::GrgTypes>),
}
impl AnyEngine {
fn engine<X: Sto>(&self) -> &Engine<X> {
match self {
Self::InMemory(x) => x,
Self::Garage(x) => x,
}
}
}
// ------ Row Builder
pub trait RowBuilder<R: Sto>
{