use jsonwebtoken::{encode, Header, EncodingKey}; use serde::{Deserialize, Serialize}; use uuid::Uuid; use chrono::{Utc, Duration}; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Claims { pub sub: Uuid, pub org: Uuid, pub exp: i64, pub role: String, } pub fn create_jwt(user_id: Uuid, organization_id: Uuid, role: &str) -> Result { let expiration = Utc::now() .checked_add_signed(Duration::hours(24)) .expect("valid timestamp") .timestamp(); let claims = Claims { sub: user_id, org: organization_id, exp: expiration, role: role.to_string(), }; let secret = std::env::var("JWT_SECRET").unwrap_or_else(|_| "secret".to_string()); encode(&Header::default(), &claims, &EncodingKey::from_secret(secret.as_ref())) }