diff options
Diffstat (limited to 'src/modules/cgi.rs')
-rw-r--r-- | src/modules/cgi.rs | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/src/modules/cgi.rs b/src/modules/cgi.rs index bd19395..121bcac 100644 --- a/src/modules/cgi.rs +++ b/src/modules/cgi.rs @@ -3,7 +3,7 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -use super::{Node, NodeKind, NodeResponse}; +use super::{Node, NodeContext, NodeKind, NodeRequest, NodeResponse}; use crate::error::ServiceError; use anyhow::{anyhow, Result}; use futures::TryStreamExt; @@ -88,36 +88,7 @@ impl Node for Cgi { command.envs(&self.config.env); command.args(&self.config.args); - command.env( - "CONTENT_LENGTH", - request - .headers() - .get(CONTENT_LENGTH) - .and_then(|x| x.to_str().ok()) - .unwrap_or_default(), - ); - command.env( - "CONTENT_TYPE", - request - .headers() - .get(CONTENT_TYPE) - .and_then(|x| x.to_str().ok()) - .unwrap_or_default(), - ); - command.env("GATEWAY_INTERFACE", "CGI/1.1"); - command.env("PATH_INFO", request.uri().path()); - command.env("PATH_TRANSLATED", request.uri().path()); - command.env("QUERY_STRING", request.uri().query().unwrap_or_default()); - command.env("REMOTE_ADDR", context.addr.to_string()); - // command.env("REMOTE_HOST", )); - // command.env("REMOTE_IDENT", )); - // command.env("REMOTE_USER", )); - command.env("REQUEST_METHOD", request.method().to_string()); - // command.env("SCRIPT_NAME", ); - // command.env("SERVER_NAME", ); - // command.env("SERVER_PORT", ); - command.env("SERVER_PROTOCOL", "HTTP/1.1"); - command.env("SERVER_SOFTWARE", "gnix"); + set_cgi_variables(&mut command, &request, context); let mut child = command.spawn()?; let mut stdout = BufReader::new(child.stdout.take().unwrap()); @@ -165,3 +136,36 @@ impl Node for Cgi { }) } } + +pub fn set_cgi_variables(command: &mut Command, request: &NodeRequest, context: &NodeContext) { + command.env( + "CONTENT_LENGTH", + request + .headers() + .get(CONTENT_LENGTH) + .and_then(|x| x.to_str().ok()) + .unwrap_or_default(), + ); + command.env( + "CONTENT_TYPE", + request + .headers() + .get(CONTENT_TYPE) + .and_then(|x| x.to_str().ok()) + .unwrap_or_default(), + ); + command.env("GATEWAY_INTERFACE", "CGI/1.1"); + command.env("PATH_INFO", request.uri().path()); + command.env("PATH_TRANSLATED", request.uri().path()); + command.env("QUERY_STRING", request.uri().query().unwrap_or_default()); + command.env("REMOTE_ADDR", context.addr.to_string()); + // command.env("REMOTE_HOST", )); + // command.env("REMOTE_IDENT", )); + // command.env("REMOTE_USER", )); + command.env("REQUEST_METHOD", request.method().to_string()); + // command.env("SCRIPT_NAME", ); + // command.env("SERVER_NAME", ); + // command.env("SERVER_PORT", ); + command.env("SERVER_PROTOCOL", "HTTP/1.1"); + command.env("SERVER_SOFTWARE", "gnix"); +} |