summaryrefslogtreecommitdiff
path: root/src/login
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-09-27 23:46:55 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-09-28 01:00:12 -0400
commit155f6f2556b21e6b25afe096b19adcde1255c598 (patch)
treefb20184cd244d2b9138603fbd4909d7968cf0796 /src/login
parent60b711c844f8624348d5d1dac3a625532a8e2a82 (diff)
Expire channels, too.
Diffstat (limited to 'src/login')
-rw-r--r--src/login/app.rs15
-rw-r--r--src/login/routes/test/login.rs6
2 files changed, 17 insertions, 4 deletions
diff --git a/src/login/app.rs b/src/login/app.rs
index 10609c6..292b95f 100644
--- a/src/login/app.rs
+++ b/src/login/app.rs
@@ -60,11 +60,7 @@ impl<'a> Logins<'a> {
}
pub async fn validate(&self, secret: &str, used_at: &DateTime) -> Result<Login, ValidateError> {
- // Somewhat arbitrarily, expire after 7 days.
- let expire_at = used_at.to_owned() - TimeDelta::days(7);
-
let mut tx = self.db.begin().await?;
- tx.tokens().expire(&expire_at).await?;
let login = tx
.tokens()
.validate(secret, used_at)
@@ -75,6 +71,17 @@ impl<'a> Logins<'a> {
Ok(login)
}
+ pub async fn expire(&self, relative_to: &DateTime) -> Result<(), sqlx::Error> {
+ // Somewhat arbitrarily, expire after 7 days.
+ let expire_at = relative_to.to_owned() - TimeDelta::days(7);
+
+ let mut tx = self.db.begin().await?;
+ tx.tokens().expire(&expire_at).await?;
+ tx.commit().await?;
+
+ Ok(())
+ }
+
pub async fn logout(&self, secret: &str) -> Result<(), ValidateError> {
let mut tx = self.db.begin().await?;
tx.tokens()
diff --git a/src/login/routes/test/login.rs b/src/login/routes/test/login.rs
index d92c01b..719ccca 100644
--- a/src/login/routes/test/login.rs
+++ b/src/login/routes/test/login.rs
@@ -126,6 +126,12 @@ async fn token_expires() {
// Verify the semantics
+ let expired_at = fixtures::now();
+ app.logins()
+ .expire(&expired_at)
+ .await
+ .expect("expiring tokens never fails");
+
let verified_at = fixtures::now();
let error = app
.logins()