diff options
| author | gyoder <70408179+gyoder@users.noreply.github.com> | 2025-07-05 16:13:17 -0600 |
|---|---|---|
| committer | gyoder <70408179+gyoder@users.noreply.github.com> | 2025-07-05 16:16:51 -0600 |
| commit | 7e896c1397a6d2ccbac31a63852b6ed0fbd32a8d (patch) | |
| tree | d3a1592241654265be123f1ee32999eda30e2e06 /htmlua-parser/src/serve.rs | |
| parent | 93cee588074981d33bd0da54aaa2e9c0311c3d87 (diff) | |
added apache2 cgi script
Diffstat (limited to 'htmlua-parser/src/serve.rs')
| -rw-r--r-- | htmlua-parser/src/serve.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/htmlua-parser/src/serve.rs b/htmlua-parser/src/serve.rs new file mode 100644 index 0000000..6bbf73a --- /dev/null +++ b/htmlua-parser/src/serve.rs @@ -0,0 +1,39 @@ +use std::env; +use std::fs; +use std::fs::read_to_string; +use std::path::{Path, PathBuf}; +use std::str::FromStr; +use super::render::execute_lua; +use super::render::expand_template; +use anyhow::Result; +use kuchikiki::{ + NodeRef, + traits::TendrilSink, +}; + +pub fn serve_content(request_uri: &str) -> Result<String>{ + // TODO: read from config + let pages = PathBuf::from("/var/www/htmlua/pages"); + let components = PathBuf::from("/var/www/htmlua/components"); + + let safe_path = Path::new(request_uri).strip_prefix("/")?; + let page_path = pages.join(safe_path); + + let page_string = read_to_string(&page_path)?; + + let doc = kuchikiki::parse_html().one(page_string); + let full_doc = expand_template(doc, &components, None)?; + + let executed_doc = execute_lua(full_doc)?; + + Ok(executed_doc.to_string()) +} + +fn html_escape(input: &str) -> String { + input + .replace('&', "&") + .replace('<', "<") + .replace('>', ">") + .replace('"', """) + .replace('\'', "'") +} |
