Moved some JWT db commands to db

This commit is contained in:
Jef Roosens 2021-08-29 21:15:10 +02:00
parent 1378219fe5
commit 02011e04ce
Signed by: Jef Roosens
GPG key ID: B580B976584B5F30
3 changed files with 50 additions and 19 deletions

View file

@ -1,7 +1,10 @@
use diesel::{Insertable, Queryable};
use diesel::{insert_into, prelude::*, Insertable, PgConnection, Queryable};
use uuid::Uuid;
use crate::schema::refresh_tokens;
use crate::{
errors::{RbError, RbResult},
schema::{refresh_tokens, refresh_tokens::dsl::*},
};
#[derive(Queryable)]
pub struct RefreshToken
@ -20,3 +23,36 @@ pub struct NewRefreshToken
pub user_id: Uuid,
pub expires_at: chrono::NaiveDateTime,
}
pub fn all(conn: &PgConnection) -> RbResult<Vec<RefreshToken>>
{
refresh_tokens
.load::<RefreshToken>(conn)
.map_err(|_| RbError::DbError("Couldn't get all refresh tokens."))
}
pub fn create(conn: &PgConnection, new_refresh_token: &NewRefreshToken) -> RbResult<()>
{
insert_into(refresh_tokens)
.values(new_refresh_token)
.execute(conn)
.map_err(|_| RbError::Custom("Couldn't insert refresh token."))?;
// TODO check for conflict?
Ok(())
}
pub fn find_with_user(
conn: &PgConnection,
token_val: &[u8],
) -> Option<(RefreshToken, super::users::User)>
{
// TODO actually check for errors here
refresh_tokens
.inner_join(crate::schema::users::dsl::users)
.filter(token.eq(token_val))
.first::<(RefreshToken, super::users::User)>(conn)
.map_err(|_| RbError::Custom("Couldn't get refresh token & user."))
.ok()
}