Procházet zdrojové kódy

fix mimetype detection for downloaded static files

Daniel Sheffield před 1 rokem
rodič
revize
e1dfb61420
1 změnil soubory, kde provedl 11 přidání a 4 odebrání
  1. 11 4
      app/rest/validate.py

+ 11 - 4
app/rest/validate.py

@@ -21,6 +21,7 @@
 """
 
 from io import BufferedReader
+import mimetypes
 from itertools import chain
 from bottle import static_file, response, HTTPError, abort, LocalRequest, HTTPResponse
 from urllib.parse import urlparse, quote, quote_plus
@@ -59,10 +60,17 @@ def validate(filename: str) -> bytes:
 
 def validate_file(filename: str, root: str = 'app/rest/static') -> HTTPResponse:
     path = '/'.join([filename,]*2)
-    with open(f'{root}/{path}.name', "r") as f:
-        name = f.read()
+    try:
+        with open(f'{root}/{path}.name', "r") as f:
+            name = f.read()
+    except:
+        name = None
+    if name:
+        mimetype, enc = mimetypes.guess_type(name)
+    else:
+        mimetype = True
     
-    ret = static_file(f'{path}.file', root=root, download=name)
+    ret = static_file(f'{path}.file', root=root, download=name or True, mimetype=mimetype)
     if isinstance(ret, HTTPError):
         return abort(404, f"No such upload: {filename}")
 
@@ -70,7 +78,6 @@ def validate_file(filename: str, root: str = 'app/rest/static') -> HTTPResponse:
     _b32 = bytes_to_base32(_bytes)
     if _b32 != filename:
         return abort(410, f"Uploaded content differs")
-    
     return ret
 
 def validate_parameter(request: LocalRequest, name: str) -> bytes: