distinguish invalid token from database error

This commit is contained in:
deneb 2024-02-10 13:39:10 +01:00
parent e56c7525e2
commit 51865c365c
2 changed files with 9 additions and 10 deletions

View file

@ -63,10 +63,10 @@ impl UserAuthenticator {
) -> Result<(), AuthenticationError> { ) -> Result<(), AuthenticationError> {
let mut db = self.db.lock().await; let mut db = self.db.lock().await;
// TODO: (in db) distinguish between invalid token and SQLX error match db.get_token(username).await? {
db.get_token(username).await?; Some(_) => Ok(()),
None => Err(AuthenticationError::InvalidToken),
Ok(()) }
} }
} }

View file

@ -11,7 +11,7 @@ const DB_URI_DEFAULT: &str = "sqlite://sqlite.db";
const TABLE_USER_TOKENS: &str = "user_tokens"; const TABLE_USER_TOKENS: &str = "user_tokens";
pub trait Database { pub trait Database {
async fn get_token(&mut self, username: &str) -> Result<UserToken, sqlx::Error>; async fn get_token(&mut self, username: &str) -> Result<Option<UserToken>, sqlx::Error>;
async fn save_token(&mut self, username: &str, token: &UserToken) -> Result<(), sqlx::Error>; async fn save_token(&mut self, username: &str, token: &UserToken) -> Result<(), sqlx::Error>;
} }
@ -56,9 +56,8 @@ impl SqliteDatabase {
} }
impl Database for SqliteDatabase { impl Database for SqliteDatabase {
// TODO: distinguish between invalid token and SQLX error async fn get_token(&mut self, username: &str) -> Result<Option<UserToken>, sqlx::Error> {
async fn get_token(&mut self, username: &str) -> Result<UserToken, sqlx::Error> { let row: Option<(String,)> = query_as(
let row: (String,) = query_as(
"SELECT token "SELECT token
FROM user_tokens FROM user_tokens
WHERE WHERE
@ -68,10 +67,10 @@ impl Database for SqliteDatabase {
created DESC", created DESC",
) )
.bind(username) .bind(username)
.fetch_one(&mut self.conn) .fetch_optional(&mut self.conn)
.await?; .await?;
Ok(UserToken::from(row.0)) Ok(row.map(|(token_str, ..)| UserToken::from(token_str)))
} }
async fn save_token(&mut self, username: &str, token: &UserToken) -> Result<(), sqlx::Error> { async fn save_token(&mut self, username: &str, token: &UserToken) -> Result<(), sqlx::Error> {