Skip to content

Commit

Permalink
teliod cgi: use PATH_INFO in Request
Browse files Browse the repository at this point in the history
  • Loading branch information
packgron committed Dec 19, 2024
1 parent bb940e1 commit 38a4f90
Showing 1 changed file with 44 additions and 3 deletions.
47 changes: 44 additions & 3 deletions clis/teliod/src/cgi/mod.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,36 @@
use rust_cgi::{http::StatusCode, text_response, Request, Response};
use rust_cgi::{
http::{uri::PathAndQuery, StatusCode, Uri},
text_response, Request, Response,
};

const CHAIN: &[fn(&Request) -> Option<Response>] = &[];
const CHAIN: &[fn(&Request) -> Option<Response>] = &[
#[cfg(debug_assertions)]
trace_request,
];

pub fn handle_request(mut request: Request) -> Response {
// Default path provided by rust-cgi uses SCRIPT_NAME which
// is not as usefull as PATH_INFO for logic control.
// Switching to that, to have nicer routing
let mut parts = request.uri().clone().into_parts();
let query = parts
.path_and_query
.as_ref()
.and_then(|pq| pq.query())
.map_or_else(|| String::new(), |q| format!("?{q}"));
let path = std::env::var("PATH_INFO").unwrap_or_default();
let pq: Option<PathAndQuery> = format!("{path}{query}").parse().ok();
parts.path_and_query = pq;
*request.uri_mut() = match Uri::from_parts(parts) {
Ok(uri) => uri,
Err(err) => {
return text_response(
StatusCode::INTERNAL_SERVER_ERROR,
format!("Failed to create url, error: {err:?}"),
);
}
};

pub(crate) fn handle_request(request: Request) -> Response {
for handler in CHAIN.iter() {
if let Some(response) = handler(&request) {
return response;
Expand All @@ -11,3 +39,16 @@ pub(crate) fn handle_request(request: Request) -> Response {

text_response(StatusCode::BAD_REQUEST, "Invalid request.")
}

#[cfg(debug_assertions)]
fn trace_request(request: &Request) -> Option<Response> {
Some(text_response(
StatusCode::OK,
format!(
"method: {:?}\npath: {:?}\nquery: {:?}",
request.method(),
request.uri().path(),
request.uri().query(),
),
))
}

0 comments on commit 38a4f90

Please sign in to comment.