jsonrpc_http_server/
utils.rs1use hyper::{header, server};
2
3use server_utils::{cors, hosts};
4pub use server_utils::cors::CorsHeader;
5
6fn read_header<'a>(req: &'a server::Request, header: &str) -> Option<&'a str> {
8 match req.headers().get_raw(header) {
9 Some(ref v) if v.len() == 1 => {
10 ::std::str::from_utf8(&v[0]).ok()
11 },
12 _ => None
13 }
14}
15
16pub fn is_host_allowed(
18 request: &server::Request,
19 allowed_hosts: &Option<Vec<hosts::Host>>,
20) -> bool {
21 hosts::is_host_valid(read_header(request, "host"), allowed_hosts)
22}
23
24pub fn cors_header(
26 request: &server::Request,
27 cors_domains: &Option<Vec<cors::AccessControlAllowOrigin>>
28) -> CorsHeader<header::AccessControlAllowOrigin> {
29 cors::get_cors_header(read_header(request, "origin"), read_header(request, "host"), cors_domains).map(|origin| {
30 use self::cors::AccessControlAllowOrigin::*;
31 match origin {
32 Value(val) => header::AccessControlAllowOrigin::Value((*val).to_owned()),
33 Null => header::AccessControlAllowOrigin::Null,
34 Any => header::AccessControlAllowOrigin::Any,
35 }
36 })
37}