// Copyright 2015, 2016 Ethcore (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . use DAPPS_DOMAIN; use hyper::{server, header}; use hyper::net::HttpStream; use jsonrpc_http_server::{is_host_header_valid}; use handlers::ContentHandler; pub fn is_valid(request: &server::Request, bind_address: &str, endpoints: Vec) -> bool { let mut endpoints = endpoints.into_iter() .map(|endpoint| format!("{}{}", endpoint, DAPPS_DOMAIN)) .collect::>(); // Add localhost domain as valid too if listening on loopback interface. endpoints.push(bind_address.replace("127.0.0.1", "localhost").into()); endpoints.push(bind_address.into()); let header_valid = is_host_header_valid(request, &endpoints); match (header_valid, request.headers().get::()) { (true, _) => true, (_, Some(host)) => host.hostname.ends_with(DAPPS_DOMAIN), _ => false, } } pub fn host_invalid_response() -> Box + Send> { Box::new(ContentHandler::forbidden( r#"

Request with disallowed Host header has been blocked.

Check the URL in your browser address bar.

"#.into(), "text/html".into() )) }