auth headers
This commit is contained in:
14
src/agent.rs
14
src/agent.rs
@@ -1,7 +1,7 @@
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
|
||||||
use header::Header;
|
use header::{Header, add_header};
|
||||||
use util::*;
|
use util::*;
|
||||||
|
|
||||||
// to get to share private fields
|
// to get to share private fields
|
||||||
@@ -12,7 +12,6 @@ include!("conn.rs");
|
|||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct Agent {
|
pub struct Agent {
|
||||||
pub headers: Vec<Header>,
|
pub headers: Vec<Header>,
|
||||||
pub auth: Option<(String, String)>,
|
|
||||||
pub pool: Arc<Mutex<Option<ConnectionPool>>>,
|
pub pool: Arc<Mutex<Option<ConnectionPool>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,7 +26,6 @@ impl Agent {
|
|||||||
pub fn build(&self) -> Self {
|
pub fn build(&self) -> Self {
|
||||||
Agent {
|
Agent {
|
||||||
headers: self.headers.clone(),
|
headers: self.headers.clone(),
|
||||||
auth: self.auth.clone(),
|
|
||||||
pool: Arc::new(Mutex::new(Some(ConnectionPool::new()))),
|
pool: Arc::new(Mutex::new(Some(ConnectionPool::new()))),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,7 +132,9 @@ impl Agent {
|
|||||||
S: Into<String>,
|
S: Into<String>,
|
||||||
T: Into<String>,
|
T: Into<String>,
|
||||||
{
|
{
|
||||||
self.auth = Some((kind.into(), pass.into()));
|
let s = format!("Authorization: {} {}", kind.into(), pass.into());
|
||||||
|
let header = s.parse::<Header>().expect("Failed to parse header");
|
||||||
|
add_header(header, &mut self.headers);
|
||||||
self
|
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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ pub struct Request {
|
|||||||
|
|
||||||
// from request itself
|
// from request itself
|
||||||
headers: Vec<Header>,
|
headers: Vec<Header>,
|
||||||
auth: Option<(String, String)>,
|
|
||||||
query: QString,
|
query: QString,
|
||||||
timeout: u32,
|
timeout: u32,
|
||||||
timeout_read: u32,
|
timeout_read: u32,
|
||||||
@@ -62,7 +61,6 @@ impl Request {
|
|||||||
method,
|
method,
|
||||||
path,
|
path,
|
||||||
headers: agent.headers.clone(),
|
headers: agent.headers.clone(),
|
||||||
auth: agent.auth.clone(),
|
|
||||||
redirects: 5,
|
redirects: 5,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
@@ -454,7 +452,9 @@ impl Request {
|
|||||||
S: Into<String>,
|
S: Into<String>,
|
||||||
T: Into<String>,
|
T: Into<String>,
|
||||||
{
|
{
|
||||||
self.auth = Some((kind.into(), pass.into()));
|
let s = format!("Authorization: {} {}", kind.into(), pass.into());
|
||||||
|
let header = s.parse::<Header>().expect("Failed to parse header");
|
||||||
|
add_header(header, &mut self.headers);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,9 +505,3 @@ impl Request {
|
|||||||
.map_err(|e| Error::BadUrl(format!("{}", e)))
|
.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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
27
src/test/auth.rs
Normal file
27
src/test/auth.rs
Normal file
@@ -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);
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ use stream::Stream;
|
|||||||
use url::Url;
|
use url::Url;
|
||||||
use util::vecread::VecRead;
|
use util::vecread::VecRead;
|
||||||
|
|
||||||
|
mod auth;
|
||||||
mod simple;
|
mod simple;
|
||||||
mod body_read;
|
mod body_read;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user