Skip to content

Commit a2a4861

Browse files
committed
Add MutualTlsUser request guard
1 parent df77594 commit a2a4861

File tree

4 files changed

+37
-2
lines changed

4 files changed

+37
-2
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

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

core/lib/src/request/from_request.rs

+13
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,14 @@ 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::new(certs)),
324+
None => Forward(())
325+
}
326+
}
327+
}

core/lib/src/request/request.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -707,8 +707,8 @@ impl<'r> Request<'r> {
707707

708708
/// Get the peer certificates
709709
#[cfg(feature = "tls")]
710-
pub(crate) fn get_peer_certificates(&self) -> &Option<Vec<Certificate>> {
711-
&self.peer_certs
710+
pub(crate) fn get_peer_certificates(&self) -> Option<Vec<Certificate>> {
711+
self.peer_certs.clone()
712712
}
713713
}
714714

0 commit comments

Comments
 (0)