mirror of
https://github.com/Flowseal/tg-ws-proxy.git
synced 2026-08-10 08:13:18 +03:00
Save user domains instead of erasing; closes #1177
This commit is contained in:
@@ -474,12 +474,11 @@ async def _run(stop_event: Optional[asyncio.Event] = None):
|
|||||||
ip_fail_until.clear()
|
ip_fail_until.clear()
|
||||||
_client_tasks.clear()
|
_client_tasks.clear()
|
||||||
|
|
||||||
if proxy_config.fallback_cfproxy:
|
user_cf_domains = proxy_config.cfproxy_user_domains
|
||||||
user = proxy_config.cfproxy_user_domains
|
if user_cf_domains:
|
||||||
if user:
|
balancer.update_domains_list(user_cf_domains)
|
||||||
balancer.update_domains_list(user)
|
else:
|
||||||
else:
|
start_cfproxy_domain_refresh()
|
||||||
start_cfproxy_domain_refresh()
|
|
||||||
|
|
||||||
secret_bytes = bytes.fromhex(proxy_config.secret)
|
secret_bytes = bytes.fromhex(proxy_config.secret)
|
||||||
|
|
||||||
@@ -520,7 +519,7 @@ async def _run(stop_event: Optional[asyncio.Event] = None):
|
|||||||
ip = proxy_config.dc_redirects.get(dc)
|
ip = proxy_config.dc_redirects.get(dc)
|
||||||
log.info(" DC%d: %s", dc, ip)
|
log.info(" DC%d: %s", dc, ip)
|
||||||
if proxy_config.fallback_cfproxy:
|
if proxy_config.fallback_cfproxy:
|
||||||
user_domain = "user" if proxy_config.cfproxy_user_domains else "auto"
|
user_domain = ", ".join(proxy_config.cfproxy_user_domains) if proxy_config.cfproxy_user_domains else "auto"
|
||||||
log.info(" CF proxy: enabled (%s)", user_domain)
|
log.info(" CF proxy: enabled (%s)", user_domain)
|
||||||
if proxy_config.cfproxy_worker_domains:
|
if proxy_config.cfproxy_worker_domains:
|
||||||
log.info(" CF worker: enabled (%s)",
|
log.info(" CF worker: enabled (%s)",
|
||||||
|
|||||||
+42
-13
@@ -351,7 +351,9 @@ class TrayConfigFormWidgets:
|
|||||||
autostart_var: Optional[Any]
|
autostart_var: Optional[Any]
|
||||||
check_updates_var: Optional[Any]
|
check_updates_var: Optional[Any]
|
||||||
cfproxy_var: Optional[Any] = None
|
cfproxy_var: Optional[Any] = None
|
||||||
|
cfproxy_user_domain_enabled_var: Optional[Any] = None
|
||||||
cfproxy_user_domain_var: Optional[Any] = None
|
cfproxy_user_domain_var: Optional[Any] = None
|
||||||
|
cfproxy_worker_enabled_var: Optional[Any] = None
|
||||||
cfproxy_worker_domain_var: Optional[Any] = None
|
cfproxy_worker_domain_var: Optional[Any] = None
|
||||||
appearance_var: Optional[Any] = None
|
appearance_var: Optional[Any] = None
|
||||||
language_var: Optional[Any] = None
|
language_var: Optional[Any] = None
|
||||||
@@ -591,7 +593,9 @@ def install_tray_config_form(
|
|||||||
saved_user_domains = coerce_domain_list(
|
saved_user_domains = coerce_domain_list(
|
||||||
cfg.get("cfproxy_user_domain", default_config.get("cfproxy_user_domain", ""))
|
cfg.get("cfproxy_user_domain", default_config.get("cfproxy_user_domain", ""))
|
||||||
)
|
)
|
||||||
cf_custom_cb_var = ctk.BooleanVar(value=bool(saved_user_domains))
|
cf_custom_cb_var = ctk.BooleanVar(
|
||||||
|
value=cfg.get("cfproxy_user_domain_enabled", bool(saved_user_domains))
|
||||||
|
)
|
||||||
cf_custom_cb = _checkbox(ctk, cf_custom_row, theme, t("label.cf_custom_domain"), cf_custom_cb_var)
|
cf_custom_cb = _checkbox(ctk, cf_custom_row, theme, t("label.cf_custom_domain"), cf_custom_cb_var)
|
||||||
cf_custom_cb.pack(side="left", padx=(0, 10))
|
cf_custom_cb.pack(side="left", padx=(0, 10))
|
||||||
attach_ctk_tooltip(cf_custom_cb, t("tip.cfproxy_user_domain_cb"))
|
attach_ctk_tooltip(cf_custom_cb, t("tip.cfproxy_user_domain_cb"))
|
||||||
@@ -615,8 +619,6 @@ def install_tray_config_form(
|
|||||||
def _sync_domain_entry(*_):
|
def _sync_domain_entry(*_):
|
||||||
state = "normal" if cf_custom_cb_var.get() else "disabled"
|
state = "normal" if cf_custom_cb_var.get() else "disabled"
|
||||||
cf_domain_entry.configure(state=state)
|
cf_domain_entry.configure(state=state)
|
||||||
if not cf_custom_cb_var.get():
|
|
||||||
cfproxy_user_domain_var.set("")
|
|
||||||
|
|
||||||
cf_custom_cb_var.trace_add("write", _sync_domain_entry)
|
cf_custom_cb_var.trace_add("write", _sync_domain_entry)
|
||||||
_sync_domain_entry()
|
_sync_domain_entry()
|
||||||
@@ -626,16 +628,25 @@ def install_tray_config_form(
|
|||||||
cf_worker_row = ctk.CTkFrame(cf_worker_inner, fg_color="transparent")
|
cf_worker_row = ctk.CTkFrame(cf_worker_inner, fg_color="transparent")
|
||||||
cf_worker_row.pack(fill="x", pady=(0, 4))
|
cf_worker_row.pack(fill="x", pady=(0, 4))
|
||||||
cf_worker_lbl = _label(ctk, cf_worker_row, theme, t("label.cfworker_domains"), size=11)
|
cf_worker_lbl = _label(ctk, cf_worker_row, theme, t("label.cfworker_domains"), size=11)
|
||||||
cf_worker_lbl.pack(anchor="w", pady=(0, 2))
|
cf_worker_lbl.pack(side="left", anchor="w", pady=(0, 2))
|
||||||
|
|
||||||
cf_worker_input = ctk.CTkFrame(cf_worker_inner, fg_color="transparent")
|
cf_worker_input = ctk.CTkFrame(cf_worker_inner, fg_color="transparent")
|
||||||
cf_worker_input.pack(fill="x")
|
cf_worker_input.pack(fill="x")
|
||||||
|
|
||||||
cfproxy_worker_domain_var = ctk.StringVar(
|
saved_worker_domains = coerce_domain_list(
|
||||||
value=", ".join(coerce_domain_list(
|
cfg.get("cfproxy_worker_domain", default_config.get("cfproxy_worker_domain", ""))
|
||||||
cfg.get("cfproxy_worker_domain", default_config.get("cfproxy_worker_domain", ""))
|
|
||||||
))
|
|
||||||
)
|
)
|
||||||
|
cfproxy_worker_enabled_var = ctk.BooleanVar(
|
||||||
|
value=cfg.get("cfproxy_worker_enabled", bool(saved_worker_domains))
|
||||||
|
)
|
||||||
|
cf_worker_cb = _checkbox(
|
||||||
|
ctk, cf_worker_input, theme, t("label.cf_custom_domain"),
|
||||||
|
cfproxy_worker_enabled_var,
|
||||||
|
)
|
||||||
|
cf_worker_cb.pack(side="left", padx=(0, 10))
|
||||||
|
attach_ctk_tooltip(cf_worker_cb, t("tip.cfworker_domain"))
|
||||||
|
|
||||||
|
cfproxy_worker_domain_var = ctk.StringVar(value=", ".join(saved_worker_domains))
|
||||||
cf_worker_entry = _entry(
|
cf_worker_entry = _entry(
|
||||||
ctk, cf_worker_input, theme, var=cfproxy_worker_domain_var,
|
ctk, cf_worker_input, theme, var=cfproxy_worker_domain_var,
|
||||||
height=32, radius=8,
|
height=32, radius=8,
|
||||||
@@ -649,13 +660,16 @@ def install_tray_config_form(
|
|||||||
btn = _cfworker_test_btn[0]
|
btn = _cfworker_test_btn[0]
|
||||||
if btn is None:
|
if btn is None:
|
||||||
return
|
return
|
||||||
enabled = bool(coerce_domain_list(cfproxy_worker_domain_var.get()))
|
enabled = (
|
||||||
|
cfproxy_worker_enabled_var.get()
|
||||||
|
and bool(coerce_domain_list(cfproxy_worker_domain_var.get()))
|
||||||
|
)
|
||||||
btn.configure(state="normal" if enabled else "disabled")
|
btn.configure(state="normal" if enabled else "disabled")
|
||||||
|
|
||||||
def _on_cfworker_test():
|
def _on_cfworker_test():
|
||||||
domains = coerce_domain_list(cfproxy_worker_domain_var.get())
|
domains = coerce_domain_list(cfproxy_worker_domain_var.get())
|
||||||
btn = _cfworker_test_btn[0]
|
btn = _cfworker_test_btn[0]
|
||||||
if not domains or btn is None:
|
if not cfproxy_worker_enabled_var.get() or not domains or btn is None:
|
||||||
return
|
return
|
||||||
btn.configure(text=t("button.test_loading"), state="disabled")
|
btn.configure(text=t("button.test_loading"), state="disabled")
|
||||||
import threading as _threading
|
import threading as _threading
|
||||||
@@ -686,16 +700,23 @@ def install_tray_config_form(
|
|||||||
).pack(side="right")
|
).pack(side="right")
|
||||||
|
|
||||||
_cfworker_test_widget = ctk.CTkButton(
|
_cfworker_test_widget = ctk.CTkButton(
|
||||||
cf_worker_input, text=t("button.test"), width=56, height=32,
|
cf_worker_row, text=t("button.test"), width=56, height=28,
|
||||||
font=(theme.ui_font_family, 13), corner_radius=8,
|
font=(theme.ui_font_family, 13), corner_radius=8,
|
||||||
fg_color=theme.tg_blue, hover_color=theme.tg_blue_hover,
|
fg_color=theme.tg_blue, hover_color=theme.tg_blue_hover,
|
||||||
text_color="#ffffff", border_width=1, border_color=theme.field_border,
|
text_color="#ffffff", border_width=1, border_color=theme.field_border,
|
||||||
command=_on_cfworker_test,
|
command=_on_cfworker_test,
|
||||||
)
|
)
|
||||||
_cfworker_test_widget.pack(side="right", padx=(0, 6))
|
_cfworker_test_widget.pack(side="right")
|
||||||
_cfworker_test_btn[0] = _cfworker_test_widget
|
_cfworker_test_btn[0] = _cfworker_test_widget
|
||||||
|
|
||||||
|
def _sync_cfworker_entry(*_):
|
||||||
|
state = "normal" if cfproxy_worker_enabled_var.get() else "disabled"
|
||||||
|
cf_worker_entry.configure(state=state)
|
||||||
|
_sync_cfworker_test_button()
|
||||||
|
|
||||||
|
cfproxy_worker_enabled_var.trace_add("write", _sync_cfworker_entry)
|
||||||
cfproxy_worker_domain_var.trace_add("write", _sync_cfworker_test_button)
|
cfproxy_worker_domain_var.trace_add("write", _sync_cfworker_test_button)
|
||||||
_sync_cfworker_test_button()
|
_sync_cfworker_entry()
|
||||||
|
|
||||||
log_inner = _config_section(ctk, frame, theme, t("section.logs"))
|
log_inner = _config_section(ctk, frame, theme, t("section.logs"))
|
||||||
|
|
||||||
@@ -780,7 +801,9 @@ def install_tray_config_form(
|
|||||||
adv_entries=adv_entries, adv_keys=adv_keys,
|
adv_entries=adv_entries, adv_keys=adv_keys,
|
||||||
autostart_var=autostart_var, check_updates_var=check_updates_var,
|
autostart_var=autostart_var, check_updates_var=check_updates_var,
|
||||||
cfproxy_var=cfproxy_var,
|
cfproxy_var=cfproxy_var,
|
||||||
|
cfproxy_user_domain_enabled_var=cf_custom_cb_var,
|
||||||
cfproxy_user_domain_var=cfproxy_user_domain_var,
|
cfproxy_user_domain_var=cfproxy_user_domain_var,
|
||||||
|
cfproxy_worker_enabled_var=cfproxy_worker_enabled_var,
|
||||||
cfproxy_worker_domain_var=cfproxy_worker_domain_var,
|
cfproxy_worker_domain_var=cfproxy_worker_domain_var,
|
||||||
appearance_var=appearance_var,
|
appearance_var=appearance_var,
|
||||||
language_var=language_var,
|
language_var=language_var,
|
||||||
@@ -872,8 +895,14 @@ def validate_config_form(
|
|||||||
new_cfg["check_updates"] = bool(widgets.check_updates_var.get())
|
new_cfg["check_updates"] = bool(widgets.check_updates_var.get())
|
||||||
if widgets.cfproxy_var is not None:
|
if widgets.cfproxy_var is not None:
|
||||||
new_cfg["cfproxy"] = bool(widgets.cfproxy_var.get())
|
new_cfg["cfproxy"] = bool(widgets.cfproxy_var.get())
|
||||||
|
if widgets.cfproxy_user_domain_enabled_var is not None:
|
||||||
|
new_cfg["cfproxy_user_domain_enabled"] = bool(
|
||||||
|
widgets.cfproxy_user_domain_enabled_var.get()
|
||||||
|
)
|
||||||
if widgets.cfproxy_user_domain_var is not None:
|
if widgets.cfproxy_user_domain_var is not None:
|
||||||
new_cfg["cfproxy_user_domain"] = coerce_domain_list(widgets.cfproxy_user_domain_var.get())
|
new_cfg["cfproxy_user_domain"] = coerce_domain_list(widgets.cfproxy_user_domain_var.get())
|
||||||
|
if widgets.cfproxy_worker_enabled_var is not None:
|
||||||
|
new_cfg["cfproxy_worker_enabled"] = bool(widgets.cfproxy_worker_enabled_var.get())
|
||||||
if widgets.cfproxy_worker_domain_var is not None:
|
if widgets.cfproxy_worker_domain_var is not None:
|
||||||
new_cfg["cfproxy_worker_domain"] = coerce_domain_list(widgets.cfproxy_worker_domain_var.get())
|
new_cfg["cfproxy_worker_domain"] = coerce_domain_list(widgets.cfproxy_worker_domain_var.get())
|
||||||
if widgets.appearance_var is not None:
|
if widgets.appearance_var is not None:
|
||||||
|
|||||||
@@ -20,7 +20,9 @@ _TRAY_DEFAULTS_COMMON: Dict[str, Any] = {
|
|||||||
"buf_kb": 256,
|
"buf_kb": 256,
|
||||||
"pool_size": 4,
|
"pool_size": 4,
|
||||||
"cfproxy": True,
|
"cfproxy": True,
|
||||||
|
"cfproxy_user_domain_enabled": False,
|
||||||
"cfproxy_user_domain": [],
|
"cfproxy_user_domain": [],
|
||||||
|
"cfproxy_worker_enabled": False,
|
||||||
"cfproxy_worker_domain": [],
|
"cfproxy_worker_domain": [],
|
||||||
"force_test_dc": False,
|
"force_test_dc": False,
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-2
@@ -196,6 +196,14 @@ def load_config() -> dict:
|
|||||||
try:
|
try:
|
||||||
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
|
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
|
||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
|
if "cfproxy_user_domain_enabled" not in data:
|
||||||
|
data["cfproxy_user_domain_enabled"] = bool(
|
||||||
|
coerce_domain_list(data.get("cfproxy_user_domain"))
|
||||||
|
)
|
||||||
|
if "cfproxy_worker_enabled" not in data:
|
||||||
|
data["cfproxy_worker_enabled"] = bool(
|
||||||
|
coerce_domain_list(data.get("cfproxy_worker_domain"))
|
||||||
|
)
|
||||||
for k, v in DEFAULT_CONFIG.items():
|
for k, v in DEFAULT_CONFIG.items():
|
||||||
data.setdefault(k, v)
|
data.setdefault(k, v)
|
||||||
cfg = data
|
cfg = data
|
||||||
@@ -335,8 +343,22 @@ def apply_proxy_config(cfg: dict) -> bool:
|
|||||||
pc.buffer_size = max(4, cfg.get("buf_kb", DEFAULT_CONFIG["buf_kb"])) * 1024
|
pc.buffer_size = max(4, cfg.get("buf_kb", DEFAULT_CONFIG["buf_kb"])) * 1024
|
||||||
pc.pool_size = max(0, cfg.get("pool_size", DEFAULT_CONFIG["pool_size"]))
|
pc.pool_size = max(0, cfg.get("pool_size", DEFAULT_CONFIG["pool_size"]))
|
||||||
pc.fallback_cfproxy = cfg.get("cfproxy", DEFAULT_CONFIG["cfproxy"])
|
pc.fallback_cfproxy = cfg.get("cfproxy", DEFAULT_CONFIG["cfproxy"])
|
||||||
pc.cfproxy_user_domains = coerce_domain_list(cfg.get("cfproxy_user_domain", DEFAULT_CONFIG["cfproxy_user_domain"]))
|
cfproxy_user_domains = coerce_domain_list(
|
||||||
pc.cfproxy_worker_domains = coerce_domain_list(cfg.get("cfproxy_worker_domain", DEFAULT_CONFIG["cfproxy_worker_domain"]))
|
cfg.get("cfproxy_user_domain", DEFAULT_CONFIG["cfproxy_user_domain"])
|
||||||
|
)
|
||||||
|
cfproxy_worker_domains = coerce_domain_list(
|
||||||
|
cfg.get("cfproxy_worker_domain", DEFAULT_CONFIG["cfproxy_worker_domain"])
|
||||||
|
)
|
||||||
|
pc.cfproxy_user_domains = (
|
||||||
|
cfproxy_user_domains
|
||||||
|
if cfg.get("cfproxy_user_domain_enabled", bool(cfproxy_user_domains))
|
||||||
|
else []
|
||||||
|
)
|
||||||
|
pc.cfproxy_worker_domains = (
|
||||||
|
cfproxy_worker_domains
|
||||||
|
if cfg.get("cfproxy_worker_enabled", bool(cfproxy_worker_domains))
|
||||||
|
else []
|
||||||
|
)
|
||||||
pc.force_test_dc = cfg.get("force_test_dc", DEFAULT_CONFIG["force_test_dc"])
|
pc.force_test_dc = cfg.get("force_test_dc", DEFAULT_CONFIG["force_test_dc"])
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user