index : static-web-server.git

ascending towards madness

author Jose Quintana <joseluisquintana20@gmail.com> 2023-07-31 22:57:31.0 +00:00:00
committer Jose Quintana <joseluisquintana20@gmail.com> 2023-07-31 22:57:31.0 +00:00:00
commit
e9d33ca38d1e1f04858bdafe9ba0ac2d2fe2f69e [patch]
tree
56dd8f1e67fee74e15266920396ce49a7b556ff8
parent
d680a4d587b94dedd494cb8aef2fe057f9b4b118
download
e9d33ca38d1e1f04858bdafe9ba0ac2d2fe2f69e.tar.gz

refactor: basic auth check request function



Diff

 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::<Authorization<Basic>>() {
        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::<Authorization<Basic>>()
        .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)]