Skip to content

Commit 9ec6bb4

Browse files
authored
Patch/improve rama http (#752)
- fix CORS layer, its unwraps and design - rely on typed headers that we have, simplify the code and remove those runtime asserts - fix remaining expect/unwrap issues in rama-http
1 parent d1b4f57 commit 9ec6bb4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1484
-1744
lines changed

examples/http_connect_proxy.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ async fn main() {
126126
let http_service = HttpServer::auto(exec)
127127
.service((
128128
TraceLayer::new_for_http(),
129+
ConsumeErrLayer::default(),
129130
// See [`ProxyAuthLayer::with_labels`] for more information,
130131
// e.g. can also be used to extract upstream proxy filters
131132
ProxyAuthLayer::new(basic!("john", "secret"))

examples/http_https_socks5_and_socks5h_connect_proxy.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ use rama::{
4848
SecureTransport,
4949
server::{SelfSignedData, TlsPeekRouter},
5050
},
51-
user::Basic,
51+
user::credentials::basic,
5252
},
5353
proxy::socks5::{Socks5Acceptor, server::Socks5PeekRouter},
5454
rt::Executor,
@@ -59,7 +59,6 @@ use rama::{
5959
level_filters::LevelFilter,
6060
subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt},
6161
},
62-
utils::str::non_empty_str,
6362
};
6463

6564
#[cfg(feature = "boring")]
@@ -123,15 +122,15 @@ async fn main() {
123122
.await
124123
.expect("bind http+https+socks5+socks5h proxy to 127.0.0.1:62029");
125124

126-
let socks5_acceptor = Socks5Acceptor::default().with_authorizer(
127-
Basic::new(non_empty_str!("john"), non_empty_str!("secret")).into_authorizer(),
128-
);
125+
let socks5_acceptor =
126+
Socks5Acceptor::default().with_authorizer(basic!("john", "secret").into_authorizer());
129127

130128
let exec = Executor::graceful(graceful.guard());
131129
let http_service = HttpServer::auto(exec).service(
132130
(
133131
TraceLayer::new_for_http(),
134-
ProxyAuthLayer::new(Basic::new(non_empty_str!("tom"), non_empty_str!("clancy"))),
132+
ConsumeErrLayer::default(),
133+
ProxyAuthLayer::new(basic!("tom", "clancy")),
135134
UpgradeLayer::new(
136135
MethodMatcher::CONNECT,
137136
service_fn(http_connect_accept),

examples/http_mitm_proxy_boring.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ async fn main() -> Result<(), BoxError> {
162162
let http_service = HttpServer::auto(exec).service(
163163
(
164164
TraceLayer::new_for_http(),
165+
ConsumeErrLayer::default(),
165166
// See [`ProxyAuthLayer::with_labels`] for more information,
166167
// e.g. can also be used to extract upstream proxy filters
167168
ProxyAuthLayer::new(basic!("john", "secret")),

examples/http_mitm_proxy_rustls.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ async fn main() -> Result<(), BoxError> {
109109
let http_service = HttpServer::auto(exec).service(
110110
(
111111
TraceLayer::new_for_http(),
112+
ConsumeErrLayer::default(),
112113
// See [`ProxyAuthLayer::with_labels`] for more information,
113114
// e.g. can also be used to extract upstream proxy filters
114115
ProxyAuthLayer::new(basic!("john", "secret")),

examples/http_record_har.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ use rama::{
6868
client::ServerVerifyMode,
6969
server::{SelfSignedData, ServerAuth, ServerConfig},
7070
},
71-
user::Basic,
71+
user::credentials::basic,
7272
},
7373
rt::Executor,
7474
service::service_fn,
@@ -89,7 +89,6 @@ use rama::{
8989
},
9090
profile::UserAgentDatabase,
9191
},
92-
utils::str::non_empty_str,
9392
};
9493

9594
use std::{
@@ -146,9 +145,10 @@ async fn main() -> Result<(), BoxError> {
146145
let http_service = HttpServer::auto(exec).service(
147146
(
148147
TraceLayer::new_for_http(),
148+
ConsumeErrLayer::default(),
149149
// See [`ProxyAuthLayer::with_labels`] for more information,
150150
// e.g. can also be used to extract upstream proxy filters
151-
ProxyAuthLayer::new(Basic::new(non_empty_str!("john"), non_empty_str!("secret"))),
151+
ProxyAuthLayer::new(basic!("john", "secret")),
152152
// used to toggle HAR recording on and off
153153
// ...
154154
// NOTE that in a production proxy you would probably

examples/https_connect_proxy.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ async fn main() {
122122
let http_service = HttpServer::auto(exec.clone()).service(
123123
(
124124
TraceLayer::new_for_http(),
125+
ConsumeErrLayer::default(),
125126
// See [`ProxyAuthLayer::with_labels`] for more information,
126127
// e.g. can also be used to extract upstream proxy filter
127128
ProxyAuthLayer::new(basic!("john", "secret")),

examples/proxy_connectivity_check.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ use rama::{
5858
proxy::ProxyTarget,
5959
stream::ClientSocketInfo,
6060
tls::SecureTransport,
61-
user::Basic,
61+
user::credentials::basic,
6262
},
6363
proxy::socks5::{
6464
Socks5Acceptor,
@@ -72,7 +72,6 @@ use rama::{
7272
level_filters::LevelFilter,
7373
subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt},
7474
},
75-
utils::str::non_empty_str,
7675
};
7776

7877
use std::{convert::Infallible, time::Duration};
@@ -161,7 +160,8 @@ async fn main() {
161160
let http_service = HttpServer::auto(Executor::graceful(graceful.guard())).service(
162161
(
163162
TraceLayer::new_for_http(),
164-
ProxyAuthLayer::new(Basic::new(non_empty_str!("tom"), non_empty_str!("clancy"))),
163+
ConsumeErrLayer::default(),
164+
ProxyAuthLayer::new(basic!("tom", "clancy")),
165165
UpgradeLayer::new(
166166
MethodMatcher::CONNECT,
167167
service_fn(http_connect_accept),
@@ -175,9 +175,7 @@ async fn main() {
175175
let socks5_svc = HttpPeekRouter::new(HttpServer::auto(exec).service(proxy_service))
176176
.with_fallback(Forwarder::ctx());
177177
let socks5_acceptor = Socks5Acceptor::new()
178-
.with_authorizer(
179-
Basic::new(non_empty_str!("john"), non_empty_str!("secret")).into_authorizer(),
180-
)
178+
.with_authorizer(basic!("john", "secret").into_authorizer())
181179
.with_connector(LazyConnector::new(socks5_svc));
182180

183181
let auto_socks5_acceptor = Socks5PeekRouter::new(socks5_acceptor).with_fallback(http_service);

examples/socks5_and_http_proxy.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ use rama::{
3838
service::web::response::IntoResponse,
3939
},
4040
layer::ConsumeErrLayer,
41-
net::{http::RequestContext, proxy::ProxyTarget, stream::ClientSocketInfo, user::Basic},
41+
net::{
42+
http::RequestContext, proxy::ProxyTarget, stream::ClientSocketInfo,
43+
user::credentials::basic,
44+
},
4245
proxy::socks5::{Socks5Acceptor, server::Socks5PeekRouter},
4346
rt::Executor,
4447
service::service_fn,
@@ -48,7 +51,6 @@ use rama::{
4851
level_filters::LevelFilter,
4952
subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt},
5053
},
51-
utils::str::non_empty_str,
5254
};
5355

5456
use std::{convert::Infallible, time::Duration};
@@ -70,15 +72,15 @@ async fn main() {
7072
.await
7173
.expect("bind socks5+http proxy to 127.0.0.1:62023");
7274

73-
let socks5_acceptor = Socks5Acceptor::default().with_authorizer(
74-
Basic::new(non_empty_str!("john"), non_empty_str!("secret")).into_authorizer(),
75-
);
75+
let socks5_acceptor =
76+
Socks5Acceptor::default().with_authorizer(basic!("john", "secret").into_authorizer());
7677

7778
let exec = Executor::graceful(graceful.guard());
7879
let http_service = HttpServer::auto(exec).service(
7980
(
8081
TraceLayer::new_for_http(),
81-
ProxyAuthLayer::new(Basic::new(non_empty_str!("tom"), non_empty_str!("clancy"))),
82+
ConsumeErrLayer::default(),
83+
ProxyAuthLayer::new(basic!("tom", "clancy")),
8284
UpgradeLayer::new(
8385
MethodMatcher::CONNECT,
8486
service_fn(http_connect_accept),

examples/socks5_bind_proxy.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
1515
use rama::{
1616
extensions::Extensions,
17-
net::{address::SocketAddress, user::Basic},
17+
net::{address::SocketAddress, user::credentials::basic},
1818
proxy::socks5::{
1919
Socks5Acceptor, Socks5Client, client::bind::BindOutput, server::DefaultBinder,
2020
},
@@ -24,7 +24,6 @@ use rama::{
2424
level_filters::LevelFilter,
2525
subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt},
2626
},
27-
utils::str::non_empty_str,
2827
};
2928

3029
use tokio::io::{AsyncReadExt, AsyncWriteExt};
@@ -47,8 +46,7 @@ async fn main() {
4746
.await
4847
.expect("establish connection to socks5 server (from client)");
4948

50-
let socks5_client =
51-
Socks5Client::new().with_auth(Basic::new(non_empty_str!("john"), non_empty_str!("secret")));
49+
let socks5_client = Socks5Client::new().with_auth(basic!("john", "secret"));
5250

5351
let binder = socks5_client
5452
.handshake_bind(proxy_client_stream, None)
@@ -118,9 +116,7 @@ async fn spawn_socks5_server() -> SocketAddress {
118116
.into();
119117

120118
let socks5_acceptor = Socks5Acceptor::new()
121-
.with_authorizer(
122-
Basic::new(non_empty_str!("john"), non_empty_str!("secret")).into_authorizer(),
123-
)
119+
.with_authorizer(basic!("john", "secret").into_authorizer())
124120
.with_binder(DefaultBinder::default().with_bind_interface(SocketAddress::local_ipv4(0)));
125121

126122
tokio::spawn(tcp_service.serve(socks5_acceptor));

examples/socks5_connect_proxy.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,14 @@
3131
//! ```
3232
3333
use rama::{
34-
net::user::Basic,
34+
net::user::credentials::basic,
3535
proxy::socks5::Socks5Acceptor,
3636
tcp::server::TcpListener,
3737
telemetry::tracing::{
3838
self,
3939
level_filters::LevelFilter,
4040
subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt},
4141
},
42-
utils::str::non_empty_str,
4342
};
4443

4544
use std::time::Duration;
@@ -60,9 +59,8 @@ async fn main() {
6059
let tcp_service = TcpListener::bind("127.0.0.1:62021")
6160
.await
6261
.expect("bind proxy to 127.0.0.1:62021");
63-
let socks5_acceptor = Socks5Acceptor::default().with_authorizer(
64-
Basic::new(non_empty_str!("john"), non_empty_str!("secret")).into_authorizer(),
65-
);
62+
let socks5_acceptor =
63+
Socks5Acceptor::default().with_authorizer(basic!("john", "secret").into_authorizer());
6664
graceful.spawn_task_fn(|guard| tcp_service.serve_graceful(guard, socks5_acceptor));
6765

6866
graceful

0 commit comments

Comments
 (0)