54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package loon
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/perfect-panel/server/pkg/adapter/proxy"
|
|
"github.com/perfect-panel/server/pkg/logger"
|
|
)
|
|
|
|
func buildVMess(data proxy.Proxy, password string) string {
|
|
vmess := data.Option.(proxy.Vmess)
|
|
|
|
configs := []string{
|
|
fmt.Sprintf("%s=vmess", data.Name),
|
|
data.Server,
|
|
fmt.Sprintf("%d", data.Port),
|
|
"auto",
|
|
password,
|
|
"fast-open=false",
|
|
"udp=true",
|
|
"alterId=0",
|
|
}
|
|
|
|
switch vmess.Transport {
|
|
case "tcp":
|
|
configs = append(configs, "transport=tcp")
|
|
case "websocket":
|
|
configs = append(configs, "transport=ws")
|
|
if vmess.TransportConfig.Path != "" {
|
|
configs = append(configs, fmt.Sprintf("path=%s", vmess.TransportConfig.Path))
|
|
}
|
|
if vmess.TransportConfig.Host != "" {
|
|
configs = append(configs, fmt.Sprintf("host=%s", vmess.TransportConfig.Host))
|
|
}
|
|
default:
|
|
logger.Info("Loon Unknown transport type: ", logger.Field("transport", vmess.Transport))
|
|
return ""
|
|
}
|
|
|
|
if vmess.Security == "tls" {
|
|
configs = append(configs, "over-tls=true", fmt.Sprintf("tls-name=%s", vmess.SecurityConfig.SNI))
|
|
if vmess.SecurityConfig.AllowInsecure {
|
|
configs = append(configs, "skip-cert-verify=true")
|
|
} else {
|
|
configs = append(configs, "skip-cert-verify=false")
|
|
}
|
|
|
|
}
|
|
|
|
uri := strings.Join(configs, ",")
|
|
return uri + "\r\n"
|
|
}
|