Skip to content

Commit 3a2bd4b

Browse files
committed
Add MutualTlsUser request guard
1 parent df77594 commit 3a2bd4b

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

core/http/src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ pub mod uri;
2727
#[cfg(feature = "tls")]
2828
pub mod tls;
2929

30+
#[cfg(feature = "tls")]
31+
pub mod mtls;
32+
3033
#[macro_use]
3134
mod docify;
3235
#[macro_use]

core/http/src/mtls.rs

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use tls::Certificate;
2+
3+
#[derive(Debug)]
4+
pub struct MutualTlsUser {
5+
peer_certs: Vec<Certificate>,
6+
}
7+
8+
impl MutualTlsUser {
9+
/// Get the common name
10+
pub fn name(&self) -> String {
11+
unimplemented!();
12+
}
13+
}

core/lib/src/request/from_request.rs

+15
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ use outcome::Outcome::*;
88

99
use http::{Status, ContentType, Accept, Method, Cookies};
1010
use http::uri::Uri;
11+
#[cfg(feature = "tls")]
12+
use http::mtls::MutualTlsUser;
1113

1214
/// Type alias for the `Outcome` of a `FromRequest` conversion.
1315
pub type Outcome<S, E> = outcome::Outcome<S, (Status, E), ()>;
@@ -312,3 +314,16 @@ impl<'a, 'r, T: FromRequest<'a, 'r>> FromRequest<'a, 'r> for Option<T> {
312314
}
313315
}
314316

317+
#[cfg(feature = "tls")]
318+
impl <'a, 'r> FromRequest<'a, 'r> for MutualTlsUser {
319+
type Error = ();
320+
321+
fn from_request(request: &'a Request<'r>) -> Outcome<Self, Self::Error> {
322+
match request.get_peer_certificates() {
323+
Some(certs) => Success(MutualTlsUser {
324+
peer_certs: certs
325+
}),
326+
None => Forward(())
327+
}
328+
}
329+
}

0 commit comments

Comments
 (0)