feat(api): migrate server and node data handling, update related structures and logic
This commit is contained in:
@@ -1,113 +1 @@
|
||||
package adapter
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/perfect-panel/server/internal/model/server"
|
||||
"github.com/perfect-panel/server/pkg/tool"
|
||||
)
|
||||
|
||||
func adapterProxy(svr server.Server, host string, port uint64) (Proxy, error) {
|
||||
tags := strings.Split(svr.Tags, ",")
|
||||
if len(tags) > 0 {
|
||||
tags = tool.RemoveDuplicateElements(tags...)
|
||||
}
|
||||
node := Proxy{
|
||||
Name: svr.Name,
|
||||
Host: host,
|
||||
Port: port,
|
||||
Type: svr.Protocol,
|
||||
Tags: tags,
|
||||
}
|
||||
switch svr.Protocol {
|
||||
case "shadowsocks":
|
||||
var ss server.Shadowsocks
|
||||
if err := json.Unmarshal([]byte(svr.Config), &ss); err != nil {
|
||||
return node, fmt.Errorf("unmarshal shadowsocks config: %v", err.Error())
|
||||
}
|
||||
if port == 0 {
|
||||
node.Port = uint64(ss.Port)
|
||||
}
|
||||
node.Method = ss.Method
|
||||
node.ServerKey = ss.ServerKey
|
||||
case "vless":
|
||||
var vless server.Vless
|
||||
if err := json.Unmarshal([]byte(svr.Config), &vless); err != nil {
|
||||
return node, fmt.Errorf("unmarshal vless config: %v", err.Error())
|
||||
}
|
||||
if port == 0 {
|
||||
node.Port = uint64(vless.Port)
|
||||
}
|
||||
node.Flow = vless.Flow
|
||||
node.Transport = vless.Transport
|
||||
tool.DeepCopy(&node, vless.TransportConfig)
|
||||
node.Security = vless.Security
|
||||
tool.DeepCopy(&node, vless.SecurityConfig)
|
||||
case "vmess":
|
||||
var vmess server.Vmess
|
||||
if err := json.Unmarshal([]byte(svr.Config), &vmess); err != nil {
|
||||
return node, fmt.Errorf("unmarshal vmess config: %v", err.Error())
|
||||
}
|
||||
if port == 0 {
|
||||
node.Port = uint64(vmess.Port)
|
||||
}
|
||||
node.Flow = vmess.Flow
|
||||
node.Transport = vmess.Transport
|
||||
tool.DeepCopy(&node, vmess.TransportConfig)
|
||||
node.Security = vmess.Security
|
||||
tool.DeepCopy(&node, vmess.SecurityConfig)
|
||||
case "trojan":
|
||||
var trojan server.Trojan
|
||||
if err := json.Unmarshal([]byte(svr.Config), &trojan); err != nil {
|
||||
return node, fmt.Errorf("unmarshal trojan config: %v", err.Error())
|
||||
}
|
||||
if port == 0 {
|
||||
node.Port = uint64(trojan.Port)
|
||||
|
||||
}
|
||||
|
||||
node.Flow = trojan.Flow
|
||||
node.Transport = trojan.Transport
|
||||
tool.DeepCopy(&node, trojan.TransportConfig)
|
||||
node.Security = trojan.Security
|
||||
tool.DeepCopy(&node, trojan.SecurityConfig)
|
||||
case "hysteria2":
|
||||
var hysteria2 server.Hysteria2
|
||||
if err := json.Unmarshal([]byte(svr.Config), &hysteria2); err != nil {
|
||||
return node, fmt.Errorf("unmarshal hysteria2 config: %v", err.Error())
|
||||
}
|
||||
if port == 0 {
|
||||
node.Port = uint64(hysteria2.Port)
|
||||
}
|
||||
node.HopPorts = hysteria2.HopPorts
|
||||
node.HopInterval = hysteria2.HopInterval
|
||||
node.ObfsPassword = hysteria2.ObfsPassword
|
||||
tool.DeepCopy(&node, hysteria2.SecurityConfig)
|
||||
case "tuic":
|
||||
var tuic server.Tuic
|
||||
if err := json.Unmarshal([]byte(svr.Config), &tuic); err != nil {
|
||||
return node, fmt.Errorf("unmarshal tuic config: %v", err.Error())
|
||||
}
|
||||
if port == 0 {
|
||||
node.Port = uint64(tuic.Port)
|
||||
}
|
||||
node.DisableSNI = tuic.DisableSNI
|
||||
node.ReduceRtt = tuic.ReduceRtt
|
||||
node.UDPRelayMode = tuic.UDPRelayMode
|
||||
node.CongestionController = tuic.CongestionController
|
||||
case "anytls":
|
||||
var anytls server.AnyTLS
|
||||
if err := json.Unmarshal([]byte(svr.Config), &anytls); err != nil {
|
||||
return node, fmt.Errorf("unmarshal anytls config: %v", err.Error())
|
||||
}
|
||||
if port == 0 {
|
||||
node.Port = uint64(anytls.Port)
|
||||
}
|
||||
tool.DeepCopy(&node, anytls.SecurityConfig)
|
||||
default:
|
||||
return node, fmt.Errorf("unsupported protocol: %s", svr.Protocol)
|
||||
}
|
||||
return node, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user