ezidam + refresh tokens: create and insert refresh token

This commit is contained in:
Philippe Loctaux 2023-03-18 15:16:15 +01:00
parent 609933d98f
commit ef8d75ecee
14 changed files with 204 additions and 0 deletions

View file

@ -0,0 +1,12 @@
[package]
name = "refresh_tokens"
version = "0.0.0"
edition = "2021"
[dependencies]
thiserror = { workspace = true }
chrono = { workspace = true }
# local crates
database = { path = "../database" }
id = { path = "../id" }

View file

@ -0,0 +1,43 @@
use crate::error::Error;
use crate::RefreshToken;
use chrono::{Duration, Utc};
use database::sqlx::SqliteExecutor;
use database::RefreshTokens as DatabaseRefreshTokens;
use id::UserID;
impl From<DatabaseRefreshTokens> for RefreshToken {
fn from(db: DatabaseRefreshTokens) -> Self {
Self {
// Info
token: db.token,
ip_address: db.ip_address,
user: UserID(db.user),
// Timings
created_at: db.created_at,
expires_at: db.expires_at,
used_at: db.used_at,
revoked_at: db.revoked_at,
}
}
}
impl RefreshToken {
pub async fn insert(
conn: impl SqliteExecutor<'_>,
token: &str,
ip_address: &str,
user: &UserID,
) -> Result<Option<()>, Error> {
let expires_at = Utc::now() + Duration::days(21);
Ok(DatabaseRefreshTokens::insert(
conn,
token,
ip_address,
user.as_ref(),
expires_at.timestamp(),
)
.await?)
}
}

View file

@ -0,0 +1,8 @@
// error
#[derive(thiserror::Error)]
// the rest
#[derive(Debug)]
pub enum Error {
#[error("Database: {0}")]
Database(#[from] database::Error),
}

View file

@ -0,0 +1,21 @@
mod database;
mod error;
use chrono::{DateTime, Utc};
use id::UserID;
pub use crate::error::Error;
#[derive(Debug)]
pub struct RefreshToken {
// Info
token: String,
ip_address: String,
user: UserID,
// Timings
created_at: DateTime<Utc>,
expires_at: DateTime<Utc>,
used_at: Option<DateTime<Utc>>,
revoked_at: Option<DateTime<Utc>>,
}