diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2023-12-27 18:33:06 +0100 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2023-12-27 18:33:06 +0100 |
commit | ccc9b6abb66ebda0b91b4e21f8ec2fb2e87390f7 (patch) | |
tree | 985f9d136a981ec7cc43984c976c60e9295340d5 /src/login/demo_provider.rs | |
parent | 7744625c18aff5990a792bb13a44b60d8c4d4fc5 (diff) | |
download | aerogramme-ccc9b6abb66ebda0b91b4e21f8ec2fb2e87390f7.tar.gz aerogramme-ccc9b6abb66ebda0b91b4e21f8ec2fb2e87390f7.zip |
add a --dev mode
Diffstat (limited to 'src/login/demo_provider.rs')
-rw-r--r-- | src/login/demo_provider.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/login/demo_provider.rs b/src/login/demo_provider.rs new file mode 100644 index 0000000..0efb37c --- /dev/null +++ b/src/login/demo_provider.rs @@ -0,0 +1,48 @@ +use crate::login::*; +use crate::storage::*; + +pub struct DemoLoginProvider{ + keys: CryptoKeys, + in_memory_store: in_memory::MemDb, +} + +impl DemoLoginProvider { + pub fn new() -> Self { + Self { + keys: CryptoKeys::init(), + in_memory_store: in_memory::MemDb::new(), + } + } +} + +#[async_trait] +impl LoginProvider for DemoLoginProvider { + async fn login(&self, username: &str, password: &str) -> Result<Credentials> { + tracing::debug!(user=%username, "login"); + + if username != "alice" { + bail!("user does not exist"); + } + + if password != "hunter2" { + bail!("wrong password"); + } + + let storage = self.in_memory_store.builder("alice").await; + let keys = self.keys.clone(); + + Ok(Credentials { storage, keys }) + } + + async fn public_login(&self, email: &str) -> Result<PublicCredentials> { + tracing::debug!(user=%email, "public_login"); + if email != "alice@example.tld" { + bail!("invalid email address"); + } + + let storage = self.in_memory_store.builder("alice").await; + let public_key = self.keys.public.clone(); + + Ok(PublicCredentials { storage, public_key }) + } +} |