2
2
//!
3
3
//! The handlers perform the authentication and authorization of the request,
4
4
//! and resolve the client IP address.
5
+ use std:: net:: SocketAddr ;
5
6
use std:: sync:: Arc ;
6
7
7
8
use axum:: extract:: State ;
@@ -22,13 +23,13 @@ use crate::v1::extractors::scrape_request::ExtractRequest;
22
23
/// to run in `public` mode.
23
24
#[ allow( clippy:: unused_async) ]
24
25
pub async fn handle_without_key (
25
- State ( state) : State < Arc < ScrapeService > > ,
26
+ State ( state) : State < ( Arc < ScrapeService > , SocketAddr ) > ,
26
27
ExtractRequest ( scrape_request) : ExtractRequest ,
27
28
ExtractClientIpSources ( client_ip_sources) : ExtractClientIpSources ,
28
29
) -> Response {
29
30
tracing:: debug!( "http scrape request: {:#?}" , & scrape_request) ;
30
31
31
- handle ( & state, & scrape_request, & client_ip_sources, None ) . await
32
+ handle ( & state. 0 , & scrape_request, & client_ip_sources, & state . 1 , None ) . await
32
33
}
33
34
34
35
/// It handles the `scrape` request when the HTTP tracker is configured
@@ -37,24 +38,25 @@ pub async fn handle_without_key(
37
38
/// In this case, the authentication `key` parameter is required.
38
39
#[ allow( clippy:: unused_async) ]
39
40
pub async fn handle_with_key (
40
- State ( state) : State < Arc < ScrapeService > > ,
41
+ State ( state) : State < ( Arc < ScrapeService > , SocketAddr ) > ,
41
42
ExtractRequest ( scrape_request) : ExtractRequest ,
42
43
ExtractClientIpSources ( client_ip_sources) : ExtractClientIpSources ,
43
44
ExtractKey ( key) : ExtractKey ,
44
45
) -> Response {
45
46
tracing:: debug!( "http scrape request: {:#?}" , & scrape_request) ;
46
47
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
48
49
}
49
50
50
51
async fn handle (
51
52
scrape_service : & Arc < ScrapeService > ,
52
53
scrape_request : & Scrape ,
53
54
client_ip_sources : & ClientIpSources ,
55
+ server_socket_addr : & SocketAddr ,
54
56
maybe_key : Option < Key > ,
55
57
) -> Response {
56
58
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)
58
60
. await
59
61
{
60
62
Ok ( scrape_data) => scrape_data,
@@ -165,6 +167,7 @@ mod tests {
165
167
}
166
168
167
169
mod with_tracker_in_private_mode {
170
+ use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
168
171
use std:: str:: FromStr ;
169
172
170
173
use bittorrent_http_tracker_core:: services:: scrape:: ScrapeService ;
@@ -175,6 +178,8 @@ mod tests {
175
178
176
179
#[ tokio:: test]
177
180
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
+
178
183
let ( core_tracker_services, core_http_tracker_services) = initialize_private_tracker ( ) ;
179
184
180
185
let scrape_request = sample_scrape_request ( ) ;
@@ -188,7 +193,7 @@ mod tests {
188
193
) ;
189
194
190
195
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)
192
197
. await
193
198
. unwrap ( ) ;
194
199
@@ -199,6 +204,8 @@ mod tests {
199
204
200
205
#[ tokio:: test]
201
206
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
+
202
209
let ( core_tracker_services, core_http_tracker_services) = initialize_private_tracker ( ) ;
203
210
204
211
let scrape_request = sample_scrape_request ( ) ;
@@ -213,7 +220,7 @@ mod tests {
213
220
) ;
214
221
215
222
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)
217
224
. await
218
225
. unwrap ( ) ;
219
226
@@ -225,6 +232,8 @@ mod tests {
225
232
226
233
mod with_tracker_in_listed_mode {
227
234
235
+ use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
236
+
228
237
use bittorrent_http_tracker_core:: services:: scrape:: ScrapeService ;
229
238
use torrust_tracker_primitives:: core:: ScrapeData ;
230
239
@@ -236,6 +245,8 @@ mod tests {
236
245
237
246
let scrape_request = sample_scrape_request ( ) ;
238
247
248
+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 7070 ) ;
249
+
239
250
let scrape_service = ScrapeService :: new (
240
251
core_tracker_services. core_config . clone ( ) ,
241
252
core_tracker_services. scrape_handler . clone ( ) ,
@@ -244,7 +255,7 @@ mod tests {
244
255
) ;
245
256
246
257
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 )
248
259
. await
249
260
. unwrap ( ) ;
250
261
@@ -256,6 +267,8 @@ mod tests {
256
267
257
268
mod with_tracker_on_reverse_proxy {
258
269
270
+ use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
271
+
259
272
use bittorrent_http_tracker_core:: services:: scrape:: ScrapeService ;
260
273
use bittorrent_http_tracker_protocol:: v1:: responses;
261
274
use bittorrent_http_tracker_protocol:: v1:: services:: peer_ip_resolver:: ClientIpSources ;
@@ -272,6 +285,8 @@ mod tests {
272
285
connection_info_ip : None ,
273
286
} ;
274
287
288
+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 7070 ) ;
289
+
275
290
let scrape_service = ScrapeService :: new (
276
291
core_tracker_services. core_config . clone ( ) ,
277
292
core_tracker_services. scrape_handler . clone ( ) ,
@@ -280,7 +295,7 @@ mod tests {
280
295
) ;
281
296
282
297
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 )
284
299
. await
285
300
. unwrap_err ( ) ;
286
301
@@ -297,6 +312,8 @@ mod tests {
297
312
298
313
mod with_tracker_not_on_reverse_proxy {
299
314
315
+ use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
316
+
300
317
use bittorrent_http_tracker_core:: services:: scrape:: ScrapeService ;
301
318
use bittorrent_http_tracker_protocol:: v1:: responses;
302
319
use bittorrent_http_tracker_protocol:: v1:: services:: peer_ip_resolver:: ClientIpSources ;
@@ -313,6 +330,8 @@ mod tests {
313
330
connection_info_ip : None ,
314
331
} ;
315
332
333
+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 7070 ) ;
334
+
316
335
let scrape_service = ScrapeService :: new (
317
336
core_tracker_services. core_config . clone ( ) ,
318
337
core_tracker_services. scrape_handler . clone ( ) ,
@@ -321,7 +340,7 @@ mod tests {
321
340
) ;
322
341
323
342
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 )
325
344
. await
326
345
. unwrap_err ( ) ;
327
346
0 commit comments