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
use hyper::{header, server};
use server_utils::{cors, hosts};
pub use server_utils::cors::CorsHeader;
fn read_header<'a>(req: &'a server::Request, header: &str) -> Option<&'a str> {
match req.headers().get_raw(header) {
Some(ref v) if v.len() == 1 => {
::std::str::from_utf8(&v[0]).ok()
},
_ => None
}
}
pub fn is_host_allowed(
request: &server::Request,
allowed_hosts: &Option<Vec<hosts::Host>>,
) -> bool {
hosts::is_host_valid(read_header(request, "host"), allowed_hosts)
}
pub fn cors_header(
request: &server::Request,
cors_domains: &Option<Vec<cors::AccessControlAllowOrigin>>
) -> CorsHeader<header::AccessControlAllowOrigin> {
cors::get_cors_header(read_header(request, "origin"), read_header(request, "host"), cors_domains).map(|origin| {
use self::cors::AccessControlAllowOrigin::*;
match origin {
Value(val) => header::AccessControlAllowOrigin::Value((*val).to_owned()),
Null => header::AccessControlAllowOrigin::Null,
Any => header::AccessControlAllowOrigin::Any,
}
})
}