diff --git a/main.py b/main.py
index 4db8359..91cbae3 100644
--- a/main.py
+++ b/main.py
@@ -48,7 +48,12 @@ class WebServer:
data = unquote(data.decode())
if not data: return
- real_addr = "".join([l.replace("X-Real-IP: ", "") for l in data.split("\n") if l.startswith("X-Real-IP: ")][0]).strip() # ТАКОЙ ГАВНАКОД XD
+ real_addr = None
+ for line in data.split("\n"):
+ if line.startswith("X-Real-IP: "):
+ real_addr = line[len("X-Real-IP: "):].strip()
+ break
+
if real_addr and self.proxied:
addr = (real_addr, addr[1])
request = data.split("\n")[0]
@@ -90,22 +95,25 @@ class WebServer:
resp = await f.read()
files = ""
- base_path = file_name.strip('/')
+ norm_path = file_path.replace('\\', '/')
+ base_path = norm_path.replace(self.directory.replace('\\', '/'), '').strip('/')
for item in sorted(os.listdir(file_path)):
item_path = os.path.join(file_path, item)
is_dir = os.path.isdir(item_path)
- if base_path: rel_path = f"{base_path}/{item}"
- else: rel_path = item
+ rel_path = f"{base_path}/{item}" if base_path else item
+ rel_path = rel_path.replace('\\', '/')
- if is_dir: rel_path += "/"
+ if is_dir:
+ rel_path += "/"
+ item += "/"
modify_time = os.path.getmtime(item_path)
modify_datetime = datetime.datetime.fromtimestamp(modify_time)
formatted_time = modify_datetime.strftime("%d.%m.%Y %H:%M:%S")
- files += f'{item} | {formatted_time}
' # TODO: добавить кастом для инфы про файлики
+ files += f'{item} | {formatted_time}
'
resp = resp.replace("", files)
resp = resp.encode()
@@ -117,15 +125,17 @@ class WebServer:
"\r\n"
)
- writer.write(headers + resp)
+ writer.write(headers.encode() + resp)
else:
await self.log(self.e404_msg, addr, file_path)
+ async with aiofiles.open(self._e404_file, "r", encoding="utf-8") as f:
+ content = await f.read()
response = (
"HTTP/1.1 404 Not Found\r\n"
"Content-Type: text/html; charset=utf-8\r\n"
f"Server: {self.name}\r\n"
"\r\n"
- f"{open(self._e404_file, encoding="utf-8").read()}"
+ f"{content}"
)
writer.write(response.encode())
await writer.drain()