|
@@ -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:
|