浏览代码

add link export support for ssr

zu1k 5 年之前
父节点
当前提交
0e88bb62b5
共有 2 个文件被更改,包括 27 次插入0 次删除
  1. 14 0
      pkg/proxy/link_test.go
  2. 13 0
      pkg/proxy/shadowsocksr.go

+ 14 - 0
pkg/proxy/link_test.go

@@ -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://[email protected]: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 {

+ 13 - 0
pkg/proxy/shadowsocksr.go

@@ -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