diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2021-12-21 13:40:22 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-21 13:40:22 +1100 |
commit | b5fdfb9d25a636725d3aeae055bd1e740f6ec1d6 (patch) | |
tree | 756f972e25e272af64991506f5bdc1803cee754c /cli/http_util.rs | |
parent | 1eb78731eb57b1d0eb7c0ece97b2018c1724989e (diff) |
feat(lsp): supply accept header when fetching registry config (#13159)
Closes #13153
Diffstat (limited to 'cli/http_util.rs')
-rw-r--r-- | cli/http_util.rs | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/cli/http_util.rs b/cli/http_util.rs index 562cd06f2..78a22d3e5 100644 --- a/cli/http_util.rs +++ b/cli/http_util.rs @@ -9,6 +9,7 @@ use deno_core::error::generic_error; use deno_core::error::AnyError; use deno_core::url::Url; use deno_runtime::deno_fetch::reqwest::header::HeaderValue; +use deno_runtime::deno_fetch::reqwest::header::ACCEPT; use deno_runtime::deno_fetch::reqwest::header::AUTHORIZATION; use deno_runtime::deno_fetch::reqwest::header::IF_NONE_MATCH; use deno_runtime::deno_fetch::reqwest::header::LOCATION; @@ -209,6 +210,7 @@ pub enum FetchOnceResult { pub struct FetchOnceArgs { pub client: Client, pub url: Url, + pub maybe_accept: Option<String>, pub maybe_etag: Option<String>, pub maybe_auth_token: Option<AuthToken>, } @@ -224,14 +226,17 @@ pub async fn fetch_once( let mut request = args.client.get(args.url.clone()); if let Some(etag) = args.maybe_etag { - let if_none_match_val = HeaderValue::from_str(&etag).unwrap(); + let if_none_match_val = HeaderValue::from_str(&etag)?; request = request.header(IF_NONE_MATCH, if_none_match_val); } if let Some(auth_token) = args.maybe_auth_token { - let authorization_val = - HeaderValue::from_str(&auth_token.to_string()).unwrap(); + let authorization_val = HeaderValue::from_str(&auth_token.to_string())?; request = request.header(AUTHORIZATION, authorization_val); } + if let Some(accept) = args.maybe_accept { + let accepts_val = HeaderValue::from_str(&accept)?; + request = request.header(ACCEPT, accepts_val); + } let response = request.send().await?; if response.status() == StatusCode::NOT_MODIFIED { @@ -324,6 +329,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -348,6 +354,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -373,6 +380,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client: client.clone(), url: url.clone(), + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -392,6 +400,7 @@ mod tests { let res = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: Some("33a64df551425fcc55e".to_string()), maybe_auth_token: None, }) @@ -409,6 +418,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -428,6 +438,27 @@ mod tests { } #[tokio::test] + async fn test_fetch_accept() { + let _http_server_guard = test_util::http_server(); + // Relies on external http server. See target/debug/test_server + let url = Url::parse("http://127.0.0.1:4545/echo_accept").unwrap(); + let client = create_test_client(); + let result = fetch_once(FetchOnceArgs { + client, + url, + maybe_accept: Some("application/json".to_string()), + maybe_etag: None, + maybe_auth_token: None, + }) + .await; + if let Ok(FetchOnceResult::Code(body, _)) = result { + assert_eq!(body, r#"{"accept":"application/json"}"#.as_bytes()); + } else { + panic!(); + } + } + + #[tokio::test] async fn test_fetch_once_with_redirect() { let _http_server_guard = test_util::http_server(); // Relies on external http server. See target/debug/test_server @@ -438,6 +469,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -511,6 +543,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -543,6 +576,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -578,6 +612,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -614,6 +649,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -653,6 +689,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client: client.clone(), url: url.clone(), + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -673,6 +710,7 @@ mod tests { let res = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: Some("33a64df551425fcc55e".to_string()), maybe_auth_token: None, }) @@ -705,6 +743,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) @@ -732,6 +771,7 @@ mod tests { let result = fetch_once(FetchOnceArgs { client, url, + maybe_accept: None, maybe_etag: None, maybe_auth_token: None, }) |