aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2023-11-01 17:18:58 +0100
committerQuentin Dufour <quentin@deuxfleurs.fr>2023-11-01 17:18:58 +0100
commitcf8b9ac28d6813bd589f363ad3659dd215bd7cea (patch)
tree3c567dafe8f7ac156cc62358df6befeca26655ce
parent8ac3a8ce8ba268a3261e23694b8b62afa6a3ae37 (diff)
downloadaerogramme-cf8b9ac28d6813bd589f363ad3659dd215bd7cea.tar.gz
aerogramme-cf8b9ac28d6813bd589f363ad3659dd215bd7cea.zip
mask implementation to the rest of the code
-rw-r--r--src/login/mod.rs20
-rw-r--r--src/mail/user.rs4
-rw-r--r--src/storage/mod.rs20
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>
{