ts_webapi/middleware/
mod.rs

1//! Common middleware layers
2
3pub mod api_key;
4pub mod authorization;
5pub mod futures;
6#[cfg(feature = "token")]
7pub mod token;
8
9pub use api_key::ApiKeyAuth;
10pub use authorization::Authorization;
11#[cfg(feature = "token")]
12pub use token::TokenAuth;
13
14#[cfg(test)]
15pub(crate) mod test {
16    use bytes::Bytes;
17    use http::{HeaderValue, Request, header::AUTHORIZATION};
18    use http_body_util::Full;
19    use ts_crypto::any::SigningKey;
20    use ts_token::{TokenIssuer, jwt::TokenType};
21
22    pub const PEM: &str = include_str!("../../../ts-token/tests/keys/private.ed25519.pem");
23    pub const JWK: &str = r#"{"kid":"Cnm4neUDvdKZWXHIZCzcF2yqrh4rBhtrAGs47oaYkHg","use":"sig","kty":"OKP","alg":"EdDSA","crv":"Ed25519","x":"kjcgG6MObZTP8ie3IhpTxYBFxDAwNgjz6AEBnnm9K3U"}"#;
24
25    pub fn get_request(typ: Option<TokenType>) -> Request<Full<Bytes>> {
26        let mut request = Request::builder().uri("/resource/id");
27
28        if let Some(typ) = typ {
29            let key = SigningKey::from_unknown_pem(PEM.as_bytes()).expect("key should be valid");
30            let issuer = TokenIssuer::from_key(key).expect("key should be a valid issuer");
31
32            let token = issuer.issue_token("subject".to_string(), typ).serialize();
33
34            request.headers_mut().expect("request should be ok").insert(
35                AUTHORIZATION,
36                HeaderValue::from_str(&format!("bearer {token}"))
37                    .expect("token should be a valid header value"),
38            );
39        }
40
41        request
42            .body(Full::<Bytes>::default())
43            .expect("request should be ok")
44    }
45}