add link export support for ssr

This commit is contained in:
zu1k
2020-09-04 12:25:58 +08:00
parent ef1b6eab6b
commit 0e88bb62b5
2 changed files with 27 additions and 0 deletions

View File

@@ -19,6 +19,20 @@ func TestSSLink(t *testing.T) {
fmt.Println(ss)
}
func TestSSRLink(t *testing.T) {
ssr, err := ParseSSRLink("ssr://MTcyLjEwNC4xNjEuNTQ6ODA5OTpvcmlnaW46YWVzLTI1Ni1jZmI6cGxhaW46WlVsWE1FUnVhelk1TkRVMFpUWnVVM2QxYzNCMk9VUnRVekl3TVhSUk1FUT0vP29iZnNwYXJhbT0mcHJvdG9wYXJhbT0mcmVtYXJrcz01Ny03NWFLWjVZV2FNakl6TGpFejVwYXc1WXFnNVoyaCZncm91cD01cGF3NVlxZzVaMmg=")
if err != nil {
t.Error(err)
}
fmt.Println(ssr)
fmt.Println(ssr.Link())
ssr, err = ParseSSRLink(ssr.Link())
if err != nil {
t.Error(err)
}
fmt.Println(ssr)
}
func TestTrojanLink(t *testing.T) {
trojan, err := ParseTrojanLink("trojan://65474277@sqcu.hostmsu.ru:55551?allowinsecure=0&peer=mza.hkfq.xyz&mux=1&ws=0&wspath=&wshost=&ss=0&ssmethod=aes-128-gcm&sspasswd=&group=#%E9%A6%99%E6%B8%AFCN2-MZA%E8%8A%82%E7%82%B9-%E5%AE%BF%E8%BF%81%E8%81%94%E9%80%9A%E4%B8%AD%E8%BD%AC")
if err != nil {

View File

@@ -3,6 +3,7 @@ package proxy
import (
"encoding/json"
"errors"
"fmt"
"math/rand"
"net"
"net/url"
@@ -61,6 +62,18 @@ func (ssr ShadowsocksR) Clone() Proxy {
return &ssr
}
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))
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()))
return fmt.Sprintf("ssr://%s", payload)
}
func ParseSSRLink(link string) (*ShadowsocksR, error) {
if !strings.HasPrefix(link, "ssr") {
return nil, ErrorNotSSRLink