7 Commits
Author SHA1 Message Date
Hermes ce0aa22672 Fix node id collision, host normalization and blank error text
Three defects made the panel look broken to the operator:

- POST /api/proxies with a Chinese name slugged the id down to its ASCII
  digits ("香港01" -> "01"), collided with an existing node and returned
  HTTP 500 "proxy id already exists". Non-ASCII names now get sequential
  node-N ids; ASCII names keep a readable slug. Both paths de-duplicate.
- A host pasted as a URL ("http://192.168.3.71") went straight to DNS, so
  every check failed with "[Errno -2] Name does not resolve". normalize_host
  accepts host, host:port, scheme://user:pass@host:port and [IPv6]:port, and
  existing configs are healed at startup.
- str(asyncio.TimeoutError()) is empty, so a black-holed proxy showed a blank
  error in the UI and looked like an internal bug. describe_exc always
  produces a reason.

Also:
- Expected validation failures return 400 with an error message instead of
  500 + traceback; the frontend surfaces every API error as a toast.
- PUT/DELETE on an unknown proxy id return 404 instead of silently creating
  or reporting ok=false with 200.
- POST /api/check/<id> forces a check on disabled nodes instead of returning
  ok=true without doing anything.
- Port range is validated (1..65535).
- Store.close() lets tests release SQLite handles.
- 33 unittest cases cover id generation, host normalization, error text,
  startup migration and manual checks.
2026-08-23 14:07:37 +08:00
Hermes 68ad064f80 Add log retention settings and clear logs 2026-05-28 23:36:39 +08:00
Hermes 680cb34000 Improve exit IP failure diagnostics 2026-05-28 22:11:18 +08:00
Hermes dd7cc18c88 Make SOCKS5 exit IP detection robust 2026-05-28 21:31:42 +08:00
Hermes 661078c3bf Show SOCKS5 proxy exit IP 2026-05-28 20:59:21 +08:00
Hermes d9ddf83fd2 Hide notification channel internal summaries 2026-05-28 20:43:07 +08:00
Hermes fdd3f9cade ui: simplify configuration forms 2026-05-28 20:26:44 +08:00