Files
openccb/shared/common/src/auth.rs
T

30 lines
853 B
Rust

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<String, jsonwebtoken::errors::Error> {
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()))
}