From 1f467994f74b44b389acd22395ae010ea85212ed Mon Sep 17 00:00:00 2001 From: AustrianToast Date: Fri, 28 Mar 2025 10:53:38 +0100 Subject: [PATCH] start of internal html files --- Dockerfile | 1 + internal/server-info.html | 13 +++++++++++++ src/main.rs | 36 +++++++++++++++++++++++++++++++++--- 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 internal/server-info.html diff --git a/Dockerfile b/Dockerfile index f69ae64..6d4e901 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,6 +29,7 @@ FROM scratch # copy the build artifact from the build stage COPY --from=build /http_server/target/x86_64-unknown-linux-musl/release/http_server / COPY ./www /www +COPY ./internal /internal EXPOSE 8080 diff --git a/internal/server-info.html b/internal/server-info.html new file mode 100644 index 0000000..d048489 --- /dev/null +++ b/internal/server-info.html @@ -0,0 +1,13 @@ + + + + + server-info + + +

Server written by AustrianToast

+ Source code +
+ AustrianToasts e-mail + + diff --git a/src/main.rs b/src/main.rs index 0548f2e..aa2a610 100644 --- a/src/main.rs +++ b/src/main.rs @@ -418,7 +418,6 @@ fn response_builder( fn try_get_file(start_line: &StartLine, field_lines: &HashMap>) -> Vec { let mut response_field_lines: HashMap> = HashMap::new(); let mut response_body: Vec = vec![]; - let path: PathBuf = match start_line.target.as_str() { "/" => PathBuf::from("/www/index.html"), _ => PathBuf::from(format!("/www{}", start_line.target)), @@ -475,6 +474,37 @@ fn try_get_file(start_line: &StartLine, field_lines: &HashMap Vec { + let mut response_field_lines: HashMap> = HashMap::new(); + let mut response_body: Vec = vec![]; + let path: PathBuf = PathBuf::from(format!("/internal{}.html", start_line.target)); + + match fs::read(&path) { + Ok(val) => { + val.iter().for_each(|byte| response_body.push(*byte)); + + response_field_lines.insert( + String::from("content-length"), + vec![response_body.len().to_string()], + ); + + let mime_type = mime_guess::from_path(&path) + .first() + .expect("Could not guess mime-type from path"); + + response_field_lines.insert(String::from("content-type"), vec![mime_type.to_string()]); + + response_builder( + start_line.method, + "HTTP/1.1 200 ", + Some(response_field_lines), + Some(response_body), + ) + } + Err(_) => response_builder(start_line.method, "HTTP/1.1 404 ", None, None), + } +} + fn handle_request(mut stream: TcpStream) -> Result<(), Box> { let mut line = String::new(); let mut reader = BufReader::new(&mut stream); @@ -537,8 +567,8 @@ fn handle_request(mut stream: TcpStream) -> Result<(), Box> { let response = match start_line.target.as_str() { // For docker healtcheck. If the server can properly respond, then it must be healthy. "/server-health" => response_builder(RequestMethods::Head, "HTTP/1.1 200 ", None, None), - // "/server-stats" => response_builder(start_line.method, "HTTP/1.1 404 ", None, None), - // "/server-info" => response_builder(start_line.method, "HTTP/1.1 404 ", None, None), + "/server-stats" => try_get_file_internal(&start_line), + "/server-info" => try_get_file_internal(&start_line), _ => try_get_file(&start_line, &field_lines), }; stream.write_all(&response)?;