|
|
|
@ -46,9 +46,9 @@ use crate::{
|
|
|
|
|
prefix_match,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#[derive (Serialize)]
|
|
|
|
|
struct ServerInfo <'a> {
|
|
|
|
|
server_name: &'a str,
|
|
|
|
|
#[derive (Debug, Serialize)]
|
|
|
|
|
pub struct ServerInfo {
|
|
|
|
|
pub server_name: String,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive (Serialize)]
|
|
|
|
@ -75,7 +75,7 @@ struct TemplateDirEntry {
|
|
|
|
|
#[derive (Serialize)]
|
|
|
|
|
struct TemplateDirPage <'a> {
|
|
|
|
|
#[serde (flatten)]
|
|
|
|
|
server_info: ServerInfo <'a>,
|
|
|
|
|
server_info: &'a ServerInfo,
|
|
|
|
|
|
|
|
|
|
path: Cow <'a, str>,
|
|
|
|
|
entries: Vec <TemplateDirEntry>,
|
|
|
|
@ -224,12 +224,9 @@ async fn read_dir_entry (entry: DirEntry) -> TemplateDirEntry
|
|
|
|
|
|
|
|
|
|
async fn serve_root (
|
|
|
|
|
handlebars: &Handlebars <'static>,
|
|
|
|
|
server_info: &ServerInfo
|
|
|
|
|
) -> Response
|
|
|
|
|
{
|
|
|
|
|
let server_info = ServerInfo {
|
|
|
|
|
server_name: "PTTH file server",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let s = handlebars.render ("file_server_root", &server_info).unwrap ();
|
|
|
|
|
let body = s.into_bytes ();
|
|
|
|
|
|
|
|
|
@ -244,14 +241,11 @@ async fn serve_root (
|
|
|
|
|
#[instrument (level = "debug", skip (handlebars, dir))]
|
|
|
|
|
async fn serve_dir (
|
|
|
|
|
handlebars: &Handlebars <'static>,
|
|
|
|
|
server_info: &ServerInfo,
|
|
|
|
|
path: Cow <'_, str>,
|
|
|
|
|
mut dir: ReadDir
|
|
|
|
|
) -> Response
|
|
|
|
|
{
|
|
|
|
|
let server_info = ServerInfo {
|
|
|
|
|
server_name: "PTTH file server",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let mut entries = vec! [];
|
|
|
|
|
|
|
|
|
|
while let Ok (Some (entry)) = dir.next_entry ().await {
|
|
|
|
@ -521,6 +515,7 @@ async fn internal_serve_all (
|
|
|
|
|
#[instrument (level = "debug", skip (handlebars, headers))]
|
|
|
|
|
pub async fn serve_all (
|
|
|
|
|
handlebars: &Handlebars <'static>,
|
|
|
|
|
server_info: &ServerInfo,
|
|
|
|
|
root: &Path,
|
|
|
|
|
method: Method,
|
|
|
|
|
uri: &str,
|
|
|
|
@ -544,11 +539,11 @@ pub async fn serve_all (
|
|
|
|
|
},
|
|
|
|
|
Redirect (location) => serve_307 (location),
|
|
|
|
|
|
|
|
|
|
Root => serve_root (handlebars).await,
|
|
|
|
|
Root => serve_root (handlebars, server_info).await,
|
|
|
|
|
ServeDir (ServeDirParams {
|
|
|
|
|
path,
|
|
|
|
|
dir,
|
|
|
|
|
}) => serve_dir (handlebars, path.to_string_lossy (), dir.into_inner ()).await,
|
|
|
|
|
}) => serve_dir (handlebars, server_info, path.to_string_lossy (), dir.into_inner ()).await,
|
|
|
|
|
ServeFile (ServeFileParams {
|
|
|
|
|
file,
|
|
|
|
|
send_body,
|
|
|
|
@ -694,20 +689,17 @@ mod tests {
|
|
|
|
|
http_serde::Method,
|
|
|
|
|
//prelude::*,
|
|
|
|
|
};
|
|
|
|
|
use super::{
|
|
|
|
|
InternalResponse,
|
|
|
|
|
internal_serve_all,
|
|
|
|
|
load_templates,
|
|
|
|
|
serve_all,
|
|
|
|
|
ServeDirParams,
|
|
|
|
|
ServeFileParams,
|
|
|
|
|
};
|
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
|
|
tracing_subscriber::fmt ().try_init ().ok ();
|
|
|
|
|
let mut rt = Runtime::new ().unwrap ();
|
|
|
|
|
|
|
|
|
|
rt.block_on (async {
|
|
|
|
|
let handlebars = load_templates ().unwrap ();
|
|
|
|
|
let server_info = ServerInfo {
|
|
|
|
|
server_name: "PTTH File Server".to_string (),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let file_server_root = PathBuf::from ("./");
|
|
|
|
|
let headers = Default::default ();
|
|
|
|
|
|
|
|
|
@ -718,7 +710,8 @@ mod tests {
|
|
|
|
|
("/files/src/", StatusCode::Ok),
|
|
|
|
|
].into_iter () {
|
|
|
|
|
let resp = serve_all (
|
|
|
|
|
&handlebars,
|
|
|
|
|
&handlebars,
|
|
|
|
|
&server_info,
|
|
|
|
|
&file_server_root,
|
|
|
|
|
Method::Get,
|
|
|
|
|
uri_path,
|
|
|
|
|