1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use super::authenticator::Authenticator;
use std::marker::PhantomData;
use rocket;
use rocket::request::FromRequest;
use rocket::Request;
use rocket::outcome::Outcome;
pub struct UserPass<A>{
pub user_id: String,
authenticator: PhantomData<A>
}
impl<'a,'r,A: Authenticator> FromRequest<'a, 'r> for UserPass<A>{
type Error = ();
fn from_request(request: &'a Request<'r>) -> rocket::request::Outcome<Self,Self::Error>{
let mut cookies = request.cookies();
match cookies.get_private(A::COOKIE_IDENTIFIER){
Some(cookie) => Outcome::Success(UserPass{user_id: cookie.value().to_string(), authenticator: PhantomData}),
None => Outcome::Forward(())
}
}
}