reality support links #794

This commit is contained in:
Alireza Ahmadi
2025-09-12 00:19:30 +02:00
parent 7f24735677
commit 2276175354
+32 -122
View File
@@ -226,19 +226,7 @@ func hysteriaLink(
params["auth"] = auth params["auth"] = auth
} }
if tls, ok := addr["tls"].(map[string]interface{}); ok { if tls, ok := addr["tls"].(map[string]interface{}); ok {
if sni, ok := tls["server_name"].(string); ok { getTlsParams(&params, tls, "insecure")
params["peer"] = sni
}
if alpn, ok := tls["alpn"].([]interface{}); ok {
alpnList := make([]string, len(alpn))
for i, v := range alpn {
alpnList[i] = v.(string)
}
params["alpn"] = strings.Join(alpnList, ",")
}
if insecure, ok := tls["insecure"].(bool); ok && insecure {
params["insecure"] = "1"
}
} }
if obfs, ok := inbound["obfs"].(string); ok { if obfs, ok := inbound["obfs"].(string); ok {
params["obfs"] = obfs params["obfs"] = obfs
@@ -284,19 +272,7 @@ func hysteria2Link(
params["downmbps"] = fmt.Sprintf("%.0f", downmbps) params["downmbps"] = fmt.Sprintf("%.0f", downmbps)
} }
if tls, ok := addr["tls"].(map[string]interface{}); ok { if tls, ok := addr["tls"].(map[string]interface{}); ok {
if sni, ok := tls["server_name"].(string); ok { getTlsParams(&params, tls, "insecure")
params["sni"] = sni
}
if alpn, ok := tls["alpn"].([]interface{}); ok {
alpnList := make([]string, len(alpn))
for i, v := range alpn {
alpnList[i] = v.(string)
}
params["alpn"] = strings.Join(alpnList, ",")
}
if insecure, ok := tls["insecure"].(bool); ok && insecure {
params["insecure"] = "1"
}
} }
if obfs, ok := inbound["obfs"].(map[string]interface{}); ok { if obfs, ok := inbound["obfs"].(map[string]interface{}); ok {
if obfsType, ok := obfs["type"].(string); ok { if obfsType, ok := obfs["type"].(string); ok {
@@ -340,19 +316,7 @@ func anytlsLink(
for _, addr := range addrs { for _, addr := range addrs {
params := map[string]string{} params := map[string]string{}
if tls, ok := addr["tls"].(map[string]interface{}); ok { if tls, ok := addr["tls"].(map[string]interface{}); ok {
if sni, ok := tls["server_name"].(string); ok { getTlsParams(&params, tls, "insecure")
params["sni"] = sni
}
if alpn, ok := tls["alpn"].([]interface{}); ok {
alpnList := make([]string, len(alpn))
for i, v := range alpn {
alpnList[i] = v.(string)
}
params["alpn"] = strings.Join(alpnList, ",")
}
if insecure, ok := tls["insecure"].(bool); ok && insecure {
params["insecure"] = "1"
}
} }
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
@@ -376,22 +340,7 @@ func tuicLink(
for _, addr := range addrs { for _, addr := range addrs {
params := map[string]string{} params := map[string]string{}
if tls, ok := addr["tls"].(map[string]interface{}); ok { if tls, ok := addr["tls"].(map[string]interface{}); ok {
if sni, ok := tls["server_name"].(string); ok { getTlsParams(&params, tls, "insecure")
params["sni"] = sni
}
if alpn, ok := tls["alpn"].([]interface{}); ok {
alpnList := make([]string, len(alpn))
for i, v := range alpn {
alpnList[i] = v.(string)
}
params["alpn"] = strings.Join(alpnList, ",")
}
if insecure, ok := tls["insecure"].(bool); ok && insecure {
params["insecure"] = "1"
}
if disableSni, ok := tls["disable_sni"].(bool); ok && disableSni {
params["disable_sni"] = "1"
}
} }
if congestionControl, ok := inbound["congestion_control"].(string); ok { if congestionControl, ok := inbound["congestion_control"].(string); ok {
params["congestion_control"] = congestionControl params["congestion_control"] = congestionControl
@@ -417,36 +366,10 @@ func vlessLink(
for _, addr := range addrs { for _, addr := range addrs {
params := baseParams params := baseParams
if tls, ok := addr["tls"].(map[string]interface{}); ok && tls["enabled"].(bool) { if tls, ok := addr["tls"].(map[string]interface{}); ok && tls["enabled"].(bool) {
if reality, ok := tls["reality"].(map[string]interface{}); ok && reality["enabled"].(bool) { getTlsParams(&params, tls, "allowInsecure")
params["security"] = "reality"
if pbk, ok := reality["public_key"].(string); ok {
params["pbk"] = pbk
}
if sid, ok := reality["short_id"].(string); ok {
params["sid"] = sid
}
} else {
params["security"] = "tls"
if insecure, ok := tls["insecure"].(bool); ok && insecure {
params["allowInsecure"] = "1"
}
}
if flow, ok := userConfig["flow"].(string); ok { if flow, ok := userConfig["flow"].(string); ok {
params["flow"] = flow params["flow"] = flow
} }
if utls, ok := tls["utls"].(map[string]interface{}); ok {
params["fp"], _ = utls["fingerprint"].(string)
}
if sni, ok := tls["server_name"].(string); ok {
params["sni"] = sni
}
if alpn, ok := tls["alpn"].([]interface{}); ok {
alpnList := make([]string, len(alpn))
for i, v := range alpn {
alpnList[i] = v.(string)
}
params["alpn"] = strings.Join(alpnList, ",")
}
} }
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := fmt.Sprintf("vless://%s@%s:%.0f", uuid, addr["server"].(string), port) uri := fmt.Sprintf("vless://%s@%s:%.0f", uuid, addr["server"].(string), port)
@@ -468,33 +391,7 @@ func trojanLink(
for _, addr := range addrs { for _, addr := range addrs {
params := baseParams params := baseParams
if tls, ok := addr["tls"].(map[string]interface{}); ok && tls["enabled"].(bool) { if tls, ok := addr["tls"].(map[string]interface{}); ok && tls["enabled"].(bool) {
if reality, ok := tls["reality"].(map[string]interface{}); ok && reality["enabled"].(bool) { getTlsParams(&params, tls, "allowInsecure")
params["security"] = "reality"
if pbk, ok := reality["public_key"].(string); ok {
params["pbk"] = pbk
}
if sid, ok := reality["short_id"].(string); ok {
params["sid"] = sid
}
} else {
params["security"] = "tls"
if insecure, ok := tls["insecure"].(bool); ok && insecure {
params["allowInsecure"] = "1"
}
}
if utls, ok := tls["utls"].(map[string]interface{}); ok {
params["fp"], _ = utls["fingerprint"].(string)
}
if sni, ok := tls["server_name"].(string); ok {
params["sni"] = sni
}
if alpn, ok := tls["alpn"].([]interface{}); ok {
alpnList := make([]string, len(alpn))
for i, v := range alpn {
alpnList[i] = v.(string)
}
params["alpn"] = strings.Join(alpnList, ",")
}
} }
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := fmt.Sprintf("trojan://%s@%s:%.0f", password, addr["server"].(string), port) uri := fmt.Sprintf("trojan://%s@%s:%.0f", password, addr["server"].(string), port)
@@ -630,22 +527,35 @@ func getTransportParams(t interface{}) map[string]string {
return params return params
} }
func getTlsParams(t interface{}) map[string]string { func getTlsParams(params *map[string]string, tls map[string]interface{}, insecureKey string) {
params := map[string]string{} if reality, ok := tls["reality"].(map[string]interface{}); ok && reality["enabled"].(bool) {
if tls, hasTls := t.(map[string]interface{}); hasTls { (*params)["security"] = "reality"
if sni, ok := tls["server_name"].(string); ok { if pbk, ok := reality["public_key"].(string); ok {
params["sni"] = sni (*params)["pbk"] = pbk
} }
if alpn, ok := tls["alpn"].([]interface{}); ok { if sid, ok := reality["short_id"].(string); ok {
alpnList := make([]string, len(alpn)) (*params)["sid"] = sid
for i, v := range alpn {
alpnList[i] = v.(string)
}
params["alpn"] = strings.Join(alpnList, ",")
} }
} else {
(*params)["security"] = "tls"
if insecure, ok := tls["insecure"].(bool); ok && insecure { if insecure, ok := tls["insecure"].(bool); ok && insecure {
params["insecure"] = "1" (*params)[insecureKey] = "1"
}
if disableSni, ok := tls["disable_sni"].(bool); ok && disableSni {
(*params)["disable_sni"] = "1"
} }
} }
return params if utls, ok := tls["utls"].(map[string]interface{}); ok {
(*params)["fp"], _ = utls["fingerprint"].(string)
}
if sni, ok := tls["server_name"].(string); ok {
(*params)["sni"] = sni
}
if alpn, ok := tls["alpn"].([]interface{}); ok {
alpnList := make([]string, len(alpn))
for i, v := range alpn {
alpnList[i] = v.(string)
}
(*params)["alpn"] = strings.Join(alpnList, ",")
}
} }