@@ -46,7 +46,7 @@ pub fn find_valid_cert_for_peer<'a>(name: &'a str, certs: &'a [Certificate]) ->
46
46
/// ##Examples
47
47
///
48
48
/// The following short snippet shows `MutualTlsUser` being used as a request guard in a handler to
49
- /// verify the client's certificate.
49
+ /// verify the client's certificate and print its subject name .
50
50
///
51
51
/// ```rust
52
52
/// # #![feature(plugin, decl_macro)]
@@ -55,12 +55,40 @@ pub fn find_valid_cert_for_peer<'a>(name: &'a str, certs: &'a [Certificate]) ->
55
55
/// use rocket::http::tls::MutualTlsUser;
56
56
///
57
57
/// #[get("/message")]
58
- /// fn message(mtls:MutualTlsUser) {
59
- /// println!("Authenticated client" );
58
+ /// fn message(mtls: MutualTlsUser) {
59
+ /// println!("{}", mtls.subject_name() );
60
60
/// }
61
61
///
62
62
/// # fn main() { }
63
63
/// ```
64
64
///
65
65
#[ derive( Debug ) ]
66
- pub struct MutualTlsUser { }
66
+ pub struct MutualTlsUser {
67
+ subject_name : String ,
68
+ }
69
+
70
+ impl MutualTlsUser {
71
+ pub fn new ( subject_name : & str ) -> MutualTlsUser {
72
+ // NOTE: `subject_name` is not necessarily the subject name in the certificate,
73
+ // but it is the name for which the certificate was validated.
74
+ MutualTlsUser {
75
+ subject_name : subject_name. to_string ( )
76
+ }
77
+ }
78
+
79
+ /// Return the client's subject name.
80
+ ///
81
+ /// # Example
82
+ ///
83
+ /// ```rust
84
+ /// # extern crate rocket;
85
+ /// use rocket::http::tls::MutualTlsUser;
86
+ ///
87
+ /// fn handler(mtls: MutualTlsUser) {
88
+ /// let subject_name = mtls.subject_name();
89
+ /// }
90
+ /// ```
91
+ pub fn subject_name ( & self ) -> & str {
92
+ & self . subject_name
93
+ }
94
+ }
0 commit comments