1
0
mirror of https://github.com/fafhrd91/actix-web synced 2025-06-25 06:39:22 +02:00

use iota for more content-length insertions (#2050)

This commit is contained in:
Rob Ede
2021-03-07 19:29:02 +00:00
committed by GitHub
parent 880b863f95
commit ca69b6577e
8 changed files with 49 additions and 45 deletions

View File

@ -8,6 +8,7 @@
### Changed
* Feature `cookies` is now optional and enabled by default. [#1981]
* `ClientBuilder::connector` method would take `actix_http::client::Connector<T, U>` type. [#2008]
* Basic auth password now takes blank passwords as an empty string instead of Option. [#2050]
### Removed
* `ClientBuilder::default` function [#2008]
@ -17,6 +18,8 @@
[#1981]: https://github.com/actix/actix-web/pull/1981
[#2008]: https://github.com/actix/actix-web/pull/2008
[#2024]: https://github.com/actix/actix-web/pull/2024
[#2050]: https://github.com/actix/actix-web/pull/2050
## 3.0.0-beta.2 - 2021-02-10
### Added

View File

@ -54,6 +54,7 @@ bytes = "1"
cfg-if = "1.0"
derive_more = "0.99.5"
futures-core = { version = "0.3.7", default-features = false }
itoa = "0.4"
log =" 0.4"
mime = "0.3"
percent-encoding = "2.1"
@ -80,8 +81,8 @@ actix-server = "2.0.0-beta.3"
actix-tls = { version = "3.0.0-beta.4", features = ["openssl", "rustls"] }
brotli2 = "0.3.2"
env_logger = "0.8"
flate2 = "1.0.13"
futures-util = { version = "0.3.7", default-features = false }
env_logger = "0.8"
rcgen = "0.8"
webpki = "0.21"

View File

@ -248,30 +248,25 @@ impl ClientRequest {
/// Set content length
#[inline]
pub fn content_length(self, len: u64) -> Self {
self.append_header((header::CONTENT_LENGTH, len))
let mut buf = itoa::Buffer::new();
self.insert_header((header::CONTENT_LENGTH, buf.format(len)))
}
/// Set HTTP basic authorization header
pub fn basic_auth<U>(self, username: U, password: Option<&str>) -> Self
where
U: fmt::Display,
{
let auth = match password {
Some(password) => format!("{}:{}", username, password),
None => format!("{}:", username),
};
self.append_header((
/// Set HTTP basic authorization header.
///
/// If no password is needed, just provide an empty string.
pub fn basic_auth(self, username: impl fmt::Display, password: impl fmt::Display) -> Self {
let auth = format!("{}:{}", username, password);
self.insert_header((
header::AUTHORIZATION,
format!("Basic {}", base64::encode(&auth)),
))
}
/// Set HTTP bearer authentication header
pub fn bearer_auth<T>(self, token: T) -> Self
where
T: fmt::Display,
{
self.append_header((header::AUTHORIZATION, format!("Bearer {}", token)))
pub fn bearer_auth(self, token: impl fmt::Display) -> Self {
self.insert_header((header::AUTHORIZATION, format!("Bearer {}", token)))
}
/// Set a cookie
@ -643,9 +638,7 @@ mod tests {
#[actix_rt::test]
async fn client_basic_auth() {
let req = Client::new()
.get("/")
.basic_auth("username", Some("password"));
let req = Client::new().get("/").basic_auth("username", "password");
assert_eq!(
req.head
.headers
@ -656,7 +649,7 @@ mod tests {
"Basic dXNlcm5hbWU6cGFzc3dvcmQ="
);
let req = Client::new().get("/").basic_auth("username", None);
let req = Client::new().get("/").basic_auth("username", "");
assert_eq!(
req.head
.headers

View File

@ -829,7 +829,7 @@ async fn client_basic_auth() {
.unwrap()
.to_str()
.unwrap()
== "Basic dXNlcm5hbWU6cGFzc3dvcmQ="
== format!("Basic {}", base64::encode("username:password"))
{
HttpResponse::Ok()
} else {
@ -840,7 +840,7 @@ async fn client_basic_auth() {
});
// set authorization header to Basic <base64 encoded username:password>
let request = srv.get("/").basic_auth("username", Some("password"));
let request = srv.get("/").basic_auth("username", "password");
let response = request.send().await.unwrap();
assert!(response.status().is_success());
}