22//!
33//! The handlers perform the authentication and authorization of the request,
44//! and resolve the client IP address.
5- use std:: net:: SocketAddr ;
65use std:: sync:: Arc ;
76
87use axum:: extract:: State ;
@@ -14,6 +13,7 @@ use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::ClientIpSo
1413use bittorrent_tracker_core:: authentication:: Key ;
1514use hyper:: StatusCode ;
1615use torrust_tracker_primitives:: core:: ScrapeData ;
16+ use torrust_tracker_primitives:: service_binding:: ServiceBinding ;
1717
1818use crate :: v1:: extractors:: authentication_key:: Extract as ExtractKey ;
1919use 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) ]
2525pub 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) ]
4040pub 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