diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-11 21:16:11 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-11 21:16:11 -0400 |
| commit | 864febeefc5213928bf88f89a714a006326e5b41 (patch) | |
| tree | b684ab871771044d2b8153f018eb49a001610f72 /src/token/app.rs | |
| parent | 62349ab4ce463b6aafd818021849c63f60f6bf49 (diff) | |
Stop creating accounts during login.
Diffstat (limited to 'src/token/app.rs')
| -rw-r--r-- | src/token/app.rs | 44 |
1 files changed, 12 insertions, 32 deletions
diff --git a/src/token/app.rs b/src/token/app.rs index b8af637..04f8747 100644 --- a/src/token/app.rs +++ b/src/token/app.rs @@ -12,27 +12,17 @@ use super::{ use crate::{ clock::DateTime, db::NotFound as _, - event::{self, repo::Provider as _, Event as ServiceEvent}, - login::{repo::Provider as _, Login, Password}, + login::{Login, Password}, }; pub struct Tokens<'a> { db: &'a SqlitePool, - events: &'a event::Broadcaster, token_events: &'a Broadcaster, } impl<'a> Tokens<'a> { - pub const fn new( - db: &'a SqlitePool, - events: &'a event::Broadcaster, - token_events: &'a Broadcaster, - ) -> Self { - Self { - db, - events, - token_events, - } + pub const fn new(db: &'a SqlitePool, token_events: &'a Broadcaster) -> Self { + Self { db, token_events } } pub async fn login( @@ -42,31 +32,21 @@ impl<'a> Tokens<'a> { login_at: &DateTime, ) -> Result<Secret, LoginError> { let mut tx = self.db.begin().await?; + let (login, stored_hash) = tx + .auth() + .for_name(name) + .await + .optional()? + .ok_or(LoginError::Rejected)?; - let (login, created) = if let Some((login, stored_hash)) = tx.auth().for_name(name).await? { - if stored_hash.verify(password)? { - // Password verified, proceed with login - (login, false) - } else { - // Password NOT verified. - return Err(LoginError::Rejected); - } + let token = if stored_hash.verify(password)? { + tx.tokens().issue(&login, login_at).await? } else { - let password_hash = password.hash()?; - let created = tx.sequence().next(login_at).await?; - let login = tx.logins().create(name, &password_hash, &created).await?; - - (login, true) + Err(LoginError::Rejected)? }; - let token = tx.tokens().issue(&login, login_at).await?; tx.commit().await?; - if created { - self.events - .broadcast(login.events().map(ServiceEvent::from).collect::<Vec<_>>()); - } - Ok(token) } |
