server/pkg/adapter/surge/vmess.go

45 lines
1.2 KiB
Go

package surge
import (
"fmt"
"strings"
"github.com/perfect-panel/server/pkg/adapter/proxy"
)
func buildVMess(data proxy.Proxy, uuid string) string {
vmess, ok := data.Option.(proxy.Vmess)
if !ok {
return ""
}
addr := fmt.Sprintf("%s=vmess, %s, %d", data.Name, data.Server, data.Port)
uriConfig := []string{
addr,
fmt.Sprintf("username=%s", uuid),
"vmess-aead=true",
"tfo=true",
"udp-relay=true",
}
if vmess.Security == "tls" {
uriConfig = append(uriConfig, "tls=true")
if vmess.SecurityConfig.AllowInsecure {
uriConfig = append(uriConfig, "skip-cert-verify=true")
} else {
uriConfig = append(uriConfig, "skip-cert-verify=false")
}
if vmess.SecurityConfig.SNI != "" {
uriConfig = append(uriConfig, fmt.Sprintf("sni=%s", vmess.SecurityConfig.SNI))
}
}
if vmess.Transport == "websocket" {
uriConfig = append(uriConfig, "ws=true")
if vmess.TransportConfig.Path != "" {
uriConfig = append(uriConfig, fmt.Sprintf("ws-path=%s", vmess.TransportConfig.Path))
}
if vmess.TransportConfig.Host != "" {
uriConfig = append(uriConfig, fmt.Sprintf("ws-headers=Host:%s", vmess.TransportConfig.Host))
}
}
return strings.Join(uriConfig, ",") + "\r\n"
}