-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge #192: Axum HTTP tracker:
scrape
response in public mode
4b3f979 refactor(udp): [#192] use new tracker::scrape method in UDP tracker (Jose Celano) 86ce93c feat(http): [#192] scrape request for Axum HTTP tracker (Jose Celano) ae1a076 feat(http): [#191] add scrape app service (Jose Celano) c4bee79 feat(http): [#191] add Tracker::scrape function (Jose Celano) 0c7735a fix(http): typo in comment (Jose Celano) 2de8265 feat(http): [#191] parse scrape req with multiple infohashes (Jose Celano) 30cf3b9 feat(http): [#192] Query struct allows multiple values for the same param (Jose Celano) 0cab696 feat(http): [#191] add cargo dependency: multimap (Jose Celano) ea8d4d8 feat(http): [#191] add route and extractor for scrape req in Axum HTTP tracker (Jose Celano) Pull request description: `scrape` request in the new Axum HTTP tracker implementation. Only por `public` mode. Top commit has no ACKs. Tree-SHA512: f1500c46b8e2e2eeb834ce5206a7f547b28de04dc2d20383d1c9b459fdf38fac89ec24420cc0e6447f5fdfa7d385231b10f3a28ed3fd986e44bb1f3e644294fc
- Loading branch information
Showing
26 changed files
with
856 additions
and
240 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -37,6 +37,7 @@ | |
"Lphant", | ||
"middlewares", | ||
"mockall", | ||
"multimap", | ||
"myacicontext", | ||
"nanos", | ||
"nextest", | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
pub mod announce_request; | ||
pub mod peer_ip; | ||
pub mod remote_client_ip; | ||
pub mod scrape_request; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
use std::panic::Location; | ||
|
||
use axum::async_trait; | ||
use axum::extract::FromRequestParts; | ||
use axum::http::request::Parts; | ||
use axum::response::{IntoResponse, Response}; | ||
|
||
use crate::http::axum_implementation::query::Query; | ||
use crate::http::axum_implementation::requests::scrape::{ParseScrapeQueryError, Scrape}; | ||
use crate::http::axum_implementation::responses; | ||
|
||
pub struct ExtractRequest(pub Scrape); | ||
|
||
#[async_trait] | ||
impl<S> FromRequestParts<S> for ExtractRequest | ||
where | ||
S: Send + Sync, | ||
{ | ||
type Rejection = Response; | ||
|
||
async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> { | ||
let raw_query = parts.uri.query(); | ||
|
||
if raw_query.is_none() { | ||
return Err(responses::error::Error::from(ParseScrapeQueryError::MissingParams { | ||
location: Location::caller(), | ||
}) | ||
.into_response()); | ||
} | ||
|
||
let query = raw_query.unwrap().parse::<Query>(); | ||
|
||
if let Err(error) = query { | ||
return Err(responses::error::Error::from(error).into_response()); | ||
} | ||
|
||
let scrape_request = Scrape::try_from(query.unwrap()); | ||
|
||
if let Err(error) = scrape_request { | ||
return Err(responses::error::Error::from(error).into_response()); | ||
} | ||
|
||
Ok(ExtractRequest(scrape_request.unwrap())) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
pub mod announce; | ||
pub mod scrape; | ||
pub mod status; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
use std::sync::Arc; | ||
|
||
use axum::extract::State; | ||
use axum::response::{IntoResponse, Response}; | ||
use log::debug; | ||
|
||
use crate::http::axum_implementation::extractors::peer_ip; | ||
use crate::http::axum_implementation::extractors::remote_client_ip::RemoteClientIp; | ||
use crate::http::axum_implementation::extractors::scrape_request::ExtractRequest; | ||
use crate::http::axum_implementation::{responses, services}; | ||
use crate::tracker::Tracker; | ||
|
||
#[allow(clippy::unused_async)] | ||
pub async fn handle( | ||
State(tracker): State<Arc<Tracker>>, | ||
ExtractRequest(scrape_request): ExtractRequest, | ||
remote_client_ip: RemoteClientIp, | ||
) -> Response { | ||
debug!("http scrape request: {:#?}", &scrape_request); | ||
|
||
let peer_ip = match peer_ip::resolve(tracker.config.on_reverse_proxy, &remote_client_ip) { | ||
Ok(peer_ip) => peer_ip, | ||
Err(err) => return err, | ||
}; | ||
|
||
let scrape_data = services::scrape::invoke(tracker.clone(), &scrape_request.info_hashes, &peer_ip).await; | ||
|
||
responses::scrape::Bencoded::from(scrape_data).into_response() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.