wreq-rb 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Cargo.lock +1922 -397
- data/LICENSE +203 -0
- data/README.md +19 -15
- data/ext/wreq_rb/Cargo.toml +4 -6
- data/ext/wreq_rb/src/client.rs +41 -48
- data/lib/wreq-rb/version.rb +1 -1
- data/patches/0001-add-transfer-size-tracking.patch +76 -67
- data/vendor/wreq/Cargo.toml +119 -71
- data/vendor/wreq/README.md +25 -20
- data/vendor/wreq/bench/http1.rs +25 -0
- data/vendor/wreq/bench/http1_over_tls.rs +25 -0
- data/vendor/wreq/bench/http2.rs +25 -0
- data/vendor/wreq/bench/http2_over_tls.rs +25 -0
- data/vendor/wreq/bench/support/bench.rs +91 -0
- data/vendor/wreq/bench/support/client.rs +217 -0
- data/vendor/wreq/bench/support/server.rs +188 -0
- data/vendor/wreq/bench/support.rs +56 -0
- data/vendor/wreq/examples/cert_store.rs +4 -4
- data/vendor/wreq/examples/{emulation.rs → emulate.rs} +2 -2
- data/vendor/wreq/examples/http2_websocket.rs +2 -2
- data/vendor/wreq/examples/keylog.rs +3 -3
- data/vendor/wreq/examples/{request_with_emulation.rs → request_with_emulate.rs} +2 -2
- data/vendor/wreq/examples/rt.rs +23 -0
- data/vendor/wreq/src/client/body.rs +23 -61
- data/vendor/wreq/src/client/emulate.rs +119 -0
- data/vendor/wreq/src/client/{http/future.rs → future.rs} +11 -32
- data/vendor/wreq/src/client/{http → layer}/client/pool.rs +66 -61
- data/vendor/wreq/src/client/{http → layer}/client.rs +416 -270
- data/vendor/wreq/src/client/layer/config.rs +27 -6
- data/vendor/wreq/src/client/layer/decoder.rs +9 -4
- data/vendor/wreq/src/client/layer/redirect/future.rs +6 -3
- data/vendor/wreq/src/client/layer/redirect.rs +4 -5
- data/vendor/wreq/src/client/layer/retry.rs +8 -5
- data/vendor/wreq/src/client/layer/timeout/body.rs +15 -6
- data/vendor/wreq/src/client/layer/timeout/future.rs +23 -18
- data/vendor/wreq/src/client/layer/timeout.rs +24 -74
- data/vendor/wreq/src/client/layer.rs +1 -2
- data/vendor/wreq/src/client/multipart.rs +137 -154
- data/vendor/wreq/src/client/request.rs +202 -118
- data/vendor/wreq/src/client/response.rs +46 -45
- data/vendor/wreq/src/client/upgrade.rs +15 -0
- data/vendor/wreq/src/client/ws.rs +73 -25
- data/vendor/wreq/src/client.rs +1655 -17
- data/vendor/wreq/src/config.rs +11 -11
- data/vendor/wreq/src/{client/conn → conn}/connector.rs +139 -137
- data/vendor/wreq/src/conn/descriptor.rs +143 -0
- data/vendor/wreq/src/conn/http.rs +484 -0
- data/vendor/wreq/src/conn/net/io.rs +75 -0
- data/vendor/wreq/src/conn/net/tcp/compio.rs +71 -0
- data/vendor/wreq/src/conn/net/tcp/tokio.rs +57 -0
- data/vendor/wreq/src/conn/net/tcp.rs +561 -0
- data/vendor/wreq/src/conn/net/uds/compio.rs +60 -0
- data/vendor/wreq/src/{client/conn/uds.rs → conn/net/uds/tokio.rs} +18 -12
- data/vendor/wreq/src/conn/net/uds.rs +11 -0
- data/vendor/wreq/src/conn/net.rs +130 -0
- data/vendor/wreq/src/{client/conn → conn}/proxy/socks.rs +2 -9
- data/vendor/wreq/src/{client/conn → conn}/proxy/tunnel.rs +21 -56
- data/vendor/wreq/src/conn/tls_info.rs +47 -0
- data/vendor/wreq/src/{client/conn.rs → conn.rs} +202 -54
- data/vendor/wreq/src/cookie.rs +302 -142
- data/vendor/wreq/src/dns/gai/compio.rs +77 -0
- data/vendor/wreq/src/dns/gai/tokio.rs +90 -0
- data/vendor/wreq/src/dns/gai.rs +14 -164
- data/vendor/wreq/src/dns/hickory.rs +16 -23
- data/vendor/wreq/src/dns/resolve.rs +7 -41
- data/vendor/wreq/src/dns.rs +90 -7
- data/vendor/wreq/src/error.rs +57 -31
- data/vendor/wreq/src/ext.rs +25 -0
- data/vendor/wreq/src/group.rs +211 -0
- data/vendor/wreq/src/header.rs +100 -112
- data/vendor/wreq/src/lib.rs +124 -73
- data/vendor/wreq/src/proxy.rs +6 -20
- data/vendor/wreq/src/redirect.rs +1 -1
- data/vendor/wreq/src/rt.rs +208 -0
- data/vendor/wreq/src/sync.rs +97 -98
- data/vendor/wreq/src/tls/compress.rs +124 -0
- data/vendor/wreq/src/tls/conn/ext.rs +54 -45
- data/vendor/wreq/src/tls/conn/service.rs +14 -18
- data/vendor/wreq/src/tls/conn.rs +169 -241
- data/vendor/wreq/src/tls/keylog.rs +68 -5
- data/vendor/wreq/src/tls/session.rs +205 -0
- data/vendor/wreq/src/tls/{x509 → trust}/identity.rs +4 -21
- data/vendor/wreq/src/tls/{x509/parser.rs → trust/parse.rs} +1 -1
- data/vendor/wreq/src/tls/{x509 → trust}/store.rs +42 -81
- data/vendor/wreq/src/tls/{x509.rs → trust.rs} +8 -2
- data/vendor/wreq/src/tls.rs +489 -25
- data/vendor/wreq/src/trace.rs +0 -12
- data/vendor/wreq/src/util.rs +1 -1
- data/vendor/wreq/tests/badssl.rs +10 -10
- data/vendor/wreq/tests/client.rs +3 -9
- data/vendor/wreq/tests/cookie.rs +6 -8
- data/vendor/wreq/tests/{emulation.rs → emulate.rs} +130 -22
- data/vendor/wreq/tests/multipart.rs +43 -1
- data/vendor/wreq/tests/proxy.rs +1 -1
- data/vendor/wreq/tests/support/layer.rs +1 -0
- metadata +49 -71
- data/patches/0002-add-cancel-connections.patch +0 -181
- data/vendor/wreq/src/client/conn/conn.rs +0 -231
- data/vendor/wreq/src/client/conn/http.rs +0 -1023
- data/vendor/wreq/src/client/conn/tls_info.rs +0 -98
- data/vendor/wreq/src/client/core/body/incoming.rs +0 -485
- data/vendor/wreq/src/client/core/body/length.rs +0 -118
- data/vendor/wreq/src/client/core/body.rs +0 -34
- data/vendor/wreq/src/client/core/common/buf.rs +0 -149
- data/vendor/wreq/src/client/core/common/rewind.rs +0 -141
- data/vendor/wreq/src/client/core/common/watch.rs +0 -76
- data/vendor/wreq/src/client/core/common.rs +0 -3
- data/vendor/wreq/src/client/core/conn/http1.rs +0 -342
- data/vendor/wreq/src/client/core/conn/http2.rs +0 -307
- data/vendor/wreq/src/client/core/conn.rs +0 -11
- data/vendor/wreq/src/client/core/dispatch.rs +0 -299
- data/vendor/wreq/src/client/core/error.rs +0 -435
- data/vendor/wreq/src/client/core/ext.rs +0 -201
- data/vendor/wreq/src/client/core/http1.rs +0 -178
- data/vendor/wreq/src/client/core/http2.rs +0 -483
- data/vendor/wreq/src/client/core/proto/h1/conn.rs +0 -988
- data/vendor/wreq/src/client/core/proto/h1/decode.rs +0 -1170
- data/vendor/wreq/src/client/core/proto/h1/dispatch.rs +0 -684
- data/vendor/wreq/src/client/core/proto/h1/encode.rs +0 -580
- data/vendor/wreq/src/client/core/proto/h1/io.rs +0 -879
- data/vendor/wreq/src/client/core/proto/h1/role.rs +0 -694
- data/vendor/wreq/src/client/core/proto/h1.rs +0 -104
- data/vendor/wreq/src/client/core/proto/h2/client.rs +0 -650
- data/vendor/wreq/src/client/core/proto/h2/ping.rs +0 -539
- data/vendor/wreq/src/client/core/proto/h2.rs +0 -379
- data/vendor/wreq/src/client/core/proto/headers.rs +0 -138
- data/vendor/wreq/src/client/core/proto.rs +0 -58
- data/vendor/wreq/src/client/core/rt/bounds.rs +0 -57
- data/vendor/wreq/src/client/core/rt/timer.rs +0 -150
- data/vendor/wreq/src/client/core/rt/tokio.rs +0 -99
- data/vendor/wreq/src/client/core/rt.rs +0 -25
- data/vendor/wreq/src/client/core/upgrade.rs +0 -267
- data/vendor/wreq/src/client/core.rs +0 -16
- data/vendor/wreq/src/client/emulation.rs +0 -161
- data/vendor/wreq/src/client/http/client/error.rs +0 -142
- data/vendor/wreq/src/client/http/client/exec.rs +0 -29
- data/vendor/wreq/src/client/http/client/extra.rs +0 -77
- data/vendor/wreq/src/client/http/client/util.rs +0 -104
- data/vendor/wreq/src/client/http.rs +0 -1629
- data/vendor/wreq/src/client/layer/config/options.rs +0 -156
- data/vendor/wreq/src/client/layer/cookie.rs +0 -161
- data/vendor/wreq/src/hash.rs +0 -143
- data/vendor/wreq/src/tls/conn/cache.rs +0 -123
- data/vendor/wreq/src/tls/conn/cert_compression.rs +0 -125
- data/vendor/wreq/src/tls/keylog/handle.rs +0 -64
- data/vendor/wreq/src/tls/options.rs +0 -464
- /data/vendor/wreq/src/client/{http → layer}/client/lazy.rs +0 -0
- /data/vendor/wreq/src/{client/conn → conn}/proxy.rs +0 -0
- /data/vendor/wreq/src/{client/conn → conn}/verbose.rs +0 -0
|
@@ -1,82 +1,91 @@
|
|
|
1
|
-
use
|
|
1
|
+
use btls::ssl::{SslConnectorBuilder, SslVerifyMode};
|
|
2
2
|
|
|
3
3
|
use crate::{
|
|
4
4
|
Error,
|
|
5
5
|
tls::{
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
BrotliCertificateCompressor, ZlibCertificateCompressor, ZstdCertificateCompressor,
|
|
9
|
-
},
|
|
10
|
-
x509::CertStore,
|
|
6
|
+
compress::{self, CertificateCompressor},
|
|
7
|
+
trust::{CertStore, Identity},
|
|
11
8
|
},
|
|
12
9
|
};
|
|
13
10
|
|
|
14
11
|
/// SslConnectorBuilderExt trait for `SslConnectorBuilder`.
|
|
15
12
|
pub trait SslConnectorBuilderExt {
|
|
13
|
+
/// Configure the Identity for the given `SslConnectorBuilder`.
|
|
14
|
+
fn set_identity(self, identity: Option<&Identity>) -> crate::Result<SslConnectorBuilder>;
|
|
15
|
+
|
|
16
16
|
/// Configure the CertStore for the given `SslConnectorBuilder`.
|
|
17
17
|
fn set_cert_store(self, store: Option<&CertStore>) -> crate::Result<SslConnectorBuilder>;
|
|
18
18
|
|
|
19
19
|
/// Configure the certificate verification for the given `SslConnectorBuilder`.
|
|
20
|
-
fn set_cert_verification(self, enable: bool) ->
|
|
20
|
+
fn set_cert_verification(self, enable: bool) -> SslConnectorBuilder;
|
|
21
21
|
|
|
22
|
-
/// Configure the certificate
|
|
23
|
-
fn
|
|
22
|
+
/// Configure the certificate compressors for the given `SslConnectorBuilder`.
|
|
23
|
+
fn set_cert_compressors(
|
|
24
24
|
self,
|
|
25
|
-
|
|
25
|
+
compressors: Option<&[&'static dyn CertificateCompressor]>,
|
|
26
26
|
) -> crate::Result<SslConnectorBuilder>;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
impl SslConnectorBuilderExt for SslConnectorBuilder {
|
|
30
|
-
|
|
30
|
+
fn set_identity(mut self, identity: Option<&Identity>) -> crate::Result<SslConnectorBuilder> {
|
|
31
|
+
if let Some(identity) = identity {
|
|
32
|
+
self.set_certificate(&identity.cert).map_err(Error::tls)?;
|
|
33
|
+
self.set_private_key(&identity.pkey).map_err(Error::tls)?;
|
|
34
|
+
for cert in identity.chain.iter() {
|
|
35
|
+
// https://www.openssl.org/docs/manmaster/man3/SSL_CTX_add_extra_chain_cert.html
|
|
36
|
+
// specifies that "When sending a certificate chain, extra chain certificates are
|
|
37
|
+
// sent in order following the end entity certificate."
|
|
38
|
+
self.add_extra_chain_cert(cert.clone())
|
|
39
|
+
.map_err(Error::tls)?;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
Ok(self)
|
|
43
|
+
}
|
|
44
|
+
|
|
31
45
|
fn set_cert_store(mut self, store: Option<&CertStore>) -> crate::Result<SslConnectorBuilder> {
|
|
32
46
|
if let Some(store) = store {
|
|
33
|
-
|
|
47
|
+
self.set_cert_store_ref(&store.0)
|
|
34
48
|
} else {
|
|
35
|
-
|
|
49
|
+
#[cfg(feature = "webpki-roots")]
|
|
50
|
+
{
|
|
51
|
+
static LOAD_CERTS: std::sync::LazyLock<CertStore> =
|
|
52
|
+
std::sync::LazyLock::new(|| {
|
|
53
|
+
CertStore::from_der_certs(webpki_root_certs::TLS_SERVER_ROOT_CERTS)
|
|
54
|
+
.expect("Failed to load webpki root certificates")
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
self.set_cert_store_ref(&LOAD_CERTS.0);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#[cfg(not(feature = "webpki-roots"))]
|
|
61
|
+
{
|
|
62
|
+
self.set_default_verify_paths().map_err(Error::tls)?;
|
|
63
|
+
}
|
|
36
64
|
}
|
|
37
65
|
|
|
38
66
|
Ok(self)
|
|
39
67
|
}
|
|
40
68
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
self.set_verify(SslVerifyMode::PEER);
|
|
69
|
+
fn set_cert_verification(mut self, enable: bool) -> SslConnectorBuilder {
|
|
70
|
+
self.set_verify(if enable {
|
|
71
|
+
SslVerifyMode::PEER
|
|
45
72
|
} else {
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
73
|
+
SslVerifyMode::NONE
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
self
|
|
49
77
|
}
|
|
50
78
|
|
|
51
|
-
|
|
52
|
-
fn add_certificate_compression_algorithms(
|
|
79
|
+
fn set_cert_compressors(
|
|
53
80
|
mut self,
|
|
54
|
-
|
|
81
|
+
compressors: Option<&[&'static dyn CertificateCompressor]>,
|
|
55
82
|
) -> crate::Result<SslConnectorBuilder> {
|
|
56
|
-
if let Some(
|
|
57
|
-
for
|
|
58
|
-
|
|
59
|
-
match *algorithm {
|
|
60
|
-
CertificateCompressionAlgorithm::ZLIB => self
|
|
61
|
-
.add_certificate_compression_algorithm(
|
|
62
|
-
ZlibCertificateCompressor::default(),
|
|
63
|
-
),
|
|
64
|
-
CertificateCompressionAlgorithm::BROTLI => self
|
|
65
|
-
.add_certificate_compression_algorithm(
|
|
66
|
-
BrotliCertificateCompressor::default(),
|
|
67
|
-
),
|
|
68
|
-
CertificateCompressionAlgorithm::ZSTD => self
|
|
69
|
-
.add_certificate_compression_algorithm(
|
|
70
|
-
ZstdCertificateCompressor::default(),
|
|
71
|
-
),
|
|
72
|
-
_ => continue,
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
if let Err(e) = res {
|
|
76
|
-
return Err(Error::tls(e));
|
|
77
|
-
}
|
|
83
|
+
if let Some(compressors) = compressors {
|
|
84
|
+
for compressor in compressors {
|
|
85
|
+
compress::register(*compressor, &mut self).map_err(Error::tls)?;
|
|
78
86
|
}
|
|
79
87
|
}
|
|
88
|
+
|
|
80
89
|
Ok(self)
|
|
81
90
|
}
|
|
82
91
|
}
|
|
@@ -7,22 +7,18 @@ use std::{
|
|
|
7
7
|
|
|
8
8
|
use http::{Uri, uri::Scheme};
|
|
9
9
|
use tokio::io::{AsyncRead, AsyncWrite};
|
|
10
|
-
use
|
|
11
|
-
use tower::Service;
|
|
10
|
+
use tokio_btls::SslStream;
|
|
11
|
+
use tower::{BoxError, Service};
|
|
12
12
|
|
|
13
13
|
use super::{EstablishedConn, HttpsConnector, MaybeHttpsStream};
|
|
14
14
|
use crate::{
|
|
15
|
-
|
|
16
|
-
error::BoxError,
|
|
15
|
+
conn::{Connection, descriptor::ConnectionDescriptor},
|
|
17
16
|
ext::UriExt,
|
|
18
17
|
};
|
|
19
18
|
|
|
20
19
|
type BoxFuture<T, E> = Pin<Box<dyn Future<Output = Result<T, E>> + Send>>;
|
|
21
20
|
|
|
22
|
-
async fn perform_handshake<T>(
|
|
23
|
-
ssl: boring2::ssl::Ssl,
|
|
24
|
-
conn: T,
|
|
25
|
-
) -> Result<MaybeHttpsStream<T>, BoxError>
|
|
21
|
+
async fn perform_handshake<T>(ssl: btls::ssl::Ssl, conn: T) -> Result<MaybeHttpsStream<T>, BoxError>
|
|
26
22
|
where
|
|
27
23
|
T: AsyncRead + AsyncWrite + Unpin,
|
|
28
24
|
{
|
|
@@ -49,7 +45,7 @@ where
|
|
|
49
45
|
|
|
50
46
|
fn call(&mut self, uri: Uri) -> Self::Future {
|
|
51
47
|
let connect = self.http.call(uri.clone());
|
|
52
|
-
let
|
|
48
|
+
let tls = self.tls.clone();
|
|
53
49
|
|
|
54
50
|
let f = async move {
|
|
55
51
|
let conn = connect.await.map_err(Into::into)?;
|
|
@@ -59,7 +55,7 @@ where
|
|
|
59
55
|
return Ok(MaybeHttpsStream::Http(conn));
|
|
60
56
|
}
|
|
61
57
|
|
|
62
|
-
let ssl =
|
|
58
|
+
let ssl = tls.setup_ssl(uri)?;
|
|
63
59
|
perform_handshake(ssl, conn).await
|
|
64
60
|
};
|
|
65
61
|
|
|
@@ -67,7 +63,7 @@ where
|
|
|
67
63
|
}
|
|
68
64
|
}
|
|
69
65
|
|
|
70
|
-
impl<T, S> Service<
|
|
66
|
+
impl<T, S> Service<ConnectionDescriptor> for HttpsConnector<S>
|
|
71
67
|
where
|
|
72
68
|
S: Service<Uri, Response = T> + Send,
|
|
73
69
|
S::Error: Into<BoxError>,
|
|
@@ -83,10 +79,10 @@ where
|
|
|
83
79
|
self.http.poll_ready(cx).map_err(Into::into)
|
|
84
80
|
}
|
|
85
81
|
|
|
86
|
-
fn call(&mut self,
|
|
87
|
-
let uri =
|
|
82
|
+
fn call(&mut self, descriptor: ConnectionDescriptor) -> Self::Future {
|
|
83
|
+
let uri = descriptor.uri().clone();
|
|
88
84
|
let connect = self.http.call(uri.clone());
|
|
89
|
-
let
|
|
85
|
+
let tls = self.tls.clone();
|
|
90
86
|
|
|
91
87
|
let f = async move {
|
|
92
88
|
let conn = connect.await.map_err(Into::into)?;
|
|
@@ -96,7 +92,7 @@ where
|
|
|
96
92
|
return Ok(MaybeHttpsStream::Http(conn));
|
|
97
93
|
}
|
|
98
94
|
|
|
99
|
-
let ssl =
|
|
95
|
+
let ssl = tls.setup_ssl2(descriptor)?;
|
|
100
96
|
perform_handshake(ssl, conn).await
|
|
101
97
|
};
|
|
102
98
|
|
|
@@ -122,14 +118,14 @@ where
|
|
|
122
118
|
}
|
|
123
119
|
|
|
124
120
|
fn call(&mut self, conn: EstablishedConn<IO>) -> Self::Future {
|
|
125
|
-
let
|
|
121
|
+
let tls = self.tls.clone();
|
|
126
122
|
let fut = async move {
|
|
127
123
|
// Early return if it is not a tls scheme
|
|
128
|
-
if conn.
|
|
124
|
+
if conn.descriptor.uri().is_http() {
|
|
129
125
|
return Ok(MaybeHttpsStream::Http(conn.io));
|
|
130
126
|
}
|
|
131
127
|
|
|
132
|
-
let ssl =
|
|
128
|
+
let ssl = tls.setup_ssl2(conn.descriptor)?;
|
|
133
129
|
perform_handshake(ssl, conn.io).await
|
|
134
130
|
};
|
|
135
131
|
|