aboutsummaryrefslogtreecommitdiff
path: root/src/modules/cgi.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/cgi.rs')
-rw-r--r--src/modules/cgi.rs66
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");
+}