use {
core::time::Duration,
mosaik::tickets::{Expiration, Hs256, Jwt, JwtTicketBuilder},
};
pub const DEFAULT_ISSUER: &str = "mosaik.test.jwt.issuer";
pub const DEFAULT_SECRET: &str = "mosaik.test.jwt.secret";
pub fn jwt_secret(secret: &str) -> [u8; 32] {
*blake3::hash(secret.as_bytes()).as_bytes()
}
pub fn jwt_builder(issuer: &str, secret: &str) -> JwtTicketBuilder {
JwtTicketBuilder::new(Hs256::new(jwt_secret(secret))).issuer(issuer)
}
pub fn jwt_validator(issuer: &str, secret: &str) -> Jwt {
Jwt::with_key(Hs256::new(jwt_secret(secret))).allow_issuer(issuer)
}
pub fn valid_expiry() -> Expiration {
Expiration::At(chrono::Utc::now() + chrono::Duration::hours(1))
}
pub fn expired_expiry() -> Expiration {
Expiration::At(chrono::Utc::now() - chrono::Duration::hours(1))
}
pub fn expiry_in(duration: Duration) -> Expiration {
Expiration::At(
chrono::Utc::now() + chrono::Duration::from_std(duration).unwrap(),
)
}