mailtutan-lib 0.2.0

a fake smtp server for test and development environments written in Rust - library
Documentation
use crate::APP;
use axum::{headers::HeaderMapExt, response::IntoResponse};

use axum::{
    headers::authorization::{Authorization, Basic},
    http::Request,
    http::StatusCode,
    middleware::Next,
    response::Response,
};
pub async fn basic<B>(request: Request<B>, next: Next<B>) -> Response {
    if let Some(credential) = request.headers().typed_get::<Authorization<Basic>>() {
        if let Some(app) = APP.get() {
            let valid = {
                if let Ok(app) = app.lock() {
                    app.http_username == credential.0.username()
                        && app.http_password == credential.0.password()
                } else {
                    false
                }
            };

            if valid {
                let res = next.run(request).await;
                return res;
            }
        }
    }

    let mut res = (StatusCode::UNAUTHORIZED, "Authorization is required").into_response();
    res.headers_mut().insert(
        "WWW-Authenticate",
        "Basic realm=\"Mailtutan\"".parse().unwrap(),
    );
    res
}