Kuzz007
2736f9beb3
feat(xray): autocomplete geosite/geoip categories in the routing rule editor
...
Writing a routing rule today means remembering exact geosite:/geoip:/
ext:file:code syntax by hand, with no way to discover what categories
actually exist in the .dat files sitting in the bin folder -- including
custom ones like geosite_roscom.dat added via the Geodata auto-update
feature. The Domain/IP fields in the rule editor now suggest categories
as you type (e.g. "you" -> "geosite:youtube"), built live from whatever
.dat files are actually on disk, while still accepting any free-typed
value exactly as before.
Backend: GET /panel/api/xray/getGeodataCategories scans the bin folder,
parses matched geosite*/geoip*.dat files via xray-core's own exported
protobuf types, and formats each category as the exact rule syntax
xray-core's parser accepts -- geosite:/geoip: for the default files,
ext:<file>:<code> for anything else (there's no shorthand for custom
files). Cached in memory keyed by each file's (name, size, modTime) so
a request-time scan is cheap until a file actually changes.
Frontend: the Domain/IP inputs become Select "tags" fields fed by a new
useGeodataCategories() query hook, with an explicit substring filter so
"you" matches "geosite:youtube" (not a prefix). The array<->CSV-string
adapter lives entirely at the FormField transform boundary, so the
underlying form schema and saved rule shape are unchanged.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-26 17:13:07 +03:00
..
2026-07-17 00:33:06 +02:00
2026-07-17 00:33:06 +02:00
2026-07-12 15:09:52 +02:00
2026-07-26 12:42:20 +03:00
2026-07-25 00:39:41 +03:00
2026-07-17 00:33:06 +02:00
2026-06-20 10:35:46 +02:00
2026-06-27 12:08:20 +02:00
2026-07-05 02:06:58 +02:00
2026-07-17 00:33:06 +02:00
2026-07-05 21:17:25 +02:00
2026-07-25 17:25:58 +03:00
2026-07-17 00:33:06 +02:00
2026-06-27 15:42:22 +02:00
2026-07-17 00:33:06 +02:00
2026-07-08 20:53:42 +02:00
2026-07-17 00:33:06 +02:00
2026-07-11 22:48:51 +02:00
2026-07-21 15:49:43 +02:00
2026-07-11 22:48:57 +02:00
2026-07-07 15:05:22 +02:00
2026-07-05 20:28:26 +02:00
2026-06-24 13:02:42 +02:00
2026-06-10 15:19:22 +02:00
2026-06-14 20:57:14 +02:00
2026-06-11 12:04:02 +02:00
2026-06-17 15:55:56 +02:00
2026-07-02 09:17:47 +02:00
2026-07-05 01:58:18 +03:00
2026-07-26 11:16:39 +03:00
2026-07-21 15:49:43 +02:00
2026-07-17 00:33:06 +02:00
2026-07-17 00:33:06 +02:00
2026-06-24 13:02:42 +02:00
2026-07-10 12:20:35 +02:00
2026-07-02 09:17:47 +02:00
2026-07-21 15:57:55 +02:00
2026-07-07 12:00:43 +02:00
2026-06-10 15:19:22 +02:00
2026-06-10 15:19:22 +02:00
2026-07-17 00:33:06 +02:00
2026-06-29 13:39:03 +02:00
2026-07-21 15:49:43 +02:00
2026-07-21 15:50:50 +02:00
2026-07-05 20:28:26 +02:00
2026-07-02 09:45:54 +02:00
2026-07-25 17:25:58 +03:00
2026-06-10 15:19:22 +02:00
2026-07-23 15:34:42 +02:00
2026-07-05 20:28:26 +02:00
2026-06-27 15:42:22 +02:00
2026-07-02 13:27:36 +02:00
2026-07-08 23:35:20 +02:00
2026-07-23 18:52:42 +02:00
2026-07-26 11:16:39 +03:00
2026-07-26 11:16:39 +03:00
2026-06-20 10:35:46 +02:00
2026-06-10 15:19:22 +02:00
2026-07-02 13:37:06 +02:00
2026-07-23 15:34:42 +02:00
2026-07-02 16:24:18 +02:00
2026-07-23 15:34:42 +02:00
2026-07-02 16:24:18 +02:00
2026-07-08 22:12:28 +02:00
2026-07-23 15:34:42 +02:00
2026-07-17 00:33:06 +02:00
2026-06-24 13:02:42 +02:00
2026-06-24 13:02:42 +02:00
2026-06-27 13:50:06 +02:00
2026-07-21 15:57:55 +02:00
2026-06-15 15:17:03 +02:00
2026-06-27 15:42:22 +02:00
2026-07-07 01:13:24 +02:00
2026-07-07 01:13:24 +02:00
2026-07-07 01:13:24 +02:00
2026-07-06 17:55:57 +02:00
2026-07-17 00:33:06 +02:00
2026-07-08 15:30:56 +02:00
2026-06-22 20:20:55 +02:00
2026-07-02 13:37:06 +02:00
2026-07-11 22:48:57 +02:00
2026-07-23 15:34:42 +02:00
2026-07-03 01:12:32 +02:00
2026-07-26 11:42:24 +03:00
2026-07-26 11:42:24 +03:00
2026-07-08 20:31:00 +02:00
2026-07-08 20:31:00 +02:00
2026-06-12 12:03:22 +02:00
2026-06-27 11:22:45 +02:00
2026-07-05 20:18:59 +02:00
2026-06-11 15:14:08 +02:00
2026-07-21 15:57:55 +02:00
2026-07-09 01:18:30 +02:00
2026-06-12 12:03:22 +02:00
2026-07-26 11:42:24 +03:00
2026-07-17 00:33:06 +02:00
2026-06-26 00:10:30 +02:00
2026-06-25 23:30:13 +02:00
2026-07-07 01:13:24 +02:00
2026-07-08 22:12:28 +02:00
2026-07-08 22:12:28 +02:00
2026-07-02 09:36:07 +02:00
2026-07-07 15:05:23 +02:00
2026-07-02 13:37:06 +02:00
2026-07-23 15:35:11 +02:00
2026-07-23 15:35:11 +02:00
2026-06-20 01:09:53 +02:00
2026-07-05 20:28:26 +02:00
2026-07-11 23:17:57 +02:00
2026-06-27 15:42:22 +02:00
2026-06-16 12:19:33 +02:00
2026-06-16 12:19:33 +02:00
2026-06-22 20:20:55 +02:00
2026-06-22 20:20:55 +02:00
2026-06-10 15:19:22 +02:00
2026-07-17 00:33:06 +02:00
2026-07-08 22:12:28 +02:00
2026-07-23 15:35:11 +02:00
2026-07-23 15:35:11 +02:00
2026-07-23 15:34:42 +02:00
2026-06-23 10:48:01 +02:00
2026-07-23 15:34:42 +02:00
2026-07-26 00:39:32 +03:00
2026-07-26 00:39:32 +03:00
2026-07-23 15:34:42 +02:00
2026-07-23 15:34:42 +02:00
2026-07-17 00:33:06 +02:00
2026-07-08 22:10:54 +02:00
2026-07-12 20:14:22 +02:00
2026-07-12 20:14:22 +02:00
2026-07-06 09:24:18 +02:00
2026-06-24 21:22:42 +02:00
2026-06-20 00:37:35 +02:00
2026-07-17 00:33:06 +02:00
2026-07-14 13:01:40 +02:00
2026-06-16 12:19:33 +02:00
2026-06-16 12:19:33 +02:00
2026-07-02 13:57:34 +02:00
2026-07-21 15:59:07 +02:00
2026-06-17 14:11:35 +02:00
2026-07-12 00:30:47 +02:00
2026-06-10 15:19:22 +02:00
2026-07-05 20:28:26 +02:00
2026-07-17 00:33:06 +02:00
2026-07-02 16:12:46 +02:00
2026-06-10 15:19:22 +02:00
2026-06-17 15:55:47 +02:00
2026-06-10 15:19:22 +02:00
2026-07-02 16:12:46 +02:00
2026-07-26 00:39:32 +03:00
2026-07-02 16:12:46 +02:00
2026-07-23 15:34:42 +02:00
2026-07-23 15:34:42 +02:00
2026-07-17 00:33:06 +02:00
2026-07-23 15:34:42 +02:00
2026-07-23 15:34:42 +02:00
2026-07-26 17:13:07 +03:00
2026-07-26 17:13:07 +03:00
2026-07-17 00:33:06 +02:00
2026-07-17 00:33:06 +02:00
2026-07-21 15:51:46 +02:00
2026-07-26 17:13:07 +03:00
2026-06-15 00:43:49 +02:00
2026-06-28 00:44:38 +02:00
2026-06-23 17:38:16 +02:00
2026-07-26 00:39:32 +03:00