kit user link: в режиме «панель через SSH-туннель» показываются отдельные ссылки на протоколы, --all работает с https-подпиской
This commit is contained in:
+32
-13
@@ -104,10 +104,37 @@ human() { # байты → «1.2 ГБ»
|
|||||||
|
|
||||||
sub_url() { echo "${SUB_BASE}$1"; }
|
sub_url() { echo "${SUB_BASE}$1"; }
|
||||||
|
|
||||||
|
# Отдельные ссылки на протоколы – прямо из подписки 3X-UI внутри сервера (мимо kit-sub, который
|
||||||
|
# прячет от VPN-приложений vpn:// и tg://). direct_links subId фильтр
|
||||||
|
direct_links() {
|
||||||
|
local sid=$1 filter=$2 raw out="" suffix scheme
|
||||||
|
for suffix in "" -awg; do
|
||||||
|
raw=""
|
||||||
|
# Внутренняя подписка отвечает по http (всё на 443) или по https (свой порт с сертификатом).
|
||||||
|
for scheme in http https; do
|
||||||
|
raw=$(curl -fsSk -m 10 -A "v2rayN/7" -H "Host: $HOST" "$scheme://127.0.0.1:$SUB_INTERNAL$SUB_PATH$sid$suffix" 2>/dev/null) && [[ -n $raw ]] && break
|
||||||
|
raw=""
|
||||||
|
done
|
||||||
|
grep -q '://' <<<"$raw" || raw=$(base64 -d <<<"$raw" 2>/dev/null || true)
|
||||||
|
out+=$(grep -E "$filter" <<<"$raw" || true)$'\n'
|
||||||
|
done
|
||||||
|
[[ ${SINGLE:-no} == yes ]] && out=$(sed "s/^\(tg:\/\/proxy?\)\(.*\)port=${MTPROTO_INNER:-10445}/\1\2port=443/" <<<"$out")
|
||||||
|
echo; grep . <<<"$out" || echo "Отдельных ссылок нет."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Панель «через SSH-туннель»: подписка слушает только 127.0.0.1, с телефона по ней не зайти.
|
||||||
|
local_only_sub() { [[ ${SUB_BASE:-} == http://127.0.0.1* || ${SUB_BASE:-} == http://localhost* ]]; }
|
||||||
|
|
||||||
show_link() { # имя subId
|
show_link() { # имя subId
|
||||||
local url
|
local url
|
||||||
url=$(sub_url "$2")
|
url=$(sub_url "$2")
|
||||||
echo
|
echo
|
||||||
|
if local_only_sub; then
|
||||||
|
echo "Подписка ${B}$1${N} в этом режиме (панель через SSH-туннель) открывается только на самом сервере,"
|
||||||
|
echo "с телефона по ней не зайти. Подключайтесь отдельными ссылками на протоколы:"
|
||||||
|
direct_links "$2" '^[a-z0-9]+://'
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
echo "Подписка ${B}$1${N} – все протоколы одной ссылкой. Вставьте в Happ, Hiddify, Karing,"
|
echo "Подписка ${B}$1${N} – все протоколы одной ссылкой. Вставьте в Happ, Hiddify, Karing,"
|
||||||
echo "v2rayN, Clash Verge или FlClash:"
|
echo "v2rayN, Clash Verge или FlClash:"
|
||||||
echo
|
echo
|
||||||
@@ -148,21 +175,13 @@ cmd_add() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cmd_link() {
|
cmd_link() {
|
||||||
local name=${1:-} all=${2:-} c
|
local name=${1:-} all=${2:-} c sid
|
||||||
valid_name "$name"
|
valid_name "$name"
|
||||||
c=$(client "$name"); [[ -n $c ]] || die "Нет пользователя $name"
|
c=$(client "$name"); [[ -n $c ]] || die "Нет пользователя $name"
|
||||||
show_link "$name" "$(jq -r '.subId' <<<"$c")"
|
sid=$(jq -r '.subId' <<<"$c")
|
||||||
if [[ $all == --all ]]; then
|
show_link "$name" "$sid"
|
||||||
local sid raw out="" suffix
|
# В режиме «только на сервере» показ уже содержит все ссылки.
|
||||||
sid=$(jq -r '.subId' <<<"$c")
|
if [[ $all == --all ]] && ! local_only_sub; then direct_links "$sid" '^(vpn|tg)://'; fi
|
||||||
for suffix in "" -awg; do
|
|
||||||
raw=$(curl -fsSk -m 10 -A "v2rayN/7" -H "Host: $HOST" "http://127.0.0.1:$SUB_INTERNAL$SUB_PATH$sid$suffix" 2>/dev/null || true)
|
|
||||||
grep -q '://' <<<"$raw" || raw=$(base64 -d <<<"$raw" 2>/dev/null || true)
|
|
||||||
out+=$(grep -E '^(vpn|tg)://' <<<"$raw" || true)$'\n'
|
|
||||||
done
|
|
||||||
[[ ${SINGLE:-no} == yes ]] && out=$(sed "s/^\(tg:\/\/proxy?\)\(.*\)port=${MTPROTO_INNER:-10445}/\1\2port=443/" <<<"$out")
|
|
||||||
echo; grep . <<<"$out" || echo "Отдельных ссылок нет."
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_list() {
|
cmd_list() {
|
||||||
|
|||||||
Reference in New Issue
Block a user