# It is not intended for manual editing.
version = 3
-[[package]]
-name = "aho-corasick"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
-dependencies = [
- "memchr",
-]
-
[[package]]
name = "bitflags"
version = "1.3.2"
"log",
"mime",
"new_mime_guess",
- "regex",
"signal",
"simplelog",
]
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
-[[package]]
-name = "memchr"
-version = "2.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
-
[[package]]
name = "mime"
version = "0.3.17"
"proc-macro2",
]
-[[package]]
-name = "regex"
-version = "1.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-automata",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
-
[[package]]
name = "serde"
version = "1.0.190"
use log::{debug,info,error};
use mime;
use new_mime_guess::from_path;
-use regex::Regex;
use simplelog::{SimpleLogger,LevelFilter};
-use std::collections::BTreeMap;
use std::error::Error;
use std::env;
use std::fs::{File,metadata,remove_file};
}
}
-fn handle_req(conf: &Config, mut req: Request) {
+fn handle_req(_conf: &Config, mut req: Request) {
// for (k,v) in req.params() {
// info!("key {} has value {}",k,v);
// }
- let Some(docroot) = req.param("DOCUMENT_ROOT") else {
- write_err_resp!(req,"400","Bad Request","No document root was set");
- return;
- };
-
// require a method
let Some(method) = req.param("REQUEST_METHOD") else {
write_err_resp!(req,"405","Method not allowed","No method");
// determine content-type
let guess = from_path(filename.clone());
let guessed_mime = guess.first().unwrap_or(mime::TEXT_PLAIN);
- let mut mimestr = guessed_mime.essence_str();
-
- // check for a mime type override in config
- let short_filename = &filename[docroot.len()..];
- for idx in conf.mime_matches.keys() {
- let (conf_mime_match,conf_mime_value) = &conf.mime_matches[idx];
- if conf_mime_match.is_match(short_filename) {
- mimestr = conf_mime_value;
- }
- }
+ let mimestr = guessed_mime.essence_str();
// read std::fs::metadata including size
let Ok(metadata) = metadata(filename.clone()) else {
struct Config {
socket_path: String,
- mime_matches: BTreeMap<u8,(Regex,String)>,
- // cors_origin_matches: BTreeMap<u8,(Regex,String)>,
}
impl Config {
fn init() -> Result<Config,Box<dyn Error>> {
let mut socket_path = "/tmp/fcgisocket".to_string();
- let mut mime_matches = BTreeMap::new();
- // let mut cors_origin_matches = BTreeMap::new();
for (k,v) in env::vars() {
if k == "FCGI_SRV_SOCKET_PATH" {
info!("config: found socket_path {}",v);
socket_path = v;
- } else if k.starts_with("FCGI_SRV_MIME_MATCH_") {
- let index = u8::from_str_radix(&k[20..],10)?;
- info!("config: found mime match index {}",index);
- let re = Regex::new(&v)?;
- if let Ok(mtype) = env::var(format!("FCGI_SRV_MIME_TYPE_{}",index)) {
- mime_matches.insert(index,(re,mtype));
- };
}
}
let conf = Config {
socket_path: socket_path,
- mime_matches: mime_matches,
- // cors_origin_matches: cors_origin_matches,
};
Ok(conf)