From e9d33ca38d1e1f04858bdafe9ba0ac2d2fe2f69e Mon Sep 17 00:00:00 2001 From: Jose Quintana Date: Tue, 1 Aug 2023 00:57:31 +0200 Subject: [PATCH] refactor: basic auth check request function --- src/basic_auth.rs | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/basic_auth.rs b/src/basic_auth.rs index 0183733..397a8fd 100644 --- a/src/basic_auth.rs +++ b/src/basic_auth.rs @@ -8,34 +8,28 @@ use bcrypt::verify as bcrypt_verify; use headers::{authorization::Basic, Authorization, HeaderMapExt}; +use http::HeaderMap; use hyper::StatusCode; /// Check for a `Basic` HTTP Authorization Schema of an incoming request /// and uses `bcrypt` for password hashing verification. -pub fn check_request( - headers: &http::HeaderMap, - userid: &str, - password: &str, -) -> Result<(), StatusCode> { - if let Some(ref credentials) = headers.typed_get::>() { - if credentials.0.username() == userid { - return match bcrypt_verify(credentials.0.password(), password) { - Ok(valid) => { - if valid { - Ok(()) - } else { - Err(StatusCode::UNAUTHORIZED) - } - } - Err(err) => { - tracing::error!("bcrypt password verification error: {:?}", err); - Err(StatusCode::UNAUTHORIZED) - } - }; - } +pub fn check_request(headers: &HeaderMap, userid: &str, password: &str) -> Result<(), StatusCode> { + let credentials = headers + .typed_get::>() + .ok_or(StatusCode::UNAUTHORIZED)?; + + if credentials.0.username() != userid { + return Err(StatusCode::UNAUTHORIZED); } - Err(StatusCode::UNAUTHORIZED) + match bcrypt_verify(credentials.0.password(), password) { + Ok(valid) if valid => Ok(()), + Ok(_) => Err(StatusCode::UNAUTHORIZED), + Err(err) => { + tracing::error!("bcrypt password verification error: {:?}", err); + Err(StatusCode::UNAUTHORIZED) + } + } } #[cfg(test)] -- libgit2 1.7.2