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())