diff options
-rw-r--r-- | Cargo.lock | 6 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/file_upload.rs | 9 | ||||
-rw-r--r-- | src/main.rs | 13 | ||||
-rw-r--r-- | src/renderer.rs | 117 |
5 files changed, 78 insertions, 69 deletions
@@ -359,7 +359,7 @@ dependencies = [ [[package]] name = "alphanumeric-sort" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1441,7 +1441,7 @@ version = "0.5.0" dependencies = [ "actix 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", "actix-web 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)", - "alphanumeric-sort 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "alphanumeric-sort 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", "assert_cmd 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "assert_fs 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3195,7 +3195,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum actix_derive 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4300e9431455322ae393d43a2ba1ef96b8080573c0fc23b196219efedfb6ba69" "checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" "checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" -"checksum alphanumeric-sort 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f37ce94154d73f6961f87571a3ab7814e1608f373bd55a933e3e771b6dd59fc4" +"checksum alphanumeric-sort 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "22b991f3d9c054bb99ed18f24e906b89ec3bc450e788d4911b2b9e123ab3109b" "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" "checksum arc-swap 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f1a1eca3195b729bbd64e292ef2f5fff6b1c28504fed762ce2b1013dde4d8e92" "checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" @@ -30,7 +30,7 @@ percent-encoding = "2.1" htmlescape = "0.3.1" bytesize = "1.0.0" nanoid = "0.2.0" -alphanumeric-sort = "1.0.11" +alphanumeric-sort = "1.0.12" structopt = "0.3" chrono = "0.4.10" chrono-humanize = "0.0.11" diff --git a/src/file_upload.rs b/src/file_upload.rs index 3ef3a7e..900792f 100644 --- a/src/file_upload.rs +++ b/src/file_upload.rs @@ -120,6 +120,7 @@ fn handle_multipart( pub fn upload_file( req: &HttpRequest<crate::MiniserveConfig>, default_color_scheme: ColorScheme, + uses_random_route: bool ) -> FutureResponse<HttpResponse> { let return_path = if let Some(header) = req.headers().get(header::REFERER) { header.to_str().unwrap_or("/").to_owned() @@ -146,6 +147,7 @@ pub fn upload_file( query_params.order, color_scheme, default_color_scheme, + uses_random_route )); } }; @@ -165,6 +167,7 @@ pub fn upload_file( query_params.order, color_scheme, default_color_scheme, + uses_random_route )); } }; @@ -184,6 +187,7 @@ pub fn upload_file( query_params.order, color_scheme, default_color_scheme, + uses_random_route )); } }; @@ -208,12 +212,14 @@ pub fn upload_file( query_params.order, color_scheme, default_color_scheme, + uses_random_route ), }), ) } /// Convenience method for creating response errors, if file upload fails. +#[allow(clippy::too_many_arguments)] fn create_error_response( description: &str, error_code: StatusCode, @@ -222,6 +228,7 @@ fn create_error_response( sorting_order: Option<SortingOrder>, color_scheme: ColorScheme, default_color_scheme: ColorScheme, + uses_random_route: bool ) -> FutureResult<HttpResponse, actix_web::error::Error> { errors::log_error_chain(description.to_string()); future::ok( @@ -237,7 +244,7 @@ fn create_error_response( color_scheme, default_color_scheme, true, - true, + !uses_random_route, ) .into_string(), ), diff --git a/src/main.rs b/src/main.rs index eb90eaf..2482d95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -267,6 +267,7 @@ fn configure_app(app: App<MiniserveConfig>) -> App<MiniserveConfig> { }; let random_route = app.state().random_route.clone().unwrap_or_default(); + let uses_random_route = app.state().random_route.clone().is_some(); let full_route = format!("/{}", random_route); if let Some(s) = s { @@ -275,7 +276,7 @@ fn configure_app(app: App<MiniserveConfig>) -> App<MiniserveConfig> { // Allow file upload app.resource(&upload_route, move |r| { r.method(Method::POST) - .f(move |file| file_upload::upload_file(file, default_color_scheme)) + .f(move |file| file_upload::upload_file(file, default_color_scheme, uses_random_route)) }) // Handle directories .handler(&full_route, s) @@ -295,11 +296,7 @@ fn configure_app(app: App<MiniserveConfig>) -> App<MiniserveConfig> { fn error_404(req: &HttpRequest<crate::MiniserveConfig>) -> Result<HttpResponse, io::Error> { let err_404 = ContextualError::RouteNotFoundError(req.path().to_string()); let default_color_scheme = req.state().default_color_scheme; - let return_address = match &req.state().random_route { - Some(random_route) => format!("/{}", random_route), - None => "/".to_string(), - }; - + let uses_random_route = req.state().random_route.is_some(); let query_params = listing::extract_query_parameters(req); let color_scheme = query_params.theme.unwrap_or(default_color_scheme); @@ -309,13 +306,13 @@ fn error_404(req: &HttpRequest<crate::MiniserveConfig>) -> Result<HttpResponse, renderer::render_error( &err_404.to_string(), StatusCode::NOT_FOUND, - &return_address, + "/", query_params.sort, query_params.order, color_scheme, default_color_scheme, false, - true, + !uses_random_route, ) .into_string(), )) diff --git a/src/renderer.rs b/src/renderer.rs index cbad557..1821c48 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -33,61 +33,64 @@ pub fn page( ); html! { - (page_header(serve_path, color_scheme, file_upload, false)) - body#drop-container { - @if file_upload { - div.drag-form { - div.drag-title { - h1 { "Drop your file here to upload it" } + (DOCTYPE) + html { + (page_header(serve_path, color_scheme, file_upload, false)) + body#drop-container { + @if file_upload { + div.drag-form { + div.drag-title { + h1 { "Drop your file here to upload it" } + } } } - } - (color_scheme_selector(sort_method, sort_order, color_scheme, default_color_scheme, serve_path)) - div.container { - span#top { } - h1.title { "Index of " (serve_path) } - div.toolbar { - div.download { - @for compression_method in CompressionMethod::iter() { - (archive_button(compression_method, sort_method, sort_order, color_scheme, default_color_scheme)) + (color_scheme_selector(sort_method, sort_order, color_scheme, default_color_scheme, serve_path)) + div.container { + span#top { } + h1.title { "Index of " (serve_path) } + div.toolbar { + div.download { + @for compression_method in CompressionMethod::iter() { + (archive_button(compression_method, sort_method, sort_order, color_scheme, default_color_scheme)) + } } - } - @if file_upload { - div.upload { - form id="file_submit" action=(upload_action) method="POST" enctype="multipart/form-data" { - p { "Select a file to upload or drag it anywhere into the window" } - div { - input#file-input type="file" name="file_to_upload" required="" {} - button type="submit" { "Upload file" } + @if file_upload { + div.upload { + form id="file_submit" action=(upload_action) method="POST" enctype="multipart/form-data" { + p { "Select a file to upload or drag it anywhere into the window" } + div { + input#file-input type="file" name="file_to_upload" required="" {} + button type="submit" { "Upload file" } + } } } } } - } - table { - thead { - th { (build_link("name", "Name", sort_method, sort_order, color_scheme, default_color_scheme)) } - th { (build_link("size", "Size", sort_method, sort_order, color_scheme, default_color_scheme)) } - th { (build_link("date", "Last modification", sort_method, sort_order, color_scheme, default_color_scheme)) } - } - tbody { - @if !is_root { - tr { - td colspan="3" { - span.root-chevron { (chevron_left()) } - a.root href=(parametrized_link("../", sort_method, sort_order, color_scheme, default_color_scheme)) { - "Parent directory" + table { + thead { + th { (build_link("name", "Name", sort_method, sort_order, color_scheme, default_color_scheme)) } + th { (build_link("size", "Size", sort_method, sort_order, color_scheme, default_color_scheme)) } + th { (build_link("date", "Last modification", sort_method, sort_order, color_scheme, default_color_scheme)) } + } + tbody { + @if !is_root { + tr { + td colspan="3" { + span.root-chevron { (chevron_left()) } + a.root href=(parametrized_link("../", sort_method, sort_order, color_scheme, default_color_scheme)) { + "Parent directory" + } } } } - } - @for entry in entries { - (entry_row(entry, sort_method, sort_order, color_scheme, default_color_scheme)) + @for entry in entries { + (entry_row(entry, sort_method, sort_order, color_scheme, default_color_scheme)) + } } } - } - a.back href="#top" { - (arrow_up()) + a.back href="#top" { + (arrow_up()) + } } } } @@ -803,14 +806,13 @@ fn page_header( is_error: bool, ) -> Markup { html! { - (DOCTYPE) - html { + head { meta charset="utf-8"; meta http-equiv="X-UA-Compatible" content="IE=edge"; meta name="viewport" content="width=device-width, initial-scale=1"; @if is_error { title { (serve_path) } - } else { + } @else { title { "Index of " (serve_path) } } style { (css(color_scheme)) } @@ -905,17 +907,20 @@ pub fn render_error( }; html! { - body { + (DOCTYPE) + html { (page_header(&error_code.to_string(), color_scheme, false, true)) - div.error { - p { (error_code.to_string()) } - @for error in error_description.lines() { - p { (error) } - } - @if display_back_link { - div.error-nav { - a.error-back href=(link) { - "Go back to file listing" + body { + div.error { + p { (error_code.to_string()) } + @for error in error_description.lines() { + p { (error) } + } + @if display_back_link { + div.error-nav { + a.error-back href=(link) { + "Go back to file listing" + } } } } |