mirror of
https://github.com/Flowseal/tg-ws-proxy.git
synced 2026-09-05 18:16:11 +03:00
censoring domains
This commit is contained in:
@@ -731,6 +731,7 @@ def main():
|
|||||||
|
|
||||||
console = logging.StreamHandler()
|
console = logging.StreamHandler()
|
||||||
console.setFormatter(log_fmt)
|
console.setFormatter(log_fmt)
|
||||||
|
console.addFilter(DomainCensorFilter())
|
||||||
root.addHandler(console)
|
root.addHandler(console)
|
||||||
|
|
||||||
if args.log_file:
|
if args.log_file:
|
||||||
@@ -741,6 +742,7 @@ def main():
|
|||||||
backups=args.log_backups,
|
backups=args.log_backups,
|
||||||
)
|
)
|
||||||
fh.setFormatter(log_fmt)
|
fh.setFormatter(log_fmt)
|
||||||
|
fh.addFilter(DomainCensorFilter())
|
||||||
root.addHandler(fh)
|
root.addHandler(fh)
|
||||||
|
|
||||||
logging.getLogger('asyncio').setLevel(logging.WARNING)
|
logging.getLogger('asyncio').setLevel(logging.WARNING)
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import socket as _socket
|
|||||||
import urllib.request
|
import urllib.request
|
||||||
import http.client
|
import http.client
|
||||||
import ssl
|
import ssl
|
||||||
|
import logging
|
||||||
|
import re
|
||||||
|
|
||||||
import certifi
|
import certifi
|
||||||
|
|
||||||
@@ -85,6 +87,32 @@ def get_link_host(host: str) -> Optional[str]:
|
|||||||
return host
|
return host
|
||||||
|
|
||||||
|
|
||||||
|
class DomainCensorFilter(logging.Filter):
|
||||||
|
domain_pattern = re.compile(
|
||||||
|
r'(?<![\w-])(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+'
|
||||||
|
r'[a-zA-Z]{2,}(?![\w-])'
|
||||||
|
)
|
||||||
|
|
||||||
|
def _censor_match(self, match):
|
||||||
|
domain = match.group()
|
||||||
|
normalized = domain.casefold().rstrip('.')
|
||||||
|
if normalized == 'telegram.org' or normalized.endswith('.telegram.org') or normalized.endswith('.log'):
|
||||||
|
return domain
|
||||||
|
parts = domain.split('.')
|
||||||
|
if len(parts) < 2:
|
||||||
|
return domain
|
||||||
|
return '.'.join(
|
||||||
|
part if i == len(parts) - 1 else
|
||||||
|
part[:len(part) // 2] + '*' * (len(part) - len(part) // 2)
|
||||||
|
for i, part in enumerate(parts)
|
||||||
|
)
|
||||||
|
|
||||||
|
def filter(self, record):
|
||||||
|
record.msg = self.domain_pattern.sub(self._censor_match, record.getMessage())
|
||||||
|
record.args = ()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
class _PinnedHTTPSHandler(urllib.request.HTTPSHandler):
|
class _PinnedHTTPSHandler(urllib.request.HTTPSHandler):
|
||||||
def https_open(self, req: Request):
|
def https_open(self, req: Request):
|
||||||
host = req.host.split(":")[0]
|
host = req.host.split(":")[0]
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ from typing import Any, Callable, Dict, Optional, Tuple
|
|||||||
import psutil
|
import psutil
|
||||||
|
|
||||||
from proxy import __version__, get_link_host, parse_dc_ip_list, proxy_config, coerce_domain_list
|
from proxy import __version__, get_link_host, parse_dc_ip_list, proxy_config, coerce_domain_list
|
||||||
|
from proxy.utils import DomainCensorFilter
|
||||||
from proxy.tg_ws_proxy import _run
|
from proxy.tg_ws_proxy import _run
|
||||||
from utils.default_config import default_tray_config
|
from utils.default_config import default_tray_config
|
||||||
from utils.diagnostics import diagnose_listen_error
|
from utils.diagnostics import diagnose_listen_error
|
||||||
@@ -237,12 +238,14 @@ def setup_logging(verbose: bool = False, log_max_mb: float = 5) -> None:
|
|||||||
fh = build_log_handler(str(LOG_FILE), log_max_mb=log_max_mb, backups=1)
|
fh = build_log_handler(str(LOG_FILE), log_max_mb=log_max_mb, backups=1)
|
||||||
fh.setLevel(logging.DEBUG)
|
fh.setLevel(logging.DEBUG)
|
||||||
fh.setFormatter(logging.Formatter(_LOG_FMT_FILE, datefmt="%Y-%m-%d %H:%M:%S"))
|
fh.setFormatter(logging.Formatter(_LOG_FMT_FILE, datefmt="%Y-%m-%d %H:%M:%S"))
|
||||||
|
fh.addFilter(DomainCensorFilter())
|
||||||
root.addHandler(fh)
|
root.addHandler(fh)
|
||||||
|
|
||||||
if not IS_FROZEN:
|
if not IS_FROZEN:
|
||||||
ch = logging.StreamHandler(sys.stdout)
|
ch = logging.StreamHandler(sys.stdout)
|
||||||
ch.setLevel(level)
|
ch.setLevel(level)
|
||||||
ch.setFormatter(logging.Formatter(_LOG_FMT_CONSOLE, datefmt="%H:%M:%S"))
|
ch.setFormatter(logging.Formatter(_LOG_FMT_CONSOLE, datefmt="%H:%M:%S"))
|
||||||
|
ch.addFilter(DomainCensorFilter())
|
||||||
root.addHandler(ch)
|
root.addHandler(ch)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user