refactor: replace custom geo manager with Xray-core native geodata auto-update

Remove the panel-side custom geo download feature (service, controller,
/panel/api/custom-geo/* endpoints, CustomGeoResource model, UI tab) in
favor of Xray-core's native geodata section
(https://xtls.github.io/config/geodata.html).

- pass the top-level "geodata" key through xray.Config so it survives
  the template round-trip into the generated config
- add a Geodata Auto-Update section to the Xray Updates modal that
  edits geodata (cron schedule, download outbound, asset list) in the
  config template and restarts Xray on save
- previously downloaded geo files in the bin folder keep working in
  ext: routing rules; the orphaned custom_geo_resources table is left
  in place so existing source URLs stay recoverable
This commit is contained in:
MHSanaei
2026-06-10 18:27:12 +02:00
parent 4002be4ade
commit 3092326d9e
43 changed files with 416 additions and 2875 deletions
+13 -42
View File
@@ -219,48 +219,19 @@
"geofilesUpdateDialogDesc": "Это обновит все геофайлы.",
"geofilesUpdateAll": "Обновить все",
"geofileUpdatePopover": "Геофайлы успешно обновлены",
"customGeoTitle": "Пользовательские GeoSite / GeoIP",
"customGeoAdd": "Добавить",
"customGeoType": "Тип",
"customGeoAlias": "Псевдоним",
"customGeoUrl": "URL",
"customGeoEnabled": "Включено",
"customGeoLastUpdated": "Обновлено",
"customGeoExtColumn": "Маршрутизация (ext:…)",
"customGeoToastUpdateAll": "Все пользовательские источники обновлены",
"customGeoActions": "Действия",
"customGeoEdit": "Изменить",
"customGeoDelete": "Удалить",
"customGeoDownload": "Обновить сейчас",
"customGeoModalAdd": "Добавить источник",
"customGeoModalEdit": "Изменить источник",
"customGeoModalSave": "Сохранить",
"customGeoDeleteConfirm": "Удалить этот пользовательский источник?",
"customGeoRoutingHint": "В правилах маршрутизации используйте значение как ext:файл.dat:тег (замените тег).",
"customGeoInvalidId": "Некорректный идентификатор",
"customGeoAliasesError": "Не удалось загрузить список пользовательских geo",
"customGeoValidationAlias": "Псевдоним: только a-z, цифры, - и _",
"customGeoValidationUrl": "URL должен начинаться с http:// или https://",
"customGeoAliasPlaceholder": "a-z 0-9 _ -",
"customGeoAliasLabelSuffix": " (свой)",
"customGeoToastList": "Список пользовательских geo",
"customGeoToastAdd": "Добавить пользовательский geo",
"customGeoToastUpdate": "Изменить пользовательский geo",
"customGeoToastDelete": "Пользовательский geo-файл «{{ .fileName }}» удалён",
"customGeoToastDownload": "Geofile «{{ .fileName }}» обновлен",
"customGeoErrInvalidType": "Тип должен быть geosite или geoip",
"customGeoErrAliasRequired": "Укажите псевдоним",
"customGeoErrAliasPattern": "Псевдоним содержит недопустимые символы",
"customGeoErrAliasReserved": "Этот псевдоним зарезервирован",
"customGeoErrUrlRequired": "Укажите URL",
"customGeoErrInvalidUrl": "Некорректный URL",
"customGeoErrUrlScheme": "URL должен использовать http или https",
"customGeoErrUrlHost": "Некорректный хост URL",
"customGeoErrDuplicateAlias": "Такой псевдоним уже используется для этого типа",
"customGeoErrNotFound": "Источник не найден",
"customGeoErrDownload": "Ошибка загрузки",
"customGeoErrUpdateAllIncomplete": "Не удалось обновить один или несколько пользовательских источников",
"customGeoEmpty": "Пользовательских источников geo пока нет — нажмите «Добавить», чтобы создать",
"geodataTitle": "Автообновление Geodata",
"geodataHint": "Xray скачивает эти файлы по расписанию и перезагружает их без перезапуска. URL должны быть HTTPS. Файл должен уже существовать в папке bin, прежде чем Xray сможет его обновлять.",
"geodataCron": "Расписание (cron)",
"geodataOutbound": "Скачивать через outbound (необязательно)",
"geodataFile": "Имя файла",
"geodataAddFile": "Добавить файл",
"geodataSaveRestart": "Сохранить и перезапустить Xray",
"geodataConfirmTitle": "Сохранить настройки geodata?",
"geodataConfirmContent": "Шаблон конфигурации Xray будет обновлён, а Xray перезапущен.",
"geodataInvalidUrl": "Для каждого файла нужен HTTPS URL.",
"geodataInvalidFile": "Имя файла должно быть простым, например geosite_custom.dat (без путей).",
"geodataInvalidCron": "Cron должен содержать 5 полей, напр. 0 4 * * *",
"geodataEmpty": "Файлы не настроены. В правилах маршрутизации файлы указываются как ext:geosite_custom.dat:category.",
"dontRefresh": "Установка в процессе. Не обновляйте страницу",
"logs": "Логи",
"config": "Конфигурация",