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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#[cfg(feature = "hyper")] use hyper::server::request::Request;
#[cfg(feature = "hyper")] use hyper::header::Cookie;
use sessionpolicy::SessionPolicy;
use token::Token;
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
pub struct ConnectionSignature {
pub token: Token,
}
impl ConnectionSignature {
pub fn new(secret: &str) -> ConnectionSignature {
ConnectionSignature {
token: Token::new_from_str(secret),
}
}
pub fn new_from_policy(policy: &SessionPolicy) -> ConnectionSignature {
ConnectionSignature { token: Token::new(&policy.salt) }
}
pub fn get_token(&self) -> Token {
self.token.clone()
}
#[cfg(feature = "hyper")]
pub fn new_hyper(req: &Request, cookie_name: &str, key: &[u8], policy: &SessionPolicy) -> ConnectionSignature {
match req.headers.get::<Cookie>() {
Some(c) => match c.to_cookie_jar(key).find(cookie_name) {
Some(c) => ConnectionSignature::new(&c.value),
None => ConnectionSignature::new_from_policy(policy),
},
None => ConnectionSignature::new_from_policy(policy),
}
}
}