22//!
33//! The handlers perform the authentication and authorization of the request,
44//! and resolve the client IP address.
5+ use std:: net:: SocketAddr ;
56use std:: sync:: Arc ;
67
78use axum:: extract:: State ;
@@ -22,13 +23,13 @@ use crate::v1::extractors::scrape_request::ExtractRequest;
2223/// to run in `public` mode.
2324#[ allow( clippy:: unused_async) ]
2425pub async fn handle_without_key (
25- State ( state) : State < Arc < ScrapeService > > ,
26+ State ( state) : State < ( Arc < ScrapeService > , SocketAddr ) > ,
2627 ExtractRequest ( scrape_request) : ExtractRequest ,
2728 ExtractClientIpSources ( client_ip_sources) : ExtractClientIpSources ,
2829) -> Response {
2930 tracing:: debug!( "http scrape request: {:#?}" , & scrape_request) ;
3031
31- handle ( & state, & scrape_request, & client_ip_sources, None ) . await
32+ handle ( & state. 0 , & scrape_request, & client_ip_sources, & state . 1 , None ) . await
3233}
3334
3435/// It handles the `scrape` request when the HTTP tracker is configured
@@ -37,24 +38,25 @@ pub async fn handle_without_key(
3738/// In this case, the authentication `key` parameter is required.
3839#[ allow( clippy:: unused_async) ]
3940pub async fn handle_with_key (
40- State ( state) : State < Arc < ScrapeService > > ,
41+ State ( state) : State < ( Arc < ScrapeService > , SocketAddr ) > ,
4142 ExtractRequest ( scrape_request) : ExtractRequest ,
4243 ExtractClientIpSources ( client_ip_sources) : ExtractClientIpSources ,
4344 ExtractKey ( key) : ExtractKey ,
4445) -> Response {
4546 tracing:: debug!( "http scrape request: {:#?}" , & scrape_request) ;
4647
47- handle ( & state, & scrape_request, & client_ip_sources, Some ( key) ) . await
48+ handle ( & state. 0 , & scrape_request, & client_ip_sources, & state . 1 , Some ( key) ) . await
4849}
4950
5051async fn handle (
5152 scrape_service : & Arc < ScrapeService > ,
5253 scrape_request : & Scrape ,
5354 client_ip_sources : & ClientIpSources ,
55+ server_socket_addr : & SocketAddr ,
5456 maybe_key : Option < Key > ,
5557) -> Response {
5658 let scrape_data = match scrape_service
57- . handle_scrape ( scrape_request, client_ip_sources, maybe_key)
59+ . handle_scrape ( scrape_request, client_ip_sources, server_socket_addr , maybe_key)
5860 . await
5961 {
6062 Ok ( scrape_data) => scrape_data,
@@ -165,6 +167,7 @@ mod tests {
165167 }
166168
167169 mod with_tracker_in_private_mode {
170+ use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
168171 use std:: str:: FromStr ;
169172
170173 use bittorrent_http_tracker_core:: services:: scrape:: ScrapeService ;
@@ -175,6 +178,8 @@ mod tests {
175178
176179 #[ tokio:: test]
177180 async fn it_should_return_zeroed_swarm_metadata_when_the_authentication_key_is_missing ( ) {
181+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 7070 ) ;
182+
178183 let ( core_tracker_services, core_http_tracker_services) = initialize_private_tracker ( ) ;
179184
180185 let scrape_request = sample_scrape_request ( ) ;
@@ -188,7 +193,7 @@ mod tests {
188193 ) ;
189194
190195 let scrape_data = scrape_service
191- . handle_scrape ( & scrape_request, & sample_client_ip_sources ( ) , maybe_key)
196+ . handle_scrape ( & scrape_request, & sample_client_ip_sources ( ) , & server_socket_addr , maybe_key)
192197 . await
193198 . unwrap ( ) ;
194199
@@ -199,6 +204,8 @@ mod tests {
199204
200205 #[ tokio:: test]
201206 async fn it_should_return_zeroed_swarm_metadata_when_the_authentication_key_is_invalid ( ) {
207+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 7070 ) ;
208+
202209 let ( core_tracker_services, core_http_tracker_services) = initialize_private_tracker ( ) ;
203210
204211 let scrape_request = sample_scrape_request ( ) ;
@@ -213,7 +220,7 @@ mod tests {
213220 ) ;
214221
215222 let scrape_data = scrape_service
216- . handle_scrape ( & scrape_request, & sample_client_ip_sources ( ) , maybe_key)
223+ . handle_scrape ( & scrape_request, & sample_client_ip_sources ( ) , & server_socket_addr , maybe_key)
217224 . await
218225 . unwrap ( ) ;
219226
@@ -225,6 +232,8 @@ mod tests {
225232
226233 mod with_tracker_in_listed_mode {
227234
235+ use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
236+
228237 use bittorrent_http_tracker_core:: services:: scrape:: ScrapeService ;
229238 use torrust_tracker_primitives:: core:: ScrapeData ;
230239
@@ -236,6 +245,8 @@ mod tests {
236245
237246 let scrape_request = sample_scrape_request ( ) ;
238247
248+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 7070 ) ;
249+
239250 let scrape_service = ScrapeService :: new (
240251 core_tracker_services. core_config . clone ( ) ,
241252 core_tracker_services. scrape_handler . clone ( ) ,
@@ -244,7 +255,7 @@ mod tests {
244255 ) ;
245256
246257 let scrape_data = scrape_service
247- . handle_scrape ( & scrape_request, & sample_client_ip_sources ( ) , None )
258+ . handle_scrape ( & scrape_request, & sample_client_ip_sources ( ) , & server_socket_addr , None )
248259 . await
249260 . unwrap ( ) ;
250261
@@ -256,6 +267,8 @@ mod tests {
256267
257268 mod with_tracker_on_reverse_proxy {
258269
270+ use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
271+
259272 use bittorrent_http_tracker_core:: services:: scrape:: ScrapeService ;
260273 use bittorrent_http_tracker_protocol:: v1:: responses;
261274 use bittorrent_http_tracker_protocol:: v1:: services:: peer_ip_resolver:: ClientIpSources ;
@@ -272,6 +285,8 @@ mod tests {
272285 connection_info_ip : None ,
273286 } ;
274287
288+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 7070 ) ;
289+
275290 let scrape_service = ScrapeService :: new (
276291 core_tracker_services. core_config . clone ( ) ,
277292 core_tracker_services. scrape_handler . clone ( ) ,
@@ -280,7 +295,7 @@ mod tests {
280295 ) ;
281296
282297 let response = scrape_service
283- . handle_scrape ( & sample_scrape_request ( ) , & client_ip_sources, None )
298+ . handle_scrape ( & sample_scrape_request ( ) , & client_ip_sources, & server_socket_addr , None )
284299 . await
285300 . unwrap_err ( ) ;
286301
@@ -297,6 +312,8 @@ mod tests {
297312
298313 mod with_tracker_not_on_reverse_proxy {
299314
315+ use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
316+
300317 use bittorrent_http_tracker_core:: services:: scrape:: ScrapeService ;
301318 use bittorrent_http_tracker_protocol:: v1:: responses;
302319 use bittorrent_http_tracker_protocol:: v1:: services:: peer_ip_resolver:: ClientIpSources ;
@@ -313,6 +330,8 @@ mod tests {
313330 connection_info_ip : None ,
314331 } ;
315332
333+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 7070 ) ;
334+
316335 let scrape_service = ScrapeService :: new (
317336 core_tracker_services. core_config . clone ( ) ,
318337 core_tracker_services. scrape_handler . clone ( ) ,
@@ -321,7 +340,7 @@ mod tests {
321340 ) ;
322341
323342 let response = scrape_service
324- . handle_scrape ( & sample_scrape_request ( ) , & client_ip_sources, None )
343+ . handle_scrape ( & sample_scrape_request ( ) , & client_ip_sources, & server_socket_addr , None )
325344 . await
326345 . unwrap_err ( ) ;
327346
0 commit comments