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