1pub 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
16pub 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}