@ -67,14 +67,16 @@ fn get_yubico_credentials() -> Result<(String, String), Error> { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					fn  verify_yubikey_otp ( otp : String )   -> EmptyResult   {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					async   fn  verify_yubikey_otp ( otp : String )   -> EmptyResult   {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     let   ( yubico_id ,   yubico_secret )   =   get_yubico_credentials ( ) ? ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     let   config   =   Config ::default ( ) . set_client_id ( yubico_id ) . set_key ( yubico_secret ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     match   CONFIG . yubico_server ( )   {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         Some ( server )   = >   verify ( otp ,   config . set_api_hosts ( vec ! [ server ] ) ) ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         None   = >   verify ( otp ,   config ) ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         Some ( server )   = >   {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					             tokio ::task ::spawn_blocking ( move   | |   verify ( otp ,   config . set_api_hosts ( vec ! [ server ] ) ) ) . await . unwrap ( )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         None   = >   tokio ::task ::spawn_blocking ( move   | |   verify ( otp ,   config ) ) . await . unwrap ( ) ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     . map_res ( "Failed to verify OTP" )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     . and ( Ok ( ( ) ) )  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -152,7 +154,7 @@ async fn activate_yubikey( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					             continue ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         verify_yubikey_otp ( yubikey . to_owned ( ) ) . map_res ( "Invalid Yubikey OTP provided" ) ? ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         verify_yubikey_otp ( yubikey . to_owned ( ) ) . await . map_res ( "Invalid Yubikey OTP provided" ) ? ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     let   yubikey_ids : Vec < String >   =   yubikeys . into_iter ( ) . map ( | x |   ( x [ . . 12 ] ) . to_owned ( ) ) . collect ( ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -188,7 +190,7 @@ async fn activate_yubikey_put( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     activate_yubikey ( data ,   headers ,   conn ,   ip ) . await  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					pub   fn  validate_yubikey_login ( response : & str ,   twofactor_data : & str )   -> EmptyResult   {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					pub   async   fn  validate_yubikey_login ( response : & str ,   twofactor_data : & str )   -> EmptyResult   {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     if   response . len ( )   ! =   44   {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         err ! ( "Invalid Yubikey OTP length" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     }  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -200,7 +202,7 @@ pub fn validate_yubikey_login(response: &str, twofactor_data: &str) -> EmptyResu 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         err ! ( "Given Yubikey is not registered" ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     let   result   =   verify_yubikey_otp ( response . to_owned ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     let   result   =   verify_yubikey_otp ( response . to_owned ( ) ) . await ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     match   result   {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         Ok ( _answer )   = >   Ok ( ( ) ) ,