-
Notifications
You must be signed in to change notification settings - Fork 176
Expand file tree
/
Copy pathhide_private_data.py
More file actions
64 lines (52 loc) · 2.06 KB
/
Copy pathhide_private_data.py
File metadata and controls
64 lines (52 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import re
from loguru import logger
def mask_sensitive_data(config_str: str) -> str:
"""
Маскирует приватные данные (прокси, токены, пароли и т.п.) в строке конфига.
"""
masked = config_str
# Прокси: user:pass@host:port → user:***@host:port
masked = re.sub(
r"([\w\-]+):([\w\-]+)@([\w\.\-]+):(\d+)",
lambda m: f"{m.group(1)}:***@{m.group(3)}:{m.group(4)}",
masked,
)
# Telegram токен
masked = re.sub(
r"(tg_token[\"']?\s*[:=]\s*[\"'])([^\"']+)([\"'])",
lambda m: f"{m.group(1)}{m.group(2)[:5]}***{m.group(3)}",
masked,
)
# Telegram chat_id
masked = re.sub(
r"(tg_chat_id[\"']?\s*[:=]\s*)(\[?[^\]]*\]?)",
lambda m: f"{m.group(1)}['***']",
masked,
)
# proxy_change_url → скрываем почти полностью, оставляем домен
masked = re.sub(
r"(proxy_change_url[\"']?\s*[:=]\s*[\"'])([^\"']+)([\"'])",
lambda m: f"{m.group(1)}{_mask_url(m.group(2))}{m.group(3)}",
masked,
)
# Общая маскировка чувствительных ключей (password, token, api_key, secret)
masked = re.sub(
r"((?:password|token|api_key|secret)[\"']?\s*[:=]\s*[\"'])([^\"']+)([\"'])",
lambda m: f"{m.group(1)}***{m.group(3)}",
masked,
flags=re.IGNORECASE,
)
return masked
def _mask_url(url: str) -> str:
"""Маскирует URL, оставляя только домен для наглядности."""
match = re.search(r"https?://([^/]+)/?", url)
if match:
domain = match.group(1)
return f"https://{domain}/***"
return "***"
def log_config(config, version: str):
"""
Безопасно логирует конфигурацию, скрывая чувствительные данные.
"""
safe_config_str = mask_sensitive_data(str(config))
logger.info(f"Запуск AvitoParse v{version} с настройками:\n{safe_config_str}")