feat(adapter): add V2rayN adapter and build method for proxy management

This commit is contained in:
Chang lue Tsen
2025-05-06 18:36:35 +09:00
parent f4050ff42e
commit 155c6ba290
4 changed files with 315 additions and 14 deletions
+38 -13
View File
@@ -69,7 +69,10 @@ func buildProxy(data proxy.Proxy, uuid string) string {
}
func ShadowsocksUri(data proxy.Proxy, uuid string) string {
ss := data.Option.(proxy.Shadowsocks)
ss, ok := data.Option.(proxy.Shadowsocks)
if !ok {
return ""
}
// sip002
u := &url.URL{
Scheme: "ss",
@@ -94,10 +97,20 @@ func VmessUri(data proxy.Proxy, uuid string) string {
Port: fmt.Sprint(data.Port),
ID: uuid,
Aid: "0",
Net: vmess.Transport,
// Type: "?",
Host: transport.Host,
Path: transport.Path,
}
switch vmess.Transport {
case "websocket":
s.Net = "ws"
s.Path = transport.Path
s.Host = transport.Host
case "grpc":
s.Net = "grpc"
s.Path = transport.ServiceName
case "httpupgrade":
s.Net = "http"
s.Path = transport.Path
s.Host = transport.Host
}
if vmess.Security == "tls" {
@@ -117,23 +130,35 @@ func VlessUri(data proxy.Proxy, uuid string) string {
var query = make(url.Values)
setQuery(&query, "flow", vless.Flow)
setQuery(&query, "type", vless.Transport)
setQuery(&query, "security", vless.Security)
switch vless.Transport {
case "ws", "http", "httpupgrade":
case "websocket":
setQuery(&query, "type", "ws")
setQuery(&query, "host", transportConfig.Host)
setQuery(&query, "path", transportConfig.Path)
case "http2", "httpupgrade":
setQuery(&query, "type", vless.Transport)
setQuery(&query, "path", transportConfig.Path)
setQuery(&query, "host", transportConfig.Host)
case "grpc":
setQuery(&query, "type", "grpc")
setQuery(&query, "serviceName", transportConfig.ServiceName)
case "meek":
setQuery(&query, "url", transportConfig.Host)
}
setQuery(&query, "sni", securityConfig.SNI)
setQuery(&query, "fp", securityConfig.Fingerprint)
setQuery(&query, "pbk", securityConfig.RealityPublicKey)
setQuery(&query, "sid", securityConfig.RealityShortId)
if vless.Security == "tls" {
setQuery(&query, "sni", securityConfig.SNI)
setQuery(&query, "fp", securityConfig.Fingerprint)
} else if vless.Security == "reality" {
setQuery(&query, "pbk", securityConfig.RealityPublicKey)
setQuery(&query, "sid", securityConfig.RealityShortId)
setQuery(&query, "sni", securityConfig.SNI)
setQuery(&query, "fp", securityConfig.Fingerprint)
setQuery(&query, "servername", securityConfig.SNI)
setQuery(&query, "spx", "/")
}
u := url.URL{
Scheme: "vless",