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>
}

/// A request guard that checks if a private cookie was provided
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(())
        }
    }
}