api/auth/
mod.rs

1//! Authentication utilities and JWT helpers.
2//!
3//! Provides claims, guards, extractors, middleware, and a function to generate JWTs.
4
5pub mod middleware;
6pub mod claims;
7pub mod extractors;
8pub mod guards;
9
10pub use claims::{Claims, AuthUser};
11
12use jsonwebtoken::{encode, Header, EncodingKey};
13use chrono::{Utc, Duration};
14use std::env;
15
16/// Generates a JWT and its expiry timestamp for a given user.
17pub fn generate_jwt(user_id: i64, admin: bool) -> (String, String) {
18    let jwt_secret = env::var("JWT_SECRET").expect("JWT_SECRET must be set");
19    let jwt_duration_minutes: i64 = env::var("JWT_DURATION_MINUTES")
20        .expect("JWT_DURATION_MINUTES must be set")
21        .parse()
22        .expect("JWT_DURATION_MINUTES must be a valid integer");
23
24    let expiry = Utc::now() + Duration::minutes(jwt_duration_minutes);
25    let exp_timestamp = expiry.timestamp() as usize;
26
27    let claims = Claims {
28        sub: user_id,
29        admin,
30        exp: exp_timestamp,
31    };
32
33    let token = encode(
34        &Header::default(),
35        &claims,
36        &EncodingKey::from_secret(jwt_secret.as_bytes()),
37    )
38    .expect("Token encoding failed");
39
40    (token, expiry.to_rfc3339())
41}