diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2023-11-01 17:18:58 +0100 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2023-11-01 17:18:58 +0100 |
commit | cf8b9ac28d6813bd589f363ad3659dd215bd7cea (patch) | |
tree | 3c567dafe8f7ac156cc62358df6befeca26655ce /src | |
parent | 8ac3a8ce8ba268a3261e23694b8b62afa6a3ae37 (diff) | |
download | aerogramme-cf8b9ac28d6813bd589f363ad3659dd215bd7cea.tar.gz aerogramme-cf8b9ac28d6813bd589f363ad3659dd215bd7cea.zip |
mask implementation to the rest of the code
Diffstat (limited to 'src')
-rw-r--r-- | src/login/mod.rs | 20 | ||||
-rw-r--r-- | src/mail/user.rs | 4 | ||||
-rw-r--r-- | src/storage/mod.rs | 20 |
3 files changed, 24 insertions, 20 deletions
diff --git a/src/login/mod.rs b/src/login/mod.rs index 5bd976e..e87a17d 100644 --- a/src/login/mod.rs +++ b/src/login/mod.rs @@ -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, } diff --git a/src/mail/user.rs b/src/mail/user.rs index 9d94563..360786d 100644 --- a/src/mail/user.rs +++ b/src/mail/user.rs @@ -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>>>, diff --git a/src/storage/mod.rs b/src/storage/mod.rs index 2e4f757..c0835e6 100644 --- a/src/storage/mod.rs +++ b/src/storage/mod.rs @@ -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> { |