| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -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(()), | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |