chore: Extract http-client-tls crate (#26895)
http-client pulled in rustls which in turn meant that gpui depended on rustls/aws-lc-sys. This commit extracts http-client-tls crate to separate the http-client and tls dependencies. Closes #ISSUE Release Notes: - N/A
This commit is contained in:
parent
d5bb12631a
commit
8f560daec2
11 changed files with 59 additions and 26 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
@ -2739,6 +2739,7 @@ dependencies = [
|
||||||
"futures 0.3.31",
|
"futures 0.3.31",
|
||||||
"gpui",
|
"gpui",
|
||||||
"http_client",
|
"http_client",
|
||||||
|
"http_client_tls",
|
||||||
"log",
|
"log",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"paths",
|
"paths",
|
||||||
|
@ -6201,13 +6202,19 @@ dependencies = [
|
||||||
"futures 0.3.31",
|
"futures 0.3.31",
|
||||||
"http 1.2.0",
|
"http 1.2.0",
|
||||||
"log",
|
"log",
|
||||||
"rustls 0.23.23",
|
|
||||||
"rustls-platform-verifier",
|
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"url",
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http_client_tls"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"rustls 0.23.23",
|
||||||
|
"rustls-platform-verifier",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httparse"
|
name = "httparse"
|
||||||
version = "1.9.5"
|
version = "1.9.5"
|
||||||
|
@ -11460,6 +11467,7 @@ dependencies = [
|
||||||
"futures 0.3.31",
|
"futures 0.3.31",
|
||||||
"gpui",
|
"gpui",
|
||||||
"http_client",
|
"http_client",
|
||||||
|
"http_client_tls",
|
||||||
"log",
|
"log",
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest 0.12.8",
|
"reqwest 0.12.8",
|
||||||
|
|
|
@ -65,6 +65,7 @@ members = [
|
||||||
"crates/gpui_tokio",
|
"crates/gpui_tokio",
|
||||||
"crates/html_to_markdown",
|
"crates/html_to_markdown",
|
||||||
"crates/http_client",
|
"crates/http_client",
|
||||||
|
"crates/http_client_tls",
|
||||||
"crates/image_viewer",
|
"crates/image_viewer",
|
||||||
"crates/indexed_docs",
|
"crates/indexed_docs",
|
||||||
"crates/inline_completion",
|
"crates/inline_completion",
|
||||||
|
@ -262,6 +263,7 @@ gpui_macros = { path = "crates/gpui_macros" }
|
||||||
gpui_tokio = { path = "crates/gpui_tokio" }
|
gpui_tokio = { path = "crates/gpui_tokio" }
|
||||||
html_to_markdown = { path = "crates/html_to_markdown" }
|
html_to_markdown = { path = "crates/html_to_markdown" }
|
||||||
http_client = { path = "crates/http_client" }
|
http_client = { path = "crates/http_client" }
|
||||||
|
http_client_tls = { path = "crates/http_client_tls" }
|
||||||
image_viewer = { path = "crates/image_viewer" }
|
image_viewer = { path = "crates/image_viewer" }
|
||||||
indexed_docs = { path = "crates/indexed_docs" }
|
indexed_docs = { path = "crates/indexed_docs" }
|
||||||
inline_completion = { path = "crates/inline_completion" }
|
inline_completion = { path = "crates/inline_completion" }
|
||||||
|
|
|
@ -27,6 +27,7 @@ feature_flags.workspace = true
|
||||||
futures.workspace = true
|
futures.workspace = true
|
||||||
gpui.workspace = true
|
gpui.workspace = true
|
||||||
http_client.workspace = true
|
http_client.workspace = true
|
||||||
|
http_client_tls.workspace = true
|
||||||
log.workspace = true
|
log.workspace = true
|
||||||
paths.workspace = true
|
paths.workspace = true
|
||||||
parking_lot.workspace = true
|
parking_lot.workspace = true
|
||||||
|
|
|
@ -1154,7 +1154,7 @@ impl Client {
|
||||||
async_tungstenite::async_tls::client_async_tls_with_connector(
|
async_tungstenite::async_tls::client_async_tls_with_connector(
|
||||||
request,
|
request,
|
||||||
stream,
|
stream,
|
||||||
Some(http_client::tls_config().into()),
|
Some(http_client_tls::tls_config().into()),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(Connection::new(
|
Ok(Connection::new(
|
||||||
|
|
|
@ -25,5 +25,3 @@ log.workspace = true
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
serde_json.workspace = true
|
serde_json.workspace = true
|
||||||
url.workspace = true
|
url.workspace = true
|
||||||
rustls.workspace = true
|
|
||||||
rustls-platform-verifier.workspace = true
|
|
||||||
|
|
|
@ -8,33 +8,14 @@ pub use http::{self, Method, Request, Response, StatusCode, Uri};
|
||||||
|
|
||||||
use futures::future::BoxFuture;
|
use futures::future::BoxFuture;
|
||||||
use http::request::Builder;
|
use http::request::Builder;
|
||||||
use rustls::ClientConfig;
|
|
||||||
use rustls_platform_verifier::ConfigVerifierExt;
|
|
||||||
#[cfg(feature = "test-support")]
|
#[cfg(feature = "test-support")]
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::{
|
use std::{
|
||||||
any::type_name,
|
any::type_name,
|
||||||
sync::{Arc, Mutex, OnceLock},
|
sync::{Arc, Mutex},
|
||||||
};
|
};
|
||||||
pub use url::Url;
|
pub use url::Url;
|
||||||
|
|
||||||
static TLS_CONFIG: OnceLock<rustls::ClientConfig> = OnceLock::new();
|
|
||||||
|
|
||||||
pub fn tls_config() -> ClientConfig {
|
|
||||||
TLS_CONFIG
|
|
||||||
.get_or_init(|| {
|
|
||||||
// rustls uses the `aws_lc_rs` provider by default
|
|
||||||
// This only errors if the default provider has already
|
|
||||||
// been installed. We can ignore this `Result`.
|
|
||||||
rustls::crypto::aws_lc_rs::default_provider()
|
|
||||||
.install_default()
|
|
||||||
.ok();
|
|
||||||
|
|
||||||
ClientConfig::with_platform_verifier()
|
|
||||||
})
|
|
||||||
.clone()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Default, Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Default, Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub enum RedirectPolicy {
|
pub enum RedirectPolicy {
|
||||||
#[default]
|
#[default]
|
||||||
|
|
20
crates/http_client_tls/Cargo.toml
Normal file
20
crates/http_client_tls/Cargo.toml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[package]
|
||||||
|
name = "http_client_tls"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition.workspace = true
|
||||||
|
publish.workspace = true
|
||||||
|
license = "Apache-2.0"
|
||||||
|
|
||||||
|
[lints]
|
||||||
|
workspace = true
|
||||||
|
|
||||||
|
[features]
|
||||||
|
test-support = []
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
path = "src/http_client_tls.rs"
|
||||||
|
doctest = true
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
rustls.workspace = true
|
||||||
|
rustls-platform-verifier.workspace = true
|
1
crates/http_client_tls/LICENSE-APACHE
Symbolic link
1
crates/http_client_tls/LICENSE-APACHE
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../../LICENSE-APACHE
|
21
crates/http_client_tls/src/http_client_tls.rs
Normal file
21
crates/http_client_tls/src/http_client_tls.rs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
use std::sync::OnceLock;
|
||||||
|
|
||||||
|
use rustls::ClientConfig;
|
||||||
|
use rustls_platform_verifier::ConfigVerifierExt;
|
||||||
|
|
||||||
|
static TLS_CONFIG: OnceLock<rustls::ClientConfig> = OnceLock::new();
|
||||||
|
|
||||||
|
pub fn tls_config() -> ClientConfig {
|
||||||
|
TLS_CONFIG
|
||||||
|
.get_or_init(|| {
|
||||||
|
// rustls uses the `aws_lc_rs` provider by default
|
||||||
|
// This only errors if the default provider has already
|
||||||
|
// been installed. We can ignore this `Result`.
|
||||||
|
rustls::crypto::aws_lc_rs::default_provider()
|
||||||
|
.install_default()
|
||||||
|
.ok();
|
||||||
|
|
||||||
|
ClientConfig::with_platform_verifier()
|
||||||
|
})
|
||||||
|
.clone()
|
||||||
|
}
|
|
@ -24,6 +24,7 @@ anyhow.workspace = true
|
||||||
bytes.workspace = true
|
bytes.workspace = true
|
||||||
futures.workspace = true
|
futures.workspace = true
|
||||||
http_client.workspace = true
|
http_client.workspace = true
|
||||||
|
http_client_tls.workspace = true
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
smol.workspace = true
|
smol.workspace = true
|
||||||
log.workspace = true
|
log.workspace = true
|
||||||
|
|
|
@ -56,7 +56,7 @@ impl ReqwestClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
let client = client
|
let client = client
|
||||||
.use_preconfigured_tls(http_client::tls_config())
|
.use_preconfigured_tls(http_client_tls::tls_config())
|
||||||
.build()?;
|
.build()?;
|
||||||
let mut client: ReqwestClient = client.into();
|
let mut client: ReqwestClient = client.into();
|
||||||
client.proxy = proxy;
|
client.proxy = proxy;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue