Reimplemented RequestBuilder::basic_auth to use Base64Encoder (#713)

This commit is contained in:
Nathan West
2019-11-19 10:45:14 -08:00
committed by Sean McArthur
parent 960e33cd48
commit 3a24cc1d4b

View File

@@ -1,7 +1,10 @@
use std::fmt;
use std::future::Future;
use std::io::Write;
use base64::encode;
use base64;
use base64::write::EncoderWriter as Base64Encoder;
use bytes::Bytes;
use serde::Serialize;
#[cfg(feature = "json")]
use serde_json;
@@ -153,12 +156,17 @@ impl RequestBuilder {
U: fmt::Display,
P: fmt::Display,
{
let auth = match password {
Some(password) => format!("{}:{}", username, password),
None => format!("{}:", username),
};
let header_value = format!("Basic {}", encode(&auth));
self.header(crate::header::AUTHORIZATION, &*header_value)
let mut header_value = b"Basic ".to_vec();
{
let mut encoder = Base64Encoder::new(&mut header_value, base64::STANDARD);
// The unwraps here are fine because Vec::write* is infallible.
write!(encoder, "{}:", username).unwrap();
if let Some(password) = password {
write!(encoder, "{}", password).unwrap();
}
}
self.header(crate::header::AUTHORIZATION, Bytes::from(header_value))
}
/// Enable HTTP bearer authentication.
@@ -167,7 +175,7 @@ impl RequestBuilder {
T: fmt::Display,
{
let header_value = format!("Bearer {}", token);
self.header(crate::header::AUTHORIZATION, &*header_value)
self.header(crate::header::AUTHORIZATION, header_value)
}
/// Set the request body.