From f09daea63ec9cde27d421b96d9d56e8bc22445dd Mon Sep 17 00:00:00 2001 From: justuser Date: Fri, 16 Aug 2024 18:17:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=B8=D0=B4=20site.jet=20=D0=B2=D0=BC?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=20127.0.0.1:8000//site.jet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domain_check.py | 2 +- interface.py | 6 +---- main.py | 8 +++++- srv_interface.py | 6 +---- web_proxy.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 web_proxy.py diff --git a/domain_check.py b/domain_check.py index 492c4b7..d406c62 100644 --- a/domain_check.py +++ b/domain_check.py @@ -1,5 +1,5 @@ from re import compile, sub -domains = ['jet', 'mirror', 'org', 'info', 'news', 'me'] +domains = ['jet', 'dyn'] def domain_ok(domain): global domains diff --git a/interface.py b/interface.py index 565a4ff..527d37d 100644 --- a/interface.py +++ b/interface.py @@ -77,11 +77,7 @@ def update_sites(n, s_val): res = [] for i in next(walk('cached/'), (None, None, []))[1]: conf = read(f'cached/{i}/config.json') - if conf['type'] == 'dynamic': - res.append(html.Div([ dcc.Link(children=i, href=f'http://bore.pub:{conf["port"]}', - target='_blank') ], className='sites_elem')) - else: - res.append(html.Div([ dcc.Link(children=i, href=f'{domain}/{i}', + res.append(html.Div([ dcc.Link(children=i, href=f'http://{i}', target='_blank') ], className='sites_elem')) return res diff --git a/main.py b/main.py index 0286736..84acbb4 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,9 @@ from multiprocessing import Process from network import * from updater import * from proxy import * +from web_proxy import * from status import * + from db import * # @@ -47,14 +49,18 @@ def main(): # http сервер http = Thread(target = server_http) http.start() - # сервер обработки запросов + # Cервер обработки запросов srv = Thread(target = server, args=(http_port,)) srv.start() + # Прокси для браузера + http_proxy = Thread(target = web_proxy) + http_proxy.start() # Стартуем авто-поиск портов и авто-обновление сайтов updater = Thread(target = update_demon, args=(serv_port,)) updater.start() + # DEPRECATED??? DEPRECATED DEPRECATED # Стартуем интерфейс system('python interface.py') diff --git a/srv_interface.py b/srv_interface.py index 6f3183d..3697f37 100644 --- a/srv_interface.py +++ b/srv_interface.py @@ -62,11 +62,7 @@ def update_sites(n, s_val): res = [] for i in next(walk('cached/'), (None, None, []))[1]: conf = read(f'cached/{i}/config.json') - if conf['type'] == 'dynamic': - res.append(html.Div([ dcc.Link(children=i, href=f'http://bore.pub:{conf["port"]}', - target='_blank') ], className='sites_elem')) - else: - res.append(html.Div([ dcc.Link(children=i, href=f'{domain}/{i}', + res.append(html.Div([ dcc.Link(children=i, href=f'{domain}/{i}', target='_blank') ], className='sites_elem')) return res diff --git a/web_proxy.py b/web_proxy.py new file mode 100644 index 0000000..448d099 --- /dev/null +++ b/web_proxy.py @@ -0,0 +1,69 @@ +import http.server +import socketserver +import urllib.request +import logging + +from db import * +domain = read()['domain'] + +# Логирование +#logging.basicConfig(level=ic, format='%(asctime)s - %(message)s') +from icecream import ic +ic.disable() # Выключить отладку + +class Proxy(http.server.SimpleHTTPRequestHandler): + def do_GET(self): + # Log the requested domain + ic(f"Request for: {self.path}") + + # 'js-check.jet/favicon.ico' -> '127.0.0.1:8000/favicon.ico' + target = self.path + # Если статичный + if 'jet' in target: + target = f'{domain}/{target[7:]}' # http://127.0.0.1:8000 / js-check.jet + ic(f"Modded request: {target}") + elif 'dyn' in target: + addr = target[target.find('://')+3:] + addr = addr[:addr.find('/')] + port = read(f'cached/{addr}/config.json')['port'] + target = f'http://bore.del.pw:{port}/{target[target.find("dyn")+4:]}' + ic(f"Modded request: {target}") + + # Forward the request to the actual server + try: + with urllib.request.urlopen(target) as response: + self.send_response(response.getcode()) + self.send_header("Content-type", response.headers.get_content_type()) + self.end_headers() + self.wfile.write(response.read()) + except Exception as e: + self.send_error(500, f"Error: {str(e)}") + + def do_POST(self): + # Log the requested domain + ic(f"Request for: {self.path}") + + if 'jet' in target: + target = f'{domain}/{target[7:]}' # http://127.0.0.1:8000 / js-check.jet + ic(f"Modded request: {target}") + else: + pass + + # Forward the request to the actual server + try: + content_length = int(self.headers['Content-Length']) + post_data = self.rfile.read(content_length) + req = urllib.request.Request(self.path, data=post_data, method='POST') + with urllib.request.urlopen(req) as response: + self.send_response(response.getcode()) + self.send_header("Content-type", response.headers.get_content_type()) + self.end_headers() + self.wfile.write(response.read()) + except Exception as e: + self.send_error(500, f"Error: {str(e)}") + +def web_proxy(): + PORT = 8080 + with socketserver.TCPServer(("", PORT), Proxy) as httpd: + ic(f"Serving on port {PORT}") + httpd.serve_forever()