62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package loon
|
|
|
|
import (
|
|
"bytes"
|
|
"embed"
|
|
"strings"
|
|
"text/template"
|
|
|
|
"github.com/perfect-panel/server/pkg/adapter/proxy"
|
|
"github.com/perfect-panel/server/pkg/logger"
|
|
)
|
|
|
|
//go:embed *.tpl
|
|
var configFiles embed.FS
|
|
|
|
func BuildLoon(servers []proxy.Proxy, uuid string) []byte {
|
|
uri := ""
|
|
nodes := make([]string, 0)
|
|
for _, s := range servers {
|
|
switch s.Protocol {
|
|
case "vmess":
|
|
nodes = append(nodes, s.Name)
|
|
uri += buildVMess(s, uuid)
|
|
case "shadowsocks":
|
|
nodes = append(nodes, s.Name)
|
|
uri += buildShadowsocks(s, uuid)
|
|
case "trojan":
|
|
nodes = append(nodes, s.Name)
|
|
uri += buildTrojan(s, uuid)
|
|
case "vless":
|
|
nodes = append(nodes, s.Name)
|
|
uri += buildVless(s, uuid)
|
|
case "hysteria2":
|
|
nodes = append(nodes, s.Name)
|
|
uri += buildHysteria2(s, uuid)
|
|
default:
|
|
continue
|
|
}
|
|
}
|
|
file, err := configFiles.ReadFile("default.tpl")
|
|
if err != nil {
|
|
logger.Errorf("read default surfboard config error: %v", err.Error())
|
|
return nil
|
|
}
|
|
// replace template
|
|
tpl, err := template.New("default").Parse(string(file))
|
|
if err != nil {
|
|
logger.Errorf("read default surfboard config error: %v", err.Error())
|
|
return nil
|
|
}
|
|
var buf bytes.Buffer
|
|
if err = tpl.Execute(&buf, map[string]interface{}{
|
|
"Proxies": uri,
|
|
"Nodes": strings.Join(nodes, ","),
|
|
}); err != nil {
|
|
logger.Errorf("Execute Loon template error: %v", err.Error())
|
|
return nil
|
|
}
|
|
|
|
return buf.Bytes()
|
|
}
|