diff --git a/pkg/provider/ssrsub.go b/pkg/provider/ssrsub.go index 77ac933..3cf21e0 100644 --- a/pkg/provider/ssrsub.go +++ b/pkg/provider/ssrsub.go @@ -17,5 +17,5 @@ func (sub SSRSub) Provide() string { for _, p := range *sub.Proxies { resultBuilder.WriteString(p.Link() + "\n") } - return tool.Base64EncodeString(resultBuilder.String()) + return tool.Base64EncodeString(resultBuilder.String(), false) } diff --git a/pkg/provider/vmesssub.go b/pkg/provider/vmesssub.go index e4a1fa7..816aa34 100644 --- a/pkg/provider/vmesssub.go +++ b/pkg/provider/vmesssub.go @@ -17,5 +17,5 @@ func (sub VmessSub) Provide() string { for _, p := range *sub.Proxies { resultBuilder.WriteString(p.Link() + "\n") } - return tool.Base64EncodeString(resultBuilder.String()) + return tool.Base64EncodeString(resultBuilder.String(), false) } diff --git a/pkg/proxy/shadowsocks.go b/pkg/proxy/shadowsocks.go index d5160e3..df10004 100644 --- a/pkg/proxy/shadowsocks.go +++ b/pkg/proxy/shadowsocks.go @@ -68,7 +68,7 @@ func (ss Shadowsocks) Clone() Proxy { // https://shadowsocks.org/en/config/quick-guide.html func (ss Shadowsocks) Link() (link string) { payload := fmt.Sprintf("%s:%s@%s:%d", ss.Cipher, ss.Password, ss.Server, ss.Port) - payload = tool.Base64EncodeString(payload) + payload = tool.Base64EncodeString(payload, false) return fmt.Sprintf("ss://%s#%s", payload, ss.Name) } diff --git a/pkg/proxy/shadowsocksr.go b/pkg/proxy/shadowsocksr.go index db2ee30..dd350f0 100644 --- a/pkg/proxy/shadowsocksr.go +++ b/pkg/proxy/shadowsocksr.go @@ -65,13 +65,13 @@ func (ssr ShadowsocksR) Clone() Proxy { // https://github.com/HMBSbige/ShadowsocksR-Windows/wiki/SSR-QRcode-scheme func (ssr ShadowsocksR) Link() (link string) { payload := fmt.Sprintf("%s:%d:%s:%s:%s:%s", - ssr.Server, ssr.Port, ssr.Protocol, ssr.Cipher, ssr.Obfs, tool.Base64EncodeString(ssr.Password)) + ssr.Server, ssr.Port, ssr.Protocol, ssr.Cipher, ssr.Obfs, tool.Base64EncodeString(ssr.Password, true)) query := url.Values{} - query.Add("obfsparam", tool.Base64EncodeString(ssr.ObfsParam)) - query.Add("protoparam", tool.Base64EncodeString(ssr.ProtocolParam)) - query.Add("remarks", tool.Base64EncodeString(ssr.Name)) - query.Add("group", tool.Base64EncodeString("proxy.tgbot.co")) - payload = tool.Base64EncodeString(fmt.Sprintf("%s/?%s", payload, query.Encode())) + query.Add("obfsparam", tool.Base64EncodeString(ssr.ObfsParam, true)) + query.Add("protoparam", tool.Base64EncodeString(ssr.ProtocolParam, true)) + query.Add("remarks", tool.Base64EncodeString(ssr.Name, true)) + query.Add("group", tool.Base64EncodeString("proxy.tgbot.co", true)) + payload = tool.Base64EncodeString(fmt.Sprintf("%s/?%s", payload, query.Encode()), true) return fmt.Sprintf("ssr://%s", payload) } diff --git a/pkg/tool/base64.go b/pkg/tool/base64.go index eb96509..8bfcdfb 100644 --- a/pkg/tool/base64.go +++ b/pkg/tool/base64.go @@ -27,7 +27,10 @@ func Base64DecodeString(src string) (dst string, err error) { return } -func Base64EncodeString(origin string) (result string) { +func Base64EncodeString(origin string, urlsafe bool) (result string) { + if urlsafe { + return base64.URLEncoding.EncodeToString([]byte(origin)) + } return base64.StdEncoding.EncodeToString([]byte(origin)) }