diff --git a/CHANGELOG.md b/CHANGELOG.md index 102f137..a1098d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ * Установка теперь по шагам, а все ссылки разложены по полочкам: основные и запасные. Раньше они сыпались потоком, как лента новостей. * Сайт для маскировки подбирается среди соседей по подсети, а не «у всех один». Свой домен по-прежнему лучший вариант. REALITY теперь с `xtls-rprx-vision`, Hysteria2 отвечает на чужой запрос страницей сайта. * `kit check --deep` подключается к серверу настоящим клиентом, `--fix` лечит безопасное. Общий лимит трафика считается по всем подключениям пользователя, а в подписке Clash есть «Авто»: клиент сам выбирает быстрейший протокол. DNS в подписках теперь по DoH через прокси: запросы имён не гуляют где попало. -* Рядом с подпиской теперь ссылки «открыть в Karing и Happ»: одно нажатие, и подписка добавлена с названием. Со своим доменом панель и подписку можно открывать и по домену: `--panel-on domain` при установке или `kit net panel domain` потом. Вернулся `--restore`: чистый сервер поднимается из `kit backup`, как из резервной копии настроек телефона. Ссылки `kit user link --amnezia` и `--telegram` для AmneziaVPN и Telegram теперь одной командой, а исправление времени на Debian 13 прислал [xlok1e](https://github.com/xlok1e), спасибо. +* Рядом с подпиской теперь ссылки «открыть в приложении»: одно нажатие, и подписка добавлена с названием. Со своим доменом панель и подписку можно открывать и по домену: `--panel-on domain` при установке или `kit net panel domain` потом. Вернулся `--restore`: чистый сервер поднимается из `kit backup`, как из резервной копии настроек телефона. Ссылки `kit user link --amnezia` и `--telegram` для AmneziaVPN и Telegram теперь одной командой, а исправление времени на Debian 13 прислал [xlok1e](https://github.com/xlok1e), спасибо. Сервер обновится сам этой ночью, нетерпеливым – `kit update`. diff --git a/README.md b/README.md index 5f00e82..81916be 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ kit # меню: пользо kit user add имя [--gb 50] [--days 30] [--devices 3] # добавить пользователя во все протоколы, показать подписку и ссылки kit user list # кто сколько израсходовал, до какого числа, когда был в сети -kit user link имя [--all | --amnezia | --telegram] # подписка, ссылки «открыть в Karing и Happ», отдельные ссылки (AmneziaVPN, Telegram – ключами) +kit user link имя [--all | --amnezia | --telegram] # подписка, ссылки «открыть в приложении», отдельные ссылки (AmneziaVPN, Telegram – ключами) kit user limit имя [--gb N] [--days N] [--devices N] # изменить лимиты (0 – без ограничений) kit user off имя / kit user on имя # временно выключить и включить kit user del имя # удалить пользователя diff --git a/manuals/3x-ui.md b/manuals/3x-ui.md index 429332a..ff16db9 100644 --- a/manuals/3x-ui.md +++ b/manuals/3x-ui.md @@ -110,7 +110,7 @@ kit user add sasha --gb 50 --days 30 |---|---| | `kit user add имя [--gb N] [--days N] [--devices N]` | добавить; лимит трафика, срок и число устройств – по желанию | | `kit user list` | кто сколько израсходовал, до какого числа и когда был в сети | -| `kit user link имя [--all \| --amnezia \| --telegram]` (рядом с подпиской – ссылки «открыть в Karing и Happ») | подписка и ссылки ещё раз: основные и запасные по группам; AmneziaVPN и Telegram – отдельными ключами | +| `kit user link имя [--all \| --amnezia \| --telegram]` (рядом с подпиской – ссылки «открыть в приложении») | подписка и ссылки ещё раз: основные и запасные по группам; AmneziaVPN и Telegram – отдельными ключами | | `kit user limit имя --gb N --days N` | изменить лимиты (0 – без ограничений) | | `kit user off имя` / `kit user on имя` | временно выключить и включить | | `kit user del имя` | удалить | diff --git a/scripts/kit-sub.py b/scripts/kit-sub.py index c145ced..d9c9f7f 100644 --- a/scripts/kit-sub.py +++ b/scripts/kit-sub.py @@ -38,6 +38,8 @@ CLASH_UA = re.compile(r"clash|mihomo|flclash|stash|nyanpasu|meta", re.I) # тоже могут просить формат Clash (Karing так и делает), но AmneziaWG не умеют. NO_AWG_UA = re.compile(r"karing|hiddify|nekobox|sing-?box|husi|stash|shadowrocket|v2box|streisand|happ|loon|surge|quantumult", re.I) SUB_ID = re.compile(r"^[A-Za-z0-9_.@-]{1,64}$") +# Страница подписки для браузера (React от 3X-UI) подгружает скрипты и стили из «<путь>/assets/…»: пропускаем только такие файлы. +ASSET = re.compile(r"^assets/[A-Za-z0-9_.-]{1,128}\.(js|css|woff2?|svg|png|ico|map)$") # Заголовки Happ, которые 3X-UI отдаёт в подписке (маршрутизация, баннеры, настройки клиента). HAPP_HEADERS = ("routing", "routing-enable", "announce", "providerid", "new-url", "fallback-url", "hide-settings", "no-limit-enabled", "ping-type", "color-profile", "tun-mode", "tun-type", @@ -249,7 +251,7 @@ class Handler(http.server.BaseHTTPRequestHandler): if not path.startswith(PATH): return self.send_html_error(404) sub_id = path[len(PATH):] - if not SUB_ID.match(sub_id): + if not SUB_ID.match(sub_id) and not ASSET.match(sub_id): return self.send_html_error(404) ua = self.headers.get("User-Agent", "") host = CONF.get("link_host") or self.headers.get("Host", CONF.get("host", "")) diff --git a/scripts/kit.sh b/scripts/kit.sh index d4fcba5..4a3c738 100644 --- a/scripts/kit.sh +++ b/scripts/kit.sh @@ -142,13 +142,19 @@ direct_links() { # subId фильтр # Панель «через SSH-туннель»: подписка слушает только 127.0.0.1, с телефона по ней не зайти. local_only_sub() { [[ ${SUB_BASE:-} == http://127.0.0.1* || ${SUB_BASE:-} == http://localhost* ]]; } -# Ссылки «открыть в приложении»: нажатие добавляет подписку сразу с названием (проверено: Karing и Happ). +# Ссылки «открыть в приложении»: нажатие добавляет подписку сразу с названием. +# Проверено на устройстве: Karing, Happ. Остальные собраны по документации приложений. app_links() { # адрес подписки local url=$1 enc enc=$(python3 -c 'import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1], safe=""))' "$url") echo "Открыть в приложении (отправьте ссылку себе или близкому в мессенджер и нажмите):" - echo " Karing: karing://install-config?url=$enc&name=3X-UI%20KIT" - echo " Happ: happ://add/$url" + echo " Karing: karing://install-config?url=$enc&name=3X-UI%20KIT" + echo " Happ: happ://add/$url" + echo " Hiddify: hiddify://import/$url#3X-UI%20KIT" + echo " Clash Verge: clash://install-config?url=$enc&name=3X-UI%20KIT" + echo " FlClash: flclash://install-config?url=$enc" + echo " Mihomo Party: mihomo://install-config?url=$enc&name=3X-UI%20KIT" + echo " v2rayNG: v2rayng://install-sub?url=$enc&name=3X-UI%20KIT" } show_link() { # имя subId