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 base64ct::{Base64, Encoding};
17    use bytes::Bytes;
18    use http::{HeaderValue, Request, header::AUTHORIZATION};
19    use http_body_util::Full;
20    use ts_token::{JsonWebKey, SigningKey, TokenType};
21
22    pub const JWK: &str = r#"{
23    "kty": "OKP",
24    "use": "Sig",
25    "kid": "UMIi0hdlBBcIG8oCOmBi_0bvQflivgxp9DKe2L6PjbE",
26    "alg": "Ed25519",
27    "crv": "Ed25519",
28    "x": "O7pSN1soY_McVq81qfRvhZchRr6Umoy9Ln_Ip4RIaeU"
29}"#;
30
31    pub fn get_request(typ: Option<TokenType>) -> Request<Full<Bytes>> {
32        const PRIVATE_KEY: &str =
33            "MC4CAQAwBQYDK2VwBCIEIDFG7nt5nLUgXyExl59kV039R4bllef3niGAp1FjI7or";
34
35        let mut request = Request::builder().uri("/resource/id");
36
37        if let Some(typ) = typ {
38            let signing_key = {
39                let private_key =
40                    Base64::decode_vec(PRIVATE_KEY).expect("PRIVATE_KEY should be valid base64");
41
42                let jwk: JsonWebKey =
43                    serde_json::from_str(JWK).expect("JWK should be a valid JsonWebKey");
44
45                SigningKey::new(jwk, &private_key).expect("signing key should be valid")
46            };
47
48            let token = signing_key
49                .issue_jwt("subject".to_string(), typ)
50                .expect("issuing a JWT should be ok")
51                .serialize();
52
53            request.headers_mut().expect("request should be ok").insert(
54                AUTHORIZATION,
55                HeaderValue::from_str(&format!("bearer {token}"))
56                    .expect("token should be a valid header value"),
57            );
58        }
59
60        request
61            .body(Full::<Bytes>::default())
62            .expect("request should be ok")
63    }
64}