From 6a097e0496aefb76c16f6834772faadf204bfb31 Mon Sep 17 00:00:00 2001 From: sigoden <sigoden@gmail.com> Date: Tue, 31 May 2022 15:20:47 +0800 Subject: [PATCH] fix: unzip override existed file in uploadonly mode --- src/assets/index.html | 2 +- src/assets/index.js | 1 - src/server.rs | 12 ++++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/assets/index.html b/src/assets/index.html index f90ef82..e536409 100644 --- a/src/assets/index.html +++ b/src/assets/index.html @@ -15,7 +15,7 @@ <svg width="16" height="16" viewBox="0 0 16 16"><path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/><path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3z"/></svg> </a> </div> - <div class="upload-control hidden" title="Upload file"> + <div class="upload-control hidden" title="Upload files"> <label for="file"> <svg width="16" height="16" viewBox="0 0 16 16"><path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/><path d="M7.646 1.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 2.707V11.5a.5.5 0 0 1-1 0V2.707L5.354 4.854a.5.5 0 1 1-.708-.708l3-3z"/></svg> </label> diff --git a/src/assets/index.js b/src/assets/index.js index 9bf35a3..0a69c0e 100644 --- a/src/assets/index.js +++ b/src/assets/index.js @@ -27,7 +27,6 @@ class Uploader { const ajax = new XMLHttpRequest(); ajax.upload.addEventListener("progress", e => this.progress(e), false); ajax.addEventListener("readystatechange", () => { - console.log(ajax.readyState, ajax.status) if(ajax.readyState === 4) { if (ajax.status == 200) { this.complete(); diff --git a/src/server.rs b/src/server.rs index a317fb2..dba3564 100644 --- a/src/server.rs +++ b/src/server.rs @@ -11,7 +11,8 @@ use headers::{ HeaderMap, HeaderMapExt, IfModifiedSince, IfNoneMatch, IfRange, LastModified, Range, }; use hyper::header::{ - HeaderValue, ACCEPT, CONTENT_DISPOSITION, CONTENT_TYPE, ORIGIN, RANGE, WWW_AUTHENTICATE, + HeaderValue, ACCEPT, AUTHORIZATION, CONTENT_DISPOSITION, CONTENT_TYPE, ORIGIN, RANGE, + WWW_AUTHENTICATE, }; use hyper::service::{make_service_fn, service_fn}; use hyper::{Body, Method, StatusCode}; @@ -193,8 +194,8 @@ impl InnerService { io::copy(&mut body_reader, &mut file).await?; - let req_query = req.uri().query().unwrap_or_default(); - if req_query == "unzip" { + let query = req.uri().query().unwrap_or_default(); + if query == "unzip" { let root = path.parent().unwrap(); let mut zip = ZipFileReader::new(File::open(&path).await?).await?; for i in 0..zip.entries().len() { @@ -204,6 +205,9 @@ impl InnerService { if entry_name.ends_with('/') { fs::create_dir_all(entry_path).await?; } else { + if !self.args.allow_delete && fs::metadata(&entry_path).await.is_ok() { + continue; + } if let Some(parent) = entry_path.parent() { if fs::symlink_metadata(parent).await.is_err() { fs::create_dir_all(&parent).await?; @@ -395,7 +399,7 @@ impl InnerService { let pass = { match &self.args.auth { None => true, - Some(auth) => match req.headers().get("Authorization") { + Some(auth) => match req.headers().get(AUTHORIZATION) { Some(value) => match value.to_str().ok().map(|v| { let mut it = v.split(' '); (it.next(), it.next())