in-memory storage #32
3 changed files with 24 additions and 20 deletions
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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>>>,
|
||||
|
||||
|
|
|
@ -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>
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue