server/pkg/adapter/loon/build.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()
}