github.com/sagernet/sing-box@v1.9.0-rc.20/experimental/libbox/remote_profile.go (about) 1 package libbox 2 3 import ( 4 "net/url" 5 ) 6 7 func GenerateRemoteProfileImportLink(name string, remoteURL string) string { 8 importLink := &url.URL{ 9 Scheme: "sing-box", 10 Host: "import-remote-profile", 11 RawQuery: url.Values{"url": []string{remoteURL}}.Encode(), 12 Fragment: name, 13 } 14 return importLink.String() 15 } 16 17 type ImportRemoteProfile struct { 18 Name string 19 URL string 20 Host string 21 } 22 23 func ParseRemoteProfileImportLink(importLink string) (*ImportRemoteProfile, error) { 24 importURL, err := url.Parse(importLink) 25 if err != nil { 26 return nil, err 27 } 28 remoteURL, err := url.Parse(importURL.Query().Get("url")) 29 if err != nil { 30 return nil, err 31 } 32 name := importURL.Fragment 33 if name == "" { 34 name = remoteURL.Host 35 } 36 return &ImportRemoteProfile{ 37 Name: name, 38 URL: remoteURL.String(), 39 Host: remoteURL.Host, 40 }, nil 41 }