Browse Source
			
			
			Add Invite JWT struct and supporting functions
			
			
				pull/295/head
			
			
		 
		
			
				
					
						 Nick Fox
					
					7 years ago
						Nick Fox
					
					7 years ago
					
				 
				
			 
		 
		
			
				
					
					No known key found for this signature in database
					
						
							GPG Key ID: 82719985805A7CA8
						
					
				
			
		
		
		
	
		
			
				 1 changed files with 
35 additions and 
0 deletions
			 
			
		 
		
			
				- 
					
					
					 
					src/auth.rs
				
				
				
					
						
							
								
									
	
		
			
				
					|  |  | @ -56,6 +56,27 @@ pub fn decode_jwt(token: &str) -> Result<JWTClaims, String> { | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | pub fn decode_invite_jwt(token: &str) -> Result<InviteJWTClaims, String> { | 
			
		
	
		
			
				
					|  |  |  |     let validation = jsonwebtoken::Validation { | 
			
		
	
		
			
				
					|  |  |  |         leeway: 30, // 30 seconds
 | 
			
		
	
		
			
				
					|  |  |  |         validate_exp: true, | 
			
		
	
		
			
				
					|  |  |  |         validate_iat: false, // IssuedAt is the same as NotBefore
 | 
			
		
	
		
			
				
					|  |  |  |         validate_nbf: true, | 
			
		
	
		
			
				
					|  |  |  |         aud: None, | 
			
		
	
		
			
				
					|  |  |  |         iss: Some(JWT_ISSUER.clone()), | 
			
		
	
		
			
				
					|  |  |  |         sub: None, | 
			
		
	
		
			
				
					|  |  |  |         algorithms: vec![JWT_ALGORITHM], | 
			
		
	
		
			
				
					|  |  |  |     }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     match jsonwebtoken::decode(token, &PUBLIC_RSA_KEY, &validation) { | 
			
		
	
		
			
				
					|  |  |  |         Ok(decoded) => Ok(decoded.claims), | 
			
		
	
		
			
				
					|  |  |  |         Err(msg) => { | 
			
		
	
		
			
				
					|  |  |  |             error!("Error validating jwt - {:#?}", msg); | 
			
		
	
		
			
				
					|  |  |  |             Err(msg.to_string()) | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | #[derive(Debug, Serialize, Deserialize)] | 
			
		
	
		
			
				
					|  |  |  | pub struct JWTClaims { | 
			
		
	
		
			
				
					|  |  |  |     // Not before
 | 
			
		
	
	
		
			
				
					|  |  | @ -87,6 +108,20 @@ pub struct JWTClaims { | 
			
		
	
		
			
				
					|  |  |  |     pub amr: Vec<String>, | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | #[derive(Debug, Serialize, Deserialize)] | 
			
		
	
		
			
				
					|  |  |  | pub struct InviteJWTClaims { | 
			
		
	
		
			
				
					|  |  |  |     // Not before
 | 
			
		
	
		
			
				
					|  |  |  |     pub nbf: i64, | 
			
		
	
		
			
				
					|  |  |  |     // Expiration time
 | 
			
		
	
		
			
				
					|  |  |  |     pub exp: i64, | 
			
		
	
		
			
				
					|  |  |  |     // Issuer
 | 
			
		
	
		
			
				
					|  |  |  |     pub iss: String, | 
			
		
	
		
			
				
					|  |  |  |     // Subject
 | 
			
		
	
		
			
				
					|  |  |  |     pub sub: String, | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     pub email: String, | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | ///
 | 
			
		
	
		
			
				
					|  |  |  | /// Bearer token authentication
 | 
			
		
	
		
			
				
					|  |  |  | ///
 | 
			
		
	
	
		
			
				
					|  |  | 
 |