mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2025-09-19 20:15:59 +08:00
fix: ssr uri decode (#2116)
This commit is contained in:
@ -2,6 +2,7 @@ package convert
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -43,3 +44,22 @@ func decodeUrlSafe(data string) string {
|
|||||||
}
|
}
|
||||||
return string(dcBuf)
|
return string(dcBuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TryDecodeBase64(s string) (decoded []byte, err error) {
|
||||||
|
if len(s)%4 == 0 {
|
||||||
|
if decoded, err = base64.StdEncoding.DecodeString(s); err == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if decoded, err = base64.URLEncoding.DecodeString(s); err == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if decoded, err = base64.RawStdEncoding.DecodeString(s); err == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if decoded, err = base64.RawURLEncoding.DecodeString(s); err == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("invalid base64-encoded string")
|
||||||
|
}
|
||||||
|
@ -456,12 +456,12 @@ func ConvertsV2Ray(buf []byte) ([]map[string]any, error) {
|
|||||||
proxies = append(proxies, ss)
|
proxies = append(proxies, ss)
|
||||||
|
|
||||||
case "ssr":
|
case "ssr":
|
||||||
dcBuf, err := encRaw.DecodeString(body)
|
dcBuf, err := TryDecodeBase64(body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// ssr://host:port:protocol:method:obfs:urlsafebase64pass/?obfsparam=urlsafebase64&protoparam=&remarks=urlsafebase64&group=urlsafebase64&udpport=0&uot=1
|
// ssr://host:port:protocol:method:obfs:urlsafebase64pass/?obfsparam=urlsafebase64param&protoparam=urlsafebase64param&remarks=urlsafebase64remarks&group=urlsafebase64group&udpport=0&uot=1
|
||||||
|
|
||||||
before, after, ok := strings.Cut(string(dcBuf), "/?")
|
before, after, ok := strings.Cut(string(dcBuf), "/?")
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -490,7 +490,7 @@ func ConvertsV2Ray(buf []byte) ([]map[string]any, error) {
|
|||||||
name := uniqueName(names, remarks)
|
name := uniqueName(names, remarks)
|
||||||
|
|
||||||
obfsParam := decodeUrlSafe(query.Get("obfsparam"))
|
obfsParam := decodeUrlSafe(query.Get("obfsparam"))
|
||||||
protocolParam := query.Get("protoparam")
|
protocolParam := decodeUrlSafe(query.Get("protoparam"))
|
||||||
|
|
||||||
ssr := make(map[string]any, 20)
|
ssr := make(map[string]any, 20)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user