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