| 
						
						
						
					 | 
				
				 | 
				
					@ -1,18 +1,14 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					// JWT Handling
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					//
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use chrono::{Duration, Utc}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use num_traits::FromPrimitive; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use once_cell::sync::Lazy; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use jsonwebtoken::{self, Algorithm, DecodingKey, EncodingKey, Header}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use jsonwebtoken::{self, errors::ErrorKind, Algorithm, DecodingKey, EncodingKey, Header}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use serde::de::DeserializeOwned; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use serde::ser::Serialize; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use crate::{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    error::{Error, MapResult}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    CONFIG, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use crate::{error::Error, CONFIG}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					const JWT_ALGORITHM: Algorithm = Algorithm::RS256; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -61,7 +57,15 @@ fn decode_jwt<T: DeserializeOwned>(token: &str, issuer: String) -> Result<T, Err | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    validation.set_issuer(&[issuer]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    let token = token.replace(char::is_whitespace, ""); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    jsonwebtoken::decode(&token, &PUBLIC_RSA_KEY, &validation).map(|d| d.claims).map_res("Error decoding JWT") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    match jsonwebtoken::decode(&token, &PUBLIC_RSA_KEY, &validation) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Ok(d) => Ok(d.claims), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Err(err) => match *err.kind() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ErrorKind::InvalidToken => err!("Token is invalid"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ErrorKind::InvalidIssuer => err!("Issuer is invalid"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ErrorKind::ExpiredSignature => err!("Token has expired"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            _ => err!("Error decoding JWT"), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					pub fn decode_login(token: &str) -> Result<LoginJwtClaims, Error> { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |