aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-12-17 21:18:41 +0100
committerAnton Khirnov <anton@khirnov.net>2019-12-17 21:18:41 +0100
commit650c33b18b159e75a4bf43c341b4aae049ea26ef (patch)
treea2ca3021d5f8b9dd5e8a5e2d38a1c7382adcee1f
parentafddf90fa0a06aefe3dc9e51e8deeba7744a3e0e (diff)
dash_server: implement percent-encoded non-ASCII paths
-rwxr-xr-xdash_server.py12
1 files changed, 6 insertions, 6 deletions
diff --git a/dash_server.py b/dash_server.py
index c39b74e..da65584 100755
--- a/dash_server.py
+++ b/dash_server.py
@@ -31,6 +31,7 @@ import shutil
import socket
import sys
import threading
+from urllib import parse as urlparse
# monkey-patch in ThreadingHTTPServer for older python versions
if sys.version_info.minor < 7:
@@ -187,8 +188,7 @@ class DashRequestHandler(hs.BaseHTTPRequestHandler):
super().__init__(*args, **kwargs)
def _decode_path(self, encoded_path):
- # FIXME implement unquoting
- return encoded_path
+ return urlparse.unquote_to_bytes(encoded_path)
def _serve_local(self, path):
with open(path, 'rb') as infile:
@@ -208,7 +208,7 @@ class DashRequestHandler(hs.BaseHTTPRequestHandler):
self._log_request()
local_path = self._decode_path(self.path)
- outpath = '%s/%s' % (self.server.serve_dir, local_path)
+ outpath = b'/'.join((self.server.serve_dir, local_path))
try:
ds = self.server._streams[local_path]
except KeyError:
@@ -257,8 +257,8 @@ class DashRequestHandler(hs.BaseHTTPRequestHandler):
else:
return self.send_error(HTTPStatus.BAD_REQUEST)
- outpath = '%s/%s' % (self.server.serve_dir, local_path)
- write_path = outpath + '.tmp'
+ outpath = b'/'.join((self.server.serve_dir, local_path))
+ write_path = outpath + b'.tmp'
outfile = stack.enter_context(open(write_path, 'wb'))
while True:
data = infile.read()
@@ -338,7 +338,7 @@ def main(argv):
logger = logging.getLogger('DashServer')
server = DashServer((args.address, args.port), args.ipv4, args.ipv6,
- args.directory, logger)
+ os.fsencode(args.directory), logger)
server.serve_forever()
if __name__ == '__main__':