diff --git a/src/agent.rs b/src/agent.rs index c4f5a63..c77cf53 100644 --- a/src/agent.rs +++ b/src/agent.rs @@ -1,7 +1,7 @@ use std::str::FromStr; use std::sync::Mutex; -use header::Header; +use header::{Header, add_header}; use util::*; // to get to share private fields @@ -12,7 +12,6 @@ include!("conn.rs"); #[derive(Debug, Default, Clone)] pub struct Agent { pub headers: Vec
, - pub auth: Option<(String, String)>, pub pool: Arc>>, } @@ -27,7 +26,6 @@ impl Agent { pub fn build(&self) -> Self { Agent { headers: self.headers.clone(), - auth: self.auth.clone(), pool: Arc::new(Mutex::new(Some(ConnectionPool::new()))), } } @@ -134,7 +132,9 @@ impl Agent { S: Into, T: Into, { - self.auth = Some((kind.into(), pass.into())); + let s = format!("Authorization: {} {}", kind.into(), pass.into()); + let header = s.parse::
().expect("Failed to parse header"); + add_header(header, &mut self.headers); self } @@ -212,12 +212,6 @@ impl Agent { } } -fn add_agent_header(agent: &mut Agent, k: String, v: String) { - if let Ok(h) = Header::from_str(&format!("{}: {}", k, v)) { - agent.headers.push(h); - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/src/request.rs b/src/request.rs index 774829e..0232bad 100644 --- a/src/request.rs +++ b/src/request.rs @@ -16,7 +16,6 @@ pub struct Request { // from request itself headers: Vec
, - auth: Option<(String, String)>, query: QString, timeout: u32, timeout_read: u32, @@ -62,7 +61,6 @@ impl Request { method, path, headers: agent.headers.clone(), - auth: agent.auth.clone(), redirects: 5, ..Default::default() } @@ -454,7 +452,9 @@ impl Request { S: Into, T: Into, { - self.auth = Some((kind.into(), pass.into())); + let s = format!("Authorization: {} {}", kind.into(), pass.into()); + let header = s.parse::
().expect("Failed to parse header"); + add_header(header, &mut self.headers); self } @@ -505,9 +505,3 @@ impl Request { .map_err(|e| Error::BadUrl(format!("{}", e))) } } - -fn add_request_header(request: &mut Request, k: String, v: String) { - if let Ok(h) = Header::from_str(&format!("{}: {}", k, v)) { - request.headers.push(h) - } -} diff --git a/src/test/auth.rs b/src/test/auth.rs new file mode 100644 index 0000000..54d66e1 --- /dev/null +++ b/src/test/auth.rs @@ -0,0 +1,27 @@ +use test; + +use super::super::*; + +#[test] +fn basic_auth() { + test::set_handler("/basic_auth", |req, _url| { + assert_eq!(req.get("Authorization").unwrap(), "Basic bWFydGluOnJ1YmJlcm1hc2hndW0="); + test::make_stream(200, "OK", vec![], vec![]) + }); + let resp = get("test://host/basic_auth") + .auth("martin", "rubbermashgum") + .call(); + assert_eq!(*resp.status(), 200); +} + +#[test] +fn kind_auth() { + test::set_handler("/kind_auth", |req, _url| { + assert_eq!(req.get("Authorization").unwrap(), "Digest abcdefgh123"); + test::make_stream(200, "OK", vec![], vec![]) + }); + let resp = get("test://host/kind_auth") + .auth_kind("Digest", "abcdefgh123") + .call(); + assert_eq!(*resp.status(), 200); +} diff --git a/src/test/mod.rs b/src/test/mod.rs index 1c0f425..40142a9 100644 --- a/src/test/mod.rs +++ b/src/test/mod.rs @@ -8,6 +8,7 @@ use stream::Stream; use url::Url; use util::vecread::VecRead; +mod auth; mod simple; mod body_read;