Skip to content

Commit

Permalink
Fix rewrite of User-Agent header (#9707)
Browse files Browse the repository at this point in the history
* Fix rewrite of User-Agent header

* add test

* add axym to dev deps

* format

* format

* format

* cleanup

* cleanup

* review fixes

* use localhost address
  • Loading branch information
vbrvk authored Jan 20, 2025
1 parent a038646 commit 90a5fdf
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 1 deletion.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions crates/common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,4 @@ terminal_size.workspace = true
foundry-macros.workspace = true
similar-asserts.workspace = true
tokio = { workspace = true, features = ["rt-multi-thread", "macros"] }
axum = { workspace = true }
41 changes: 40 additions & 1 deletion crates/common/src/provider/runtime_transport.rs
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ impl RuntimeTransport {
);
}

if !headers.iter().any(|(k, _v)| k.as_str().starts_with("User-Agent:")) {
if !headers.contains_key(reqwest::header::USER_AGENT) {
headers.insert(
reqwest::header::USER_AGENT,
HeaderValue::from_str(DEFAULT_USER_AGENT)
Expand Down Expand Up @@ -332,3 +332,42 @@ fn url_to_file_path(url: &Url) -> Result<PathBuf, ()> {
fn url_to_file_path(url: &Url) -> Result<PathBuf, ()> {
url.to_file_path()
}

#[cfg(test)]
mod tests {
use super::*;
use reqwest::header::HeaderMap;

#[tokio::test]
async fn test_user_agent_header() {
let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap();
let url = Url::parse(&format!("http://{}", listener.local_addr().unwrap())).unwrap();

let http_handler = axum::routing::get(|actual_headers: HeaderMap| {
let user_agent = HeaderName::from_str("User-Agent").unwrap();
assert_eq!(actual_headers[user_agent], HeaderValue::from_str("test-agent").unwrap());

async { "" }
});

let server_task = tokio::spawn(async move {
axum::serve(listener, http_handler.into_make_service()).await.unwrap()
});

let transport = RuntimeTransportBuilder::new(url.clone())
.with_headers(vec!["User-Agent: test-agent".to_string()])
.build();
let inner = transport.connect_http().await.unwrap();

match inner {
InnerTransport::Http(http) => {
let _ = http.client().get(url).send().await.unwrap();

// assert inside http_handler
}
_ => unreachable!(),
}

server_task.abort();
}
}

0 comments on commit 90a5fdf

Please sign in to comment.