aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock6
-rw-r--r--Cargo.toml2
-rw-r--r--src/file_upload.rs9
-rw-r--r--src/main.rs13
-rw-r--r--src/renderer.rs117
5 files changed, 78 insertions, 69 deletions
diff --git a/Cargo.lock b/Cargo.lock
index e6c0e61..ccffbda 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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"
diff --git a/Cargo.toml b/Cargo.toml
index 59346b8..55ccc76 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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"
+ }
}
}
}