From f1c8a55b7a7ae533236564a195037128804445e6 Mon Sep 17 00:00:00 2001 From: Dean Li Date: Sun, 21 Feb 2021 16:55:17 +0800 Subject: Allow set custom headers from CLI --- src/main.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index c55e77f..149381f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -88,6 +88,9 @@ pub struct MiniserveConfig { /// Shown instead of host in page title and heading pub title: Option, + + /// If specified, header will be added + pub header: Option, } fn main() { @@ -248,6 +251,7 @@ async fn run() -> Result<(), ContextualError> { let srv = actix_web::HttpServer::new(move || { App::new() + .wrap(configure_header(&inside_config.clone())) .app_data(inside_config.clone()) .wrap(middleware::Condition::new( !inside_config.auth.is_empty(), @@ -279,6 +283,30 @@ async fn run() -> Result<(), ContextualError> { .map_err(|e| ContextualError::IoError("".to_owned(), e)) } +fn configure_header(conf: &MiniserveConfig) -> middleware::DefaultHeaders { + let mut headers = [httparse::EMPTY_HEADER; 16]; + + match conf.clone().header { + Some(mut header) => { + // parse_headers need header newline ends + header.push('\n'); + httparse::parse_headers(header.as_bytes(), &mut headers).expect("Bad header"); + + let mut header_middleware = middleware::DefaultHeaders::new(); + + for h in headers.iter() { + if h.name != httparse::EMPTY_HEADER.name { + println!("h={:?}", h); + header_middleware = header_middleware.header(h.name, h.value); + } + } + + header_middleware + } + None => middleware::DefaultHeaders::new(), + } +} + /// Configures the Actix application fn configure_app(app: &mut web::ServiceConfig, conf: &MiniserveConfig) { let random_route = conf.random_route.clone().unwrap_or_default(); -- cgit v1.2.3 From 7b4402238a19f187321a68088e6542d8d5fa8572 Mon Sep 17 00:00:00 2001 From: Dean Li Date: Mon, 22 Feb 2021 12:11:11 +0800 Subject: Move the parsing header logic to args.rs --- src/main.rs | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 149381f..0dd692e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ use actix_web::{ }; use actix_web::{middleware, App, HttpRequest, HttpResponse}; use actix_web_httpauth::middleware::HttpAuthentication; +use args::Header; use std::io::{self, Write}; use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::thread; @@ -90,7 +91,7 @@ pub struct MiniserveConfig { pub title: Option, /// If specified, header will be added - pub header: Option, + pub header: Option
, } fn main() { @@ -284,26 +285,13 @@ async fn run() -> Result<(), ContextualError> { } fn configure_header(conf: &MiniserveConfig) -> middleware::DefaultHeaders { - let mut headers = [httparse::EMPTY_HEADER; 16]; + let header = conf.clone().header; - match conf.clone().header { - Some(mut header) => { - // parse_headers need header newline ends - header.push('\n'); - httparse::parse_headers(header.as_bytes(), &mut headers).expect("Bad header"); - - let mut header_middleware = middleware::DefaultHeaders::new(); - - for h in headers.iter() { - if h.name != httparse::EMPTY_HEADER.name { - println!("h={:?}", h); - header_middleware = header_middleware.header(h.name, h.value); - } - } - - header_middleware + match header { + Some(header) if header.name != httparse::EMPTY_HEADER.name => { + middleware::DefaultHeaders::new().header(&header.name, header.value) } - None => middleware::DefaultHeaders::new(), + _ => middleware::DefaultHeaders::new(), } } -- cgit v1.2.3 From 956ce204b4bda191c441fe5c4d385baa92c82b3e Mon Sep 17 00:00:00 2001 From: Dean Li Date: Mon, 22 Feb 2021 14:11:18 +0800 Subject: Multiple headers support for custom headers --- src/main.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 0dd692e..44298d7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,7 @@ use actix_web::{ }; use actix_web::{middleware, App, HttpRequest, HttpResponse}; use actix_web_httpauth::middleware::HttpAuthentication; -use args::Header; +use http::header::HeaderMap; use std::io::{self, Write}; use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::thread; @@ -91,7 +91,7 @@ pub struct MiniserveConfig { pub title: Option, /// If specified, header will be added - pub header: Option
, + pub header: Option, } fn main() { @@ -285,11 +285,17 @@ async fn run() -> Result<(), ContextualError> { } fn configure_header(conf: &MiniserveConfig) -> middleware::DefaultHeaders { - let header = conf.clone().header; - - match header { - Some(header) if header.name != httparse::EMPTY_HEADER.name => { - middleware::DefaultHeaders::new().header(&header.name, header.value) + let headers = conf.clone().header; + + match headers { + Some(headers) => { + let mut default_headers = middleware::DefaultHeaders::new(); + for (header_name, header_value) in headers.into_iter() { + if let Some(header_name) = header_name { + default_headers = default_headers.header(&header_name, header_value); + } + } + default_headers } _ => middleware::DefaultHeaders::new(), } -- cgit v1.2.3