server/pkg/adapter/loon/vless.go

63 lines
1.6 KiB
Go

package loon
import (
"fmt"
"strconv"
"strings"
"github.com/perfect-panel/server/pkg/adapter/proxy"
"github.com/perfect-panel/server/pkg/logger"
)
func buildVless(data proxy.Proxy, password string) string {
vless := data.Option.(proxy.Vless)
// If flow is not empty, it means that the server is a relay server
if vless.Flow != "" {
return ""
}
configs := []string{
fmt.Sprintf("%s=vless", data.Name),
data.Server,
strconv.Itoa(data.Port),
"auto",
password,
"fast-open=false",
"udp=true",
"alterId=0",
}
switch vless.Transport {
case "tcp":
configs = append(configs, "transport=tcp")
case "websocket":
configs = append(configs, "transport=ws")
if vless.TransportConfig.Path != "" {
configs = append(configs, fmt.Sprintf("path=%s", vless.TransportConfig.Path))
}
if vless.TransportConfig.Host != "" {
configs = append(configs, fmt.Sprintf("host=%s", vless.TransportConfig.Host))
}
default:
logger.Info("Loon Unknown transport type: ", logger.Field("transport", vless.Transport))
return ""
}
if vless.Security == "tls" {
configs = append(configs, "over-tls=true", fmt.Sprintf("tls-name=%s", vless.SecurityConfig.SNI))
if vless.SecurityConfig.AllowInsecure {
configs = append(configs, "skip-cert-verify=true")
} else {
configs = append(configs, "skip-cert-verify=false")
}
} else if vless.Security == "reality" {
// Loon does not support reality security
logger.Info("Loon Unknown security type: ", logger.Field("security", vless.Security))
return ""
}
uri := strings.Join(configs, ",")
return uri + "\r\n"
}