summaryrefslogtreecommitdiff
path: root/src/login/routes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/login/routes.rs')
-rw-r--r--src/login/routes.rs38
1 files changed, 3 insertions, 35 deletions
diff --git a/src/login/routes.rs b/src/login/routes.rs
index 9cefe38..816926e 100644
--- a/src/login/routes.rs
+++ b/src/login/routes.rs
@@ -8,10 +8,7 @@ use axum::{
use crate::{app::App, clock::RequestedAt, error::InternalError};
-use super::{
- extract::IdentityToken,
- repo::{logins::Provider as _, tokens::Provider as _},
-};
+use super::extract::IdentityToken;
pub fn router() -> Router<App> {
Router::new()
@@ -31,34 +28,7 @@ async fn on_login(
identity: IdentityToken,
Form(form): Form<LoginRequest>,
) -> Result<impl IntoResponse, InternalError> {
- let mut tx = app.db.begin().await?;
-
- // Spelling the following in the more conventional form,
- // if let Some(…) = create().await? {}
- // else if let Some(…) = validate().await? {}
- // else {}
- // pushes the specifics of whether the returned error types are Send or not
- // (they aren't) into the type of this function's generated Futures, which
- // in turn makes this function unusable as an Axum handler.
- let login = tx.logins().create(&form.name, &form.password).await?;
- let login = if login.is_some() {
- login
- } else {
- tx.logins().authenticate(&form.name, &form.password).await?
- };
-
- // If `login` is Some, then we have an identity and can issue an identity
- // token. If `login` is None, then neither creating a new login nor authenticating
- // an existing one succeeded, and we must reject the attempt.
- //
- // These properties will be transferred to `token`, as well.
- let token = if let Some(login) = login {
- Some(tx.tokens().issue(&login.id, now).await?)
- } else {
- None
- };
-
- tx.commit().await?;
+ let token = app.logins().login(&form.name, &form.password, now).await?;
let resp = if let Some(token) = token {
let identity = identity.set(&token);
@@ -91,9 +61,7 @@ async fn on_logout(
identity: IdentityToken,
) -> Result<impl IntoResponse, InternalError> {
if let Some(secret) = identity.secret() {
- let mut tx = app.db.begin().await?;
- tx.tokens().revoke(secret).await?;
- tx.commit().await?;
+ app.logins().logout(secret).await?;
}
let identity = identity.clear();