this repo has no description
1use jsonwebtoken::{encode, decode, Header, Validation, EncodingKey, DecodingKey, TokenData}; 2use serde::{Deserialize, Serialize}; 3use chrono::{Utc, Duration}; 4use std::env; 5 6#[derive(Debug, Serialize, Deserialize)] 7pub struct Claims { 8 // DID type shit 9 pub sub: String, 10 pub exp: usize, 11 pub iat: usize, 12 pub scope: String, 13 pub jti: String, 14} 15 16pub fn create_access_token(did: &str) -> Result<String, jsonwebtoken::errors::Error> { 17 let secret = env::var("JWT_SECRET").unwrap_or_else(|_| "secret".to_string()); 18 let expiration = Utc::now() 19 .checked_add_signed(Duration::minutes(15)) 20 .expect("valid timestamp") 21 .timestamp(); 22 23 let claims = Claims { 24 sub: did.to_owned(), 25 exp: expiration as usize, 26 iat: Utc::now().timestamp() as usize, 27 scope: "access".to_string(), 28 jti: uuid::Uuid::new_v4().to_string(), 29 }; 30 31 encode(&Header::default(), &claims, &EncodingKey::from_secret(secret.as_ref())) 32} 33 34pub fn create_refresh_token(did: &str) -> Result<String, jsonwebtoken::errors::Error> { 35 let secret = env::var("JWT_SECRET").unwrap_or_else(|_| "secret".to_string()); 36 let expiration = Utc::now() 37 .checked_add_signed(Duration::days(7)) 38 .expect("valid timestamp") 39 .timestamp(); 40 41 let claims = Claims { 42 sub: did.to_owned(), 43 exp: expiration as usize, 44 iat: Utc::now().timestamp() as usize, 45 scope: "refresh".to_string(), 46 jti: uuid::Uuid::new_v4().to_string(), 47 }; 48 49 encode(&Header::default(), &claims, &EncodingKey::from_secret(secret.as_ref())) 50} 51 52pub fn verify_token(token: &str) -> Result<TokenData<Claims>, jsonwebtoken::errors::Error> { 53 let secret = env::var("JWT_SECRET").unwrap_or_else(|_| "secret".to_string()); 54 decode::<Claims>( 55 token, 56 &DecodingKey::from_secret(secret.as_ref()), 57 &Validation::default(), 58 ) 59}