mirror of
https://github.com/nitezs/sub2clash.git
synced 2024-12-23 15:04:41 -05:00
🐛 #46
This commit is contained in:
parent
98ef93c7bb
commit
6bb2d16e4b
@ -13,7 +13,24 @@ func ParseShadowsocks(proxy string) (model.Proxy, error) {
|
|||||||
if !strings.HasPrefix(proxy, constant.ShadowsocksPrefix) {
|
if !strings.HasPrefix(proxy, constant.ShadowsocksPrefix) {
|
||||||
return model.Proxy{}, &ParseError{Type: ErrInvalidPrefix, Raw: proxy}
|
return model.Proxy{}, &ParseError{Type: ErrInvalidPrefix, Raw: proxy}
|
||||||
}
|
}
|
||||||
|
needDecode := true
|
||||||
|
if !strings.Contains(proxy, "@") {
|
||||||
|
s := strings.SplitN(proxy, "#", 2)
|
||||||
|
d, err := DecodeBase64(strings.TrimPrefix(s[0], "ss://"))
|
||||||
|
if err != nil {
|
||||||
|
return model.Proxy{}, &ParseError{
|
||||||
|
Type: ErrInvalidStruct,
|
||||||
|
Message: "url parse error",
|
||||||
|
Raw: proxy,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(s) == 2 {
|
||||||
|
proxy = "ss://" + d + "#" + s[1]
|
||||||
|
} else {
|
||||||
|
proxy = "ss://" + d
|
||||||
|
}
|
||||||
|
needDecode = false
|
||||||
|
}
|
||||||
link, err := url.Parse(proxy)
|
link, err := url.Parse(proxy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.Proxy{}, &ParseError{
|
return model.Proxy{}, &ParseError{
|
||||||
@ -48,32 +65,38 @@ func ParseShadowsocks(proxy string) (model.Proxy, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
user, err := DecodeBase64(link.User.Username())
|
method := ""
|
||||||
if err != nil {
|
password := ""
|
||||||
return model.Proxy{}, &ParseError{
|
if needDecode {
|
||||||
Type: ErrInvalidStruct,
|
user, err := DecodeBase64(link.User.Username())
|
||||||
Message: "missing method and password",
|
if err != nil {
|
||||||
Raw: proxy,
|
return model.Proxy{}, &ParseError{
|
||||||
|
Type: ErrInvalidStruct,
|
||||||
|
Message: "missing method and password",
|
||||||
|
Raw: proxy,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
if user == "" {
|
||||||
|
return model.Proxy{}, &ParseError{
|
||||||
if user == "" {
|
Type: ErrInvalidStruct,
|
||||||
return model.Proxy{}, &ParseError{
|
Message: "missing method and password",
|
||||||
Type: ErrInvalidStruct,
|
Raw: proxy,
|
||||||
Message: "missing method and password",
|
}
|
||||||
Raw: proxy,
|
|
||||||
}
|
}
|
||||||
}
|
methodAndPass := strings.SplitN(user, ":", 2)
|
||||||
methodAndPass := strings.SplitN(user, ":", 2)
|
if len(methodAndPass) != 2 {
|
||||||
if len(methodAndPass) != 2 {
|
return model.Proxy{}, &ParseError{
|
||||||
return model.Proxy{}, &ParseError{
|
Type: ErrInvalidStruct,
|
||||||
Type: ErrInvalidStruct,
|
Message: "missing method and password",
|
||||||
Message: "missing method and password",
|
Raw: proxy,
|
||||||
Raw: proxy,
|
}
|
||||||
}
|
}
|
||||||
|
method = methodAndPass[0]
|
||||||
|
password = methodAndPass[1]
|
||||||
|
} else {
|
||||||
|
method = link.User.Username()
|
||||||
|
password, _ = link.User.Password()
|
||||||
}
|
}
|
||||||
method := methodAndPass[0]
|
|
||||||
password := methodAndPass[1]
|
|
||||||
|
|
||||||
remarks := link.Fragment
|
remarks := link.Fragment
|
||||||
if remarks == "" {
|
if remarks == "" {
|
||||||
|
Loading…
Reference in New Issue
Block a user