👕 refactor: Extract functions for scraper API endpoints
parent
622895f77d
commit
1e81421444
|
@ -409,64 +409,17 @@ async fn handle_server_list (
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument (level = "trace", skip (req, state))]
|
#[instrument (level = "trace", skip (req, state))]
|
||||||
async fn handle_all (req: Request <Body>, state: Arc <RelayState>)
|
async fn handle_scraper_api_v1 (
|
||||||
|
req: Request <Body>,
|
||||||
|
state: Arc <RelayState>,
|
||||||
|
path_rest: &str
|
||||||
|
)
|
||||||
-> Result <Response <Body>, RequestError>
|
-> Result <Response <Body>, RequestError>
|
||||||
{
|
{
|
||||||
let path = req.uri ().path ();
|
use key_validity::KeyValidity;
|
||||||
//println! ("{}", path);
|
|
||||||
|
|
||||||
debug! ("Request path: {}", path);
|
|
||||||
|
|
||||||
let api_key = req.headers ().get ("X-ApiKey");
|
let api_key = req.headers ().get ("X-ApiKey");
|
||||||
|
|
||||||
if req.method () == Method::POST {
|
|
||||||
// This is stuff the server can use. Clients can't
|
|
||||||
// POST right now
|
|
||||||
|
|
||||||
return if let Some (request_code) = prefix_match ("/7ZSFUKGV/http_response/", path) {
|
|
||||||
let request_code = request_code.into ();
|
|
||||||
Ok (server_endpoint::handle_response (req, state, request_code).await?)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Ok (error_reply (StatusCode::BAD_REQUEST, "Can't POST this")?)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some (listen_code) = prefix_match ("/7ZSFUKGV/http_listen/", path) {
|
|
||||||
let api_key = match api_key {
|
|
||||||
None => return Ok (error_reply (StatusCode::FORBIDDEN, "Can't run server without an API key")?),
|
|
||||||
Some (x) => x,
|
|
||||||
};
|
|
||||||
server_endpoint::handle_listen (state, listen_code.into (), api_key.as_bytes ()).await
|
|
||||||
}
|
|
||||||
else if let Some (rest) = prefix_match ("/frontend/servers/", path) {
|
|
||||||
if rest == "" {
|
|
||||||
Ok (handle_server_list (state).await?)
|
|
||||||
}
|
|
||||||
else if let Some (idx) = rest.find ('/') {
|
|
||||||
let listen_code = String::from (&rest [0..idx]);
|
|
||||||
let path = String::from (&rest [idx..]);
|
|
||||||
let (parts, _) = req.into_parts ();
|
|
||||||
|
|
||||||
Ok (handle_http_request (parts, path, state, listen_code).await?)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Ok (error_reply (StatusCode::BAD_REQUEST, "Bad URI format")?)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if path == "/" {
|
|
||||||
let s = state.handlebars.render ("relay_root", &())?;
|
|
||||||
Ok (ok_reply (s)?)
|
|
||||||
}
|
|
||||||
else if path == "/frontend/relay_up_check" {
|
|
||||||
Ok (error_reply (StatusCode::OK, "Relay is up")?)
|
|
||||||
}
|
|
||||||
else if path == "/frontend/test_mysterious_error" {
|
|
||||||
Err (RequestError::Mysterious)
|
|
||||||
}
|
|
||||||
else if path == "/scraper/v1/test" || path == "/scraper/api/test" {
|
|
||||||
use key_validity::KeyValidity;
|
|
||||||
|
|
||||||
let api_key = match api_key {
|
let api_key = match api_key {
|
||||||
None => return Ok (error_reply (StatusCode::FORBIDDEN, "Can't run scraper without an API key")?),
|
None => return Ok (error_reply (StatusCode::FORBIDDEN, "Can't run scraper without an API key")?),
|
||||||
Some (x) => x,
|
Some (x) => x,
|
||||||
|
@ -502,8 +455,92 @@ async fn handle_all (req: Request <Body>, state: Arc <RelayState>)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if path_rest == "test" {
|
||||||
Ok (error_reply (StatusCode::OK, "You're valid!")?)
|
Ok (error_reply (StatusCode::OK, "You're valid!")?)
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
Ok (error_reply (StatusCode::NOT_FOUND, "Unknown API endpoint")?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[instrument (level = "trace", skip (req, state))]
|
||||||
|
async fn handle_scraper_api (
|
||||||
|
req: Request <Body>,
|
||||||
|
state: Arc <RelayState>,
|
||||||
|
path_rest: &str
|
||||||
|
)
|
||||||
|
-> Result <Response <Body>, RequestError>
|
||||||
|
{
|
||||||
|
if let Some (rest) = prefix_match ("v1/", path_rest) {
|
||||||
|
handle_scraper_api_v1 (req, state, rest).await
|
||||||
|
}
|
||||||
|
else if let Some (rest) = prefix_match ("api/", path_rest) {
|
||||||
|
handle_scraper_api_v1 (req, state, rest).await
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Ok (error_reply (StatusCode::NOT_FOUND, "Unknown scraper API version")?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[instrument (level = "trace", skip (req, state))]
|
||||||
|
async fn handle_all (req: Request <Body>, state: Arc <RelayState>)
|
||||||
|
-> Result <Response <Body>, RequestError>
|
||||||
|
{
|
||||||
|
let path = req.uri ().path ().to_string ();
|
||||||
|
//println! ("{}", path);
|
||||||
|
|
||||||
|
debug! ("Request path: {}", path);
|
||||||
|
|
||||||
|
if req.method () == Method::POST {
|
||||||
|
// This is stuff the server can use. Clients can't
|
||||||
|
// POST right now
|
||||||
|
|
||||||
|
return if let Some (request_code) = prefix_match ("/7ZSFUKGV/http_response/", &path) {
|
||||||
|
let request_code = request_code.into ();
|
||||||
|
Ok (server_endpoint::handle_response (req, state, request_code).await?)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Ok (error_reply (StatusCode::BAD_REQUEST, "Can't POST this")?)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some (listen_code) = prefix_match ("/7ZSFUKGV/http_listen/", &path) {
|
||||||
|
let api_key = req.headers ().get ("X-ApiKey");
|
||||||
|
|
||||||
|
let api_key = match api_key {
|
||||||
|
None => return Ok (error_reply (StatusCode::FORBIDDEN, "Can't run server without an API key")?),
|
||||||
|
Some (x) => x,
|
||||||
|
};
|
||||||
|
server_endpoint::handle_listen (state, listen_code.into (), api_key.as_bytes ()).await
|
||||||
|
}
|
||||||
|
else if let Some (rest) = prefix_match ("/frontend/servers/", &path) {
|
||||||
|
if rest == "" {
|
||||||
|
Ok (handle_server_list (state).await?)
|
||||||
|
}
|
||||||
|
else if let Some (idx) = rest.find ('/') {
|
||||||
|
let listen_code = String::from (&rest [0..idx]);
|
||||||
|
let path = String::from (&rest [idx..]);
|
||||||
|
let (parts, _) = req.into_parts ();
|
||||||
|
|
||||||
|
Ok (handle_http_request (parts, path, state, listen_code).await?)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Ok (error_reply (StatusCode::BAD_REQUEST, "Bad URI format")?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if path == "/" {
|
||||||
|
let s = state.handlebars.render ("relay_root", &())?;
|
||||||
|
Ok (ok_reply (s)?)
|
||||||
|
}
|
||||||
|
else if path == "/frontend/relay_up_check" {
|
||||||
|
Ok (error_reply (StatusCode::OK, "Relay is up")?)
|
||||||
|
}
|
||||||
|
else if path == "/frontend/test_mysterious_error" {
|
||||||
|
Err (RequestError::Mysterious)
|
||||||
|
}
|
||||||
|
else if let Some (rest) = prefix_match ("/scraper/", &path) {
|
||||||
|
handle_scraper_api (req, state, rest).await
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
Ok (error_reply (StatusCode::OK, "Hi")?)
|
Ok (error_reply (StatusCode::OK, "Hi")?)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue