use jsonwebtoken::{decode, Algorithm, DecodingKey, Validation}; use serde::{Deserialize, Serialize}; use std::fmt::{Display, Formatter}; #[derive(Debug, Serialize, Deserialize)] pub struct GoTrueJWTClaims { // JWT standard claims pub aud: Option, pub exp: Option, pub jti: Option, pub iat: Option, pub iss: Option, pub nbf: Option, pub sub: Option, pub email: String, pub phone: String, pub app_metadata: serde_json::Value, pub user_metadata: serde_json::Value, pub role: String, pub aal: Option, pub amr: Option>, pub session_id: Option, } impl Display for GoTrueJWTClaims { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { f.debug_struct("GoTrueJWTClaims") .field("exp", &self.exp) .field("email", &self.email) .finish() } } #[derive(Debug, Serialize, Deserialize)] pub struct Amr { pub method: String, pub timestamp: u64, pub provider: Option, } lazy_static::lazy_static! { pub static ref VALIDATION: Validation = Validation::new(Algorithm::HS256); } impl GoTrueJWTClaims { pub fn decode(token: &str, secret: &[u8]) -> Result { let token_data = decode::(token, &DecodingKey::from_secret(secret), &VALIDATION)?; Ok(token_data.claims) } }