ts-webapi 0.4.11

Library for my web API projects
Documentation
//! Common middleware layers

pub mod api_key;
pub mod authorization;
pub mod futures;
#[cfg(feature = "token")]
pub mod token;

pub use api_key::ApiKeyAuth;
pub use authorization::Authorization;
#[cfg(feature = "token")]
pub use token::TokenAuth;

#[cfg(test)]
pub(crate) mod test {
    use bytes::Bytes;
    use http::{HeaderValue, Request, header::AUTHORIZATION};
    use http_body_util::Full;
    use ts_crypto::any::SigningKey;
    use ts_token::{TokenIssuer, jwt::TokenType};

    pub const PEM: &str = include_str!("../../../ts-token/tests/keys/private.ed25519.pem");
    pub const JWK: &str = r#"{"kid":"Cnm4neUDvdKZWXHIZCzcF2yqrh4rBhtrAGs47oaYkHg","use":"sig","kty":"OKP","alg":"EdDSA","crv":"Ed25519","x":"kjcgG6MObZTP8ie3IhpTxYBFxDAwNgjz6AEBnnm9K3U"}"#;

    pub fn get_request(typ: Option<TokenType>) -> Request<Full<Bytes>> {
        let mut request = Request::builder().uri("/resource/id");

        if let Some(typ) = typ {
            let key = SigningKey::from_unknown_pem(PEM.as_bytes()).expect("key should be valid");
            let issuer = TokenIssuer::from_key(key).expect("key should be a valid issuer");

            let token = issuer.issue_token("subject".to_string(), typ).serialize();

            request.headers_mut().expect("request should be ok").insert(
                AUTHORIZATION,
                HeaderValue::from_str(&format!("bearer {token}"))
                    .expect("token should be a valid header value"),
            );
        }

        request
            .body(Full::<Bytes>::default())
            .expect("request should be ok")
    }
}