summaryrefslogtreecommitdiff
path: root/src/login
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-09-15 23:23:34 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-09-16 11:03:04 -0400
commit71780b29e73b5f943e7d6f1e0889da9112103bdb (patch)
tree081e688c850591255b4af0bdae19c47b420822c6 /src/login
parentc5434c066a21107dc146801f940b02d61d260555 (diff)
Expose sqlx errors directly in repo interfaces.
BoxedError conceals the exact nature of the error, which in turn prevents me from using sqlx::Error::RowNotFound to signal absences.
Diffstat (limited to 'src/login')
-rw-r--r--src/login/repo/logins.rs7
-rw-r--r--src/login/repo/tokens.rs10
2 files changed, 8 insertions, 9 deletions
diff --git a/src/login/repo/logins.rs b/src/login/repo/logins.rs
index b0c8ce4..11ae50f 100644
--- a/src/login/repo/logins.rs
+++ b/src/login/repo/logins.rs
@@ -1,6 +1,5 @@
use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction};
-use crate::error::BoxedError;
use crate::id::Id as BaseId;
use crate::login::app::StoredHash;
@@ -32,7 +31,7 @@ impl<'c> Logins<'c> {
&mut self,
name: &str,
password_hash: &StoredHash,
- ) -> Result<Login, BoxedError> {
+ ) -> Result<Login, sqlx::Error> {
let id = Id::generate();
let login = sqlx::query_as!(
@@ -55,7 +54,7 @@ impl<'c> Logins<'c> {
Ok(login)
}
- pub async fn by_id(&mut self, id: &Id) -> Result<Login, BoxedError> {
+ pub async fn by_id(&mut self, id: &Id) -> Result<Login, sqlx::Error> {
let login = sqlx::query_as!(
Login,
r#"
@@ -79,7 +78,7 @@ impl<'c> Logins<'c> {
pub async fn for_login(
&mut self,
name: &str,
- ) -> Result<Option<(Login, StoredHash)>, BoxedError> {
+ ) -> Result<Option<(Login, StoredHash)>, sqlx::Error> {
let found = sqlx::query!(
r#"
select
diff --git a/src/login/repo/tokens.rs b/src/login/repo/tokens.rs
index 2e46186..4d381ef 100644
--- a/src/login/repo/tokens.rs
+++ b/src/login/repo/tokens.rs
@@ -3,7 +3,7 @@ use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction};
use uuid::Uuid;
use super::logins::{Id as LoginId, Login};
-use crate::{clock::DateTime, error::BoxedError};
+use crate::clock::DateTime;
pub trait Provider {
fn tokens(&mut self) -> Tokens;
@@ -24,7 +24,7 @@ impl<'c> Tokens<'c> {
&mut self,
login: &LoginId,
issued_at: DateTime,
- ) -> Result<String, BoxedError> {
+ ) -> Result<String, sqlx::Error> {
let secret = Uuid::new_v4().to_string();
let secret = sqlx::query_scalar!(
@@ -46,7 +46,7 @@ impl<'c> Tokens<'c> {
/// Revoke a token by its secret. If there is no such token with that
/// secret, this will succeed by doing nothing.
- pub async fn revoke(&mut self, secret: &str) -> Result<(), BoxedError> {
+ pub async fn revoke(&mut self, secret: &str) -> Result<(), sqlx::Error> {
sqlx::query!(
r#"
delete
@@ -64,7 +64,7 @@ impl<'c> Tokens<'c> {
/// Expire and delete all tokens that haven't been used within the expiry
/// interval (right now, 7 days) prior to `expire_at`. Tokens that are in
/// use within that period will be retained.
- pub async fn expire(&mut self, expire_at: DateTime) -> Result<(), BoxedError> {
+ pub async fn expire(&mut self, expire_at: DateTime) -> Result<(), sqlx::Error> {
// Somewhat arbitrarily, expire after 7 days.
let expired_issue_at = expire_at - TimeDelta::days(7);
sqlx::query!(
@@ -88,7 +88,7 @@ impl<'c> Tokens<'c> {
&mut self,
secret: &str,
used_at: DateTime,
- ) -> Result<Option<Login>, BoxedError> {
+ ) -> Result<Option<Login>, sqlx::Error> {
// I would use `update … returning` to do this in one query, but
// sqlite3, as of this writing, does not allow an update's `returning`
// clause to reference columns from tables joined into the update. Two