Skip to content

Commit 326e577

Browse files
committed
Merge torrust#1425: Add the server ServiceBinding to events' metadata
0784a9e feat: [torrust#1424] add ServiceBinding to UDP events (Jose Celano) 8c44033 feat: [torrust#1424] add ServiceBinding to HTTP core events (Jose Celano) Pull request description: Add the server `ServiceBinding` to events' metadata. ACKs for top commit: josecelano: ACK 0784a9e Tree-SHA512: 5682427ece0fa0aa0371c989a6cf416c179fd9034a0f0e5c9096e86bf5d852eba2f379d9c51800a3fa5e03ee609568ed61c6c1f41c998d663b8b826c8a3fa690
2 parents 9e74449 + 0784a9e commit 326e577

File tree

24 files changed

+414
-174
lines changed

24 files changed

+414
-174
lines changed

packages/axum-http-tracker-server/src/server.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl Launcher {
6868

6969
tracing::info!(target: HTTP_TRACKER_LOG_TARGET, "Starting on: {protocol}://{address}");
7070

71-
let app = router(http_tracker_container, address);
71+
let app = router(http_tracker_container, service_binding.clone());
7272

7373
let running = Box::pin(async {
7474
match tls {

packages/axum-http-tracker-server/src/v1/handlers/announce.rs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
//!
33
//! The handlers perform the authentication and authorization of the request,
44
//! and resolve the client IP address.
5-
use std::net::SocketAddr;
65
use std::sync::Arc;
76

87
use axum::extract::State;
@@ -14,6 +13,7 @@ use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::ClientIpSo
1413
use bittorrent_tracker_core::authentication::Key;
1514
use hyper::StatusCode;
1615
use torrust_tracker_primitives::core::AnnounceData;
16+
use torrust_tracker_primitives::service_binding::ServiceBinding;
1717

1818
use crate::v1::extractors::announce_request::ExtractRequest;
1919
use crate::v1::extractors::authentication_key::Extract as ExtractKey;
@@ -23,7 +23,7 @@ use crate::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources;
2323
/// authentication (no PATH `key` parameter required).
2424
#[allow(clippy::unused_async)]
2525
pub async fn handle_without_key(
26-
State(state): State<(Arc<AnnounceService>, SocketAddr)>,
26+
State(state): State<(Arc<AnnounceService>, ServiceBinding)>,
2727
ExtractRequest(announce_request): ExtractRequest,
2828
ExtractClientIpSources(client_ip_sources): ExtractClientIpSources,
2929
) -> Response {
@@ -36,7 +36,7 @@ pub async fn handle_without_key(
3636
/// authentication (PATH `key` parameter required).
3737
#[allow(clippy::unused_async)]
3838
pub async fn handle_with_key(
39-
State(state): State<(Arc<AnnounceService>, SocketAddr)>,
39+
State(state): State<(Arc<AnnounceService>, ServiceBinding)>,
4040
ExtractRequest(announce_request): ExtractRequest,
4141
ExtractClientIpSources(client_ip_sources): ExtractClientIpSources,
4242
ExtractKey(key): ExtractKey,
@@ -54,14 +54,14 @@ async fn handle(
5454
announce_service: &Arc<AnnounceService>,
5555
announce_request: &Announce,
5656
client_ip_sources: &ClientIpSources,
57-
server_socket_addr: &SocketAddr,
57+
server_service_binding: &ServiceBinding,
5858
maybe_key: Option<Key>,
5959
) -> Response {
6060
let announce_data = match handle_announce(
6161
announce_service,
6262
announce_request,
6363
client_ip_sources,
64-
server_socket_addr,
64+
server_service_binding,
6565
maybe_key,
6666
)
6767
.await
@@ -81,11 +81,11 @@ async fn handle_announce(
8181
announce_service: &Arc<AnnounceService>,
8282
announce_request: &Announce,
8383
client_ip_sources: &ClientIpSources,
84-
server_socket_addr: &SocketAddr,
84+
server_service_binding: &ServiceBinding,
8585
maybe_key: Option<Key>,
8686
) -> Result<AnnounceData, HttpAnnounceError> {
8787
announce_service
88-
.handle_announce(announce_request, client_ip_sources, server_socket_addr, maybe_key)
88+
.handle_announce(announce_request, client_ip_sources, server_service_binding, maybe_key)
8989
.await
9090
}
9191

@@ -212,6 +212,7 @@ mod tests {
212212

213213
use bittorrent_http_tracker_protocol::v1::responses;
214214
use bittorrent_tracker_core::authentication;
215+
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
215216

216217
use super::{initialize_private_tracker, sample_announce_request, sample_client_ip_sources};
217218
use crate::v1::handlers::announce::handle_announce;
@@ -222,14 +223,15 @@ mod tests {
222223
let http_core_tracker_services = initialize_private_tracker();
223224

224225
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
226+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
225227

226228
let maybe_key = None;
227229

228230
let response = handle_announce(
229231
&http_core_tracker_services.announce_service,
230232
&sample_announce_request(),
231233
&sample_client_ip_sources(),
232-
&server_socket_addr,
234+
&server_service_binding,
233235
maybe_key,
234236
)
235237
.await
@@ -252,14 +254,15 @@ mod tests {
252254
let unregistered_key = authentication::Key::from_str("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap();
253255

254256
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
257+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
255258

256259
let maybe_key = Some(unregistered_key);
257260

258261
let response = handle_announce(
259262
&http_core_tracker_services.announce_service,
260263
&sample_announce_request(),
261264
&sample_client_ip_sources(),
262-
&server_socket_addr,
265+
&server_service_binding,
263266
maybe_key,
264267
)
265268
.await
@@ -281,6 +284,7 @@ mod tests {
281284
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
282285

283286
use bittorrent_http_tracker_protocol::v1::responses;
287+
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
284288

285289
use super::{initialize_listed_tracker, sample_announce_request, sample_client_ip_sources};
286290
use crate::v1::handlers::announce::handle_announce;
@@ -293,12 +297,13 @@ mod tests {
293297
let announce_request = sample_announce_request();
294298

295299
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
300+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
296301

297302
let response = handle_announce(
298303
&http_core_tracker_services.announce_service,
299304
&announce_request,
300305
&sample_client_ip_sources(),
301-
&server_socket_addr,
306+
&server_service_binding,
302307
None,
303308
)
304309
.await
@@ -324,6 +329,7 @@ mod tests {
324329

325330
use bittorrent_http_tracker_protocol::v1::responses;
326331
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::ClientIpSources;
332+
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
327333

328334
use super::{initialize_tracker_on_reverse_proxy, sample_announce_request};
329335
use crate::v1::handlers::announce::handle_announce;
@@ -339,12 +345,13 @@ mod tests {
339345
};
340346

341347
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
348+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
342349

343350
let response = handle_announce(
344351
&http_core_tracker_services.announce_service,
345352
&sample_announce_request(),
346353
&client_ip_sources,
347-
&server_socket_addr,
354+
&server_service_binding,
348355
None,
349356
)
350357
.await
@@ -367,6 +374,7 @@ mod tests {
367374

368375
use bittorrent_http_tracker_protocol::v1::responses;
369376
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::ClientIpSources;
377+
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
370378

371379
use super::{initialize_tracker_not_on_reverse_proxy, sample_announce_request};
372380
use crate::v1::handlers::announce::handle_announce;
@@ -382,12 +390,13 @@ mod tests {
382390
};
383391

384392
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
393+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
385394

386395
let response = handle_announce(
387396
&http_core_tracker_services.announce_service,
388397
&sample_announce_request(),
389398
&client_ip_sources,
390-
&server_socket_addr,
399+
&server_service_binding,
391400
None,
392401
)
393402
.await

packages/axum-http-tracker-server/src/v1/handlers/scrape.rs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
//!
33
//! The handlers perform the authentication and authorization of the request,
44
//! and resolve the client IP address.
5-
use std::net::SocketAddr;
65
use std::sync::Arc;
76

87
use axum::extract::State;
@@ -14,6 +13,7 @@ use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::ClientIpSo
1413
use bittorrent_tracker_core::authentication::Key;
1514
use hyper::StatusCode;
1615
use torrust_tracker_primitives::core::ScrapeData;
16+
use torrust_tracker_primitives::service_binding::ServiceBinding;
1717

1818
use crate::v1::extractors::authentication_key::Extract as ExtractKey;
1919
use crate::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources;
@@ -23,7 +23,7 @@ use crate::v1::extractors::scrape_request::ExtractRequest;
2323
/// to run in `public` mode.
2424
#[allow(clippy::unused_async)]
2525
pub async fn handle_without_key(
26-
State(state): State<(Arc<ScrapeService>, SocketAddr)>,
26+
State(state): State<(Arc<ScrapeService>, ServiceBinding)>,
2727
ExtractRequest(scrape_request): ExtractRequest,
2828
ExtractClientIpSources(client_ip_sources): ExtractClientIpSources,
2929
) -> Response {
@@ -38,7 +38,7 @@ pub async fn handle_without_key(
3838
/// In this case, the authentication `key` parameter is required.
3939
#[allow(clippy::unused_async)]
4040
pub async fn handle_with_key(
41-
State(state): State<(Arc<ScrapeService>, SocketAddr)>,
41+
State(state): State<(Arc<ScrapeService>, ServiceBinding)>,
4242
ExtractRequest(scrape_request): ExtractRequest,
4343
ExtractClientIpSources(client_ip_sources): ExtractClientIpSources,
4444
ExtractKey(key): ExtractKey,
@@ -52,11 +52,11 @@ async fn handle(
5252
scrape_service: &Arc<ScrapeService>,
5353
scrape_request: &Scrape,
5454
client_ip_sources: &ClientIpSources,
55-
server_socket_addr: &SocketAddr,
55+
server_service_binding: &ServiceBinding,
5656
maybe_key: Option<Key>,
5757
) -> Response {
5858
let scrape_data = match scrape_service
59-
.handle_scrape(scrape_request, client_ip_sources, server_socket_addr, maybe_key)
59+
.handle_scrape(scrape_request, client_ip_sources, server_service_binding, maybe_key)
6060
.await
6161
{
6262
Ok(scrape_data) => scrape_data,
@@ -173,12 +173,14 @@ mod tests {
173173
use bittorrent_http_tracker_core::services::scrape::ScrapeService;
174174
use bittorrent_tracker_core::authentication;
175175
use torrust_tracker_primitives::core::ScrapeData;
176+
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
176177

177178
use super::{initialize_private_tracker, sample_client_ip_sources, sample_scrape_request};
178179

179180
#[tokio::test]
180181
async fn it_should_return_zeroed_swarm_metadata_when_the_authentication_key_is_missing() {
181182
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
183+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
182184

183185
let (core_tracker_services, core_http_tracker_services) = initialize_private_tracker();
184186

@@ -193,7 +195,12 @@ mod tests {
193195
);
194196

195197
let scrape_data = scrape_service
196-
.handle_scrape(&scrape_request, &sample_client_ip_sources(), &server_socket_addr, maybe_key)
198+
.handle_scrape(
199+
&scrape_request,
200+
&sample_client_ip_sources(),
201+
&server_service_binding,
202+
maybe_key,
203+
)
197204
.await
198205
.unwrap();
199206

@@ -205,6 +212,7 @@ mod tests {
205212
#[tokio::test]
206213
async fn it_should_return_zeroed_swarm_metadata_when_the_authentication_key_is_invalid() {
207214
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
215+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
208216

209217
let (core_tracker_services, core_http_tracker_services) = initialize_private_tracker();
210218

@@ -220,7 +228,12 @@ mod tests {
220228
);
221229

222230
let scrape_data = scrape_service
223-
.handle_scrape(&scrape_request, &sample_client_ip_sources(), &server_socket_addr, maybe_key)
231+
.handle_scrape(
232+
&scrape_request,
233+
&sample_client_ip_sources(),
234+
&server_service_binding,
235+
maybe_key,
236+
)
224237
.await
225238
.unwrap();
226239

@@ -236,6 +249,7 @@ mod tests {
236249

237250
use bittorrent_http_tracker_core::services::scrape::ScrapeService;
238251
use torrust_tracker_primitives::core::ScrapeData;
252+
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
239253

240254
use super::{initialize_listed_tracker, sample_client_ip_sources, sample_scrape_request};
241255

@@ -246,6 +260,7 @@ mod tests {
246260
let scrape_request = sample_scrape_request();
247261

248262
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
263+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
249264

250265
let scrape_service = ScrapeService::new(
251266
core_tracker_services.core_config.clone(),
@@ -255,7 +270,7 @@ mod tests {
255270
);
256271

257272
let scrape_data = scrape_service
258-
.handle_scrape(&scrape_request, &sample_client_ip_sources(), &server_socket_addr, None)
273+
.handle_scrape(&scrape_request, &sample_client_ip_sources(), &server_service_binding, None)
259274
.await
260275
.unwrap();
261276

@@ -272,6 +287,7 @@ mod tests {
272287
use bittorrent_http_tracker_core::services::scrape::ScrapeService;
273288
use bittorrent_http_tracker_protocol::v1::responses;
274289
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::ClientIpSources;
290+
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
275291

276292
use super::{initialize_tracker_on_reverse_proxy, sample_scrape_request};
277293
use crate::v1::handlers::scrape::tests::assert_error_response;
@@ -286,6 +302,7 @@ mod tests {
286302
};
287303

288304
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
305+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
289306

290307
let scrape_service = ScrapeService::new(
291308
core_tracker_services.core_config.clone(),
@@ -295,7 +312,7 @@ mod tests {
295312
);
296313

297314
let response = scrape_service
298-
.handle_scrape(&sample_scrape_request(), &client_ip_sources, &server_socket_addr, None)
315+
.handle_scrape(&sample_scrape_request(), &client_ip_sources, &server_service_binding, None)
299316
.await
300317
.unwrap_err();
301318

@@ -317,6 +334,7 @@ mod tests {
317334
use bittorrent_http_tracker_core::services::scrape::ScrapeService;
318335
use bittorrent_http_tracker_protocol::v1::responses;
319336
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::ClientIpSources;
337+
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
320338

321339
use super::{initialize_tracker_not_on_reverse_proxy, sample_scrape_request};
322340
use crate::v1::handlers::scrape::tests::assert_error_response;
@@ -331,6 +349,7 @@ mod tests {
331349
};
332350

333351
let server_socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7070);
352+
let server_service_binding = ServiceBinding::new(Protocol::HTTP, server_socket_addr).unwrap();
334353

335354
let scrape_service = ScrapeService::new(
336355
core_tracker_services.core_config.clone(),
@@ -340,7 +359,7 @@ mod tests {
340359
);
341360

342361
let response = scrape_service
343-
.handle_scrape(&sample_scrape_request(), &client_ip_sources, &server_socket_addr, None)
362+
.handle_scrape(&sample_scrape_request(), &client_ip_sources, &server_service_binding, None)
344363
.await
345364
.unwrap_err();
346365

0 commit comments

Comments
 (0)