Compare commits

..

5 Commits

Author SHA1 Message Date
Kirill Sobakin
0a5229f4f6 Merge pull request #173 from itdoginfo/fix
fix: Remove URL fragment before parsing VLESS links
2025-09-18 11:13:50 +03:00
Andrey Petelin
5ecb6ef997 fix: Remove URL fragment before parsing VLESS links 2025-09-18 12:59:17 +05:00
Kirill Sobakin
340c2b3505 Merge pull request #171 from itdoginfo/fix
Fix
2025-09-17 19:17:58 +03:00
Andrey Petelin
515c0be38b fix: revert changes from issue #148 2025-09-17 21:14:57 +05:00
Andrey Petelin
59c59bcb17 fix: Improve shadowsocks userinfo decoding with format validation and error handling` 2025-09-17 21:09:03 +05:00
4 changed files with 25 additions and 18 deletions

View File

@@ -240,14 +240,8 @@ migration() {
validate_service() {
local service="$1"
for domain_service in $COMMUNITY_DOMAIN_SERVICES; do
if [ "$service" = "$domain_service" ]; then
return 0
fi
done
for subnet_service in $COMMUNITY_SUBNET_SERVICES; do
if [ "$service" = "$subnet_service" ]; then
for community_service in $COMMUNITY_SERVICES; do
if [ "$service" = "$community_service" ]; then
return 0
fi
done
@@ -977,13 +971,7 @@ configure_community_list_handler() {
config=$(sing_box_cm_add_remote_ruleset "$config" "$ruleset_tag" "$format" "$url" "$detour" "$update_interval")
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
for service in $COMMUNITY_DOMAIN_SERVICES; do
if [ "$tag" = "$service" ]; then
_add_ruleset_to_dns_rules "$ruleset_tag"
break
fi
done
_add_ruleset_to_dns_rules "$ruleset_tag"
}
configure_user_domain_or_subnets_list() {

View File

@@ -63,5 +63,4 @@ SUBNETS_HETZNER="${GITHUB_RAW_URL}/Subnets/IPv4/hetzner.lst"
SUBNETS_OVH="${GITHUB_RAW_URL}/Subnets/IPv4/ovh.lst"
SUBNETS_DIGITALOCEAN="${GITHUB_RAW_URL}/Subnets/IPv4/digitalocean.lst"
SUBNETS_CLOUDFRONT="${GITHUB_RAW_URL}/Subnets/IPv4/cloudfront.lst"
COMMUNITY_DOMAIN_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube hdrezka tiktok google_ai google_play hodca"
COMMUNITY_SUBNET_SERVICES="discord meta twitter cloudflare cloudfront digitalocean hetzner ovh telegram"
COMMUNITY_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube hdrezka tiktok google_ai google_play hodca discord meta twitter cloudflare cloudfront digitalocean hetzner ovh telegram"

View File

@@ -40,6 +40,14 @@ is_base64() {
return 1
}
# Checks if the given string looks like a Shadowsocks userinfo
is_shadowsocks_userinfo_format() {
local str="$1"
local regex='^[^:]+:[^:]+(:[^:]+)?$'
[[ "$str" =~ $regex ]]
}
# Checks if the given file exists
file_exists() {
local filepath="$1"
@@ -176,6 +184,13 @@ url_get_file_extension() {
esac
}
# Remove url fragment (everything after the first '#')
url_strip_fragment() {
local url="$1"
echo "${url%%#*}"
}
# Decodes and returns a base64-encoded string
base64_decode() {
local str="$1"

View File

@@ -62,6 +62,7 @@ sing_box_cf_add_proxy_outbound() {
local udp_over_tcp="$4"
url=$(url_decode "$url")
url=$(url_strip_fragment "$url")
local scheme="${url%%://*}"
case "$scheme" in
@@ -131,8 +132,12 @@ sing_box_cf_add_proxy_outbound() {
local userinfo tag host port method password udp_over_tcp
userinfo=$(url_get_userinfo "$url")
if is_base64 "$userinfo"; then
if ! is_shadowsocks_userinfo_format "$userinfo"; then
userinfo=$(base64_decode "$userinfo")
if [ $? -ne 0 ]; then
log "Cannot decode shadowsocks userinfo or it does not match the expected format. Aborted." "fatal"
exit 1
fi
fi
tag=$(get_outbound_tag_by_section "$section")