Compare commits
No commits in common. "8bd3464b9b574fd6e0b75b39952e53555c8fece7" and "bd1a491e1c4ea407d89c2dc47a8351c720062e49" have entirely different histories.
8bd3464b9b
...
bd1a491e1c
4 changed files with 13 additions and 50 deletions
|
@ -1 +1 @@
|
||||||
12
|
11
|
||||||
|
|
23
Cargo.lock
generated
23
Cargo.lock
generated
|
@ -1,23 +0,0 @@
|
||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 3
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "frostwalker"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "17cbf58e19f2bda088d8c4c95a46b41895375e15a2d63dd686a4273f8c43d46b"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "herb"
|
|
||||||
version = "0.8.1"
|
|
||||||
dependencies = [
|
|
||||||
"frostwalker",
|
|
||||||
"packeteer",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "packeteer"
|
|
||||||
version = "0.5.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5425d35ba9635d531e8d6e0a4bd9b0974decbb146e7f7f69fffb071e44bcb647"
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "herb"
|
name = "herb"
|
||||||
version = "0.8.1"
|
version = "0.8.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
36
src/main.rs
36
src/main.rs
|
@ -29,17 +29,16 @@ struct Settings {
|
||||||
cgi: bool,
|
cgi: bool,
|
||||||
index_generation: bool,
|
index_generation: bool,
|
||||||
address: String,
|
address: String,
|
||||||
logging: bool,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Settings {
|
impl Settings {
|
||||||
fn new() -> Settings {
|
fn new() -> Settings {
|
||||||
return Settings { cgi: true, index_generation: true, address: "0.0.0.0:8080".to_string(), logging: false};
|
return Settings { cgi: true, index_generation: true, address: "0.0.0.0:8080".to_string()};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process_cgi(filename: String) -> Option<Vec<u8>> {
|
fn process_cgi(filename: String) -> Option<Vec<u8>> {
|
||||||
// This is gonna be the bodgiest implementation of CGI that anyone
|
// This is gonna be the boggiest implementation of CGI that anyone
|
||||||
// has ever seen in the history of the fucking world
|
// has ever seen in the history of the fucking world
|
||||||
|
|
||||||
let query;
|
let query;
|
||||||
|
@ -103,6 +102,7 @@ fn process_cgi_with_path(filename: String, segments: Vec<String>, location: i32)
|
||||||
}
|
}
|
||||||
|
|
||||||
path = format!("{}/", path);
|
path = format!("{}/", path);
|
||||||
|
println!("{}", path);
|
||||||
let output;
|
let output;
|
||||||
if query != "".to_string() {
|
if query != "".to_string() {
|
||||||
output = Command::new(format!("./{}", script))
|
output = Command::new(format!("./{}", script))
|
||||||
|
@ -218,9 +218,7 @@ fn get_page(filename: String, settings: Settings) -> GetPageResult {
|
||||||
|
|
||||||
let mut resultstruct = GetPageResult { is500: false, is502: false, is403: false, contents: vec![], iscgi: false };
|
let mut resultstruct = GetPageResult { is500: false, is502: false, is403: false, contents: vec![], iscgi: false };
|
||||||
|
|
||||||
if settings.logging {
|
println!("{} {} {}", path, checks, index);
|
||||||
println!("{} {} {}", path, checks, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
if checks == true && index == false {
|
if checks == true && index == false {
|
||||||
if path.contains(".") != true && path.contains(".cgi?") != true {
|
if path.contains(".") != true && path.contains(".cgi?") != true {
|
||||||
|
@ -331,9 +329,8 @@ fn process_request(request: Vec<u8>, settings: Settings) -> Resource {
|
||||||
let output;
|
let output;
|
||||||
|
|
||||||
if &request.method == "GET" {
|
if &request.method == "GET" {
|
||||||
if settings.logging {
|
println!("Stream sent GET request.");
|
||||||
println!("Stream sent GET request.");
|
|
||||||
}
|
|
||||||
if request.location.segments.len() != 0 {
|
if request.location.segments.len() != 0 {
|
||||||
let segclone = request.location.segments.clone();
|
let segclone = request.location.segments.clone();
|
||||||
path = unwrap_url_into_segments(request.location);
|
path = unwrap_url_into_segments(request.location);
|
||||||
|
@ -396,9 +393,7 @@ fn process_request(request: Vec<u8>, settings: Settings) -> Resource {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let resource = Resource { contents: "<!DOCTYPE HTML><html><body><h1>501 Not Implemented</h1><p>The request sent by your web browser cannot be handled by this server software.</p></body></html>".to_string().into_bytes(), status_code: 501, mime: "text/html".to_string(), iscgi: false };
|
let resource = Resource { contents: "<!DOCTYPE HTML><html><body><h1>501 Not Implemented</h1><p>The request sent by your web browser cannot be handled by this server software.</p></body></html>".to_string().into_bytes(), status_code: 501, mime: "text/html".to_string(), iscgi: false };
|
||||||
if settings.logging {
|
println!("Stream sent unhandlable request.");
|
||||||
println!("Stream sent unhandlable request.");
|
|
||||||
}
|
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,10 +425,7 @@ fn process_request(request: Vec<u8>, settings: Settings) -> Resource {
|
||||||
|
|
||||||
fn serve(mut stream: TcpStream, settings: Settings) {
|
fn serve(mut stream: TcpStream, settings: Settings) {
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
if settings.logging {
|
println!("Stream thread created.");
|
||||||
println!("Stream thread created.");
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut request = Vec::new();
|
let mut request = Vec::new();
|
||||||
let mut reader = BufReader::new(&mut stream);
|
let mut reader = BufReader::new(&mut stream);
|
||||||
reader
|
reader
|
||||||
|
@ -485,14 +477,10 @@ fn process_settings() -> Settings {
|
||||||
}
|
}
|
||||||
|
|
||||||
if hashmap.get("index_generation").is_some() {
|
if hashmap.get("index_generation").is_some() {
|
||||||
|
println!("a");
|
||||||
if hashmap.get("index_generation").unwrap_or(&"".to_string()).parse::<bool>().is_ok() {
|
if hashmap.get("index_generation").unwrap_or(&"".to_string()).parse::<bool>().is_ok() {
|
||||||
settings.index_generation = hashmap.get("index_generation").unwrap_or(&"true".to_string()).parse::<bool>().unwrap_or(true);
|
settings.index_generation = hashmap.get("index_generation").unwrap_or(&"true".to_string()).parse::<bool>().unwrap_or(true);
|
||||||
}
|
println!("{}", settings.index_generation);
|
||||||
}
|
|
||||||
|
|
||||||
if hashmap.get("logging").is_some() {
|
|
||||||
if hashmap.get("logging").unwrap_or(&"".to_string()).parse::<bool>().is_ok() {
|
|
||||||
settings.logging = hashmap.get("logging").unwrap_or(&"false".to_string()).parse::<bool>().unwrap_or(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -508,9 +496,7 @@ fn main() -> std::io::Result<()> {
|
||||||
let listen = TcpListener::bind(settings.address.clone())?;
|
let listen = TcpListener::bind(settings.address.clone())?;
|
||||||
|
|
||||||
for stream in listen.incoming() {
|
for stream in listen.incoming() {
|
||||||
if settings.logging {
|
println!("Serving incoming stream.");
|
||||||
println!("Serving incoming stream.");
|
|
||||||
}
|
|
||||||
serve(stream?, settings.clone());
|
serve(stream?, settings.clone());
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in a new issue