Compare commits

..

2 commits

Author SHA1 Message Date
731f6f2f6c bugfix: return existing token instead of creating a new one every time 2024-02-11 19:12:51 +01:00
5c747f2b41 slightly shorten db.get_token
(no good reason other than i think it looks better)
2024-02-11 19:04:53 +01:00
3 changed files with 20 additions and 13 deletions

View file

@ -84,7 +84,7 @@ impl UserAuthenticator {
}
#[instrument]
pub async fn create_user_token(
pub async fn get_user_token(
&self,
username: &str,
password: &Password,
@ -108,13 +108,23 @@ impl UserAuthenticator {
return Err(AuthenticationError::InvalidUserOrPassword);
};
let new_token =
UserToken::from(Alphanumeric.sample_string(&mut thread_rng(), Self::TOKEN_LEN));
// if a valid token exists, return it; if not, create a new one
let mut db = self.db.lock().await;
db.save_token(&username, &new_token).await?;
let token =
if let Some(UserTokenEntry::Valid(old_token, _, _)) = db.get_token(&username).await? {
// TODO: update old_token's last_used value
Ok((username, new_token))
old_token
} else {
let new_token =
UserToken::from(Alphanumeric.sample_string(&mut thread_rng(), Self::TOKEN_LEN));
db.save_token(&username, &new_token).await?;
new_token
};
Ok((username, token))
}
#[instrument]

View file

@ -98,12 +98,9 @@ impl Database for SqliteDatabase {
valid,
created,
last_used,
}| {
if valid {
UserTokenEntry::Valid(UserToken::from(token), created, last_used)
} else {
UserTokenEntry::Invalid(UserToken::from(token), created, last_used)
}
}| match valid {
true => UserTokenEntry::Valid(UserToken::from(token), created, last_used),
false => UserTokenEntry::Invalid(UserToken::from(token), created, last_used),
},
))
}

View file

@ -114,7 +114,7 @@ async fn api_login(
event!(Level::INFO, "Generating user key");
let (username, user_token) = user_authenticator
.create_user_token(&username, &password)
.get_user_token(&username, &password)
.await?;
Ok(Json(LoginResponse {