fix hysteria link generator #801

This commit is contained in:
Alireza Ahmadi
2025-09-11 23:23:58 +02:00
parent 4d1544864d
commit 7f24735677
+40 -20
View File
@@ -67,7 +67,9 @@ func LinkGenerator(clientConfig json.RawMessage, i *model.Inbound, hostname stri
return httpLink(userConfig["http"], *inbound, Addrs) return httpLink(userConfig["http"], *inbound, Addrs)
case "mixed": case "mixed":
return append( return append(
socksLink(userConfig["socks"], *inbound, Addrs), httpLink(userConfig["http"], *inbound, Addrs)...) socksLink(userConfig["socks"], *inbound, Addrs),
httpLink(userConfig["http"], *inbound, Addrs)...,
)
case "shadowsocks": case "shadowsocks":
return shadowsocksLink(userConfig, *inbound, Addrs) return shadowsocksLink(userConfig, *inbound, Addrs)
case "naive": case "naive":
@@ -157,7 +159,7 @@ func shadowsocksLink(
var links []string var links []string
for _, addr := range addrs { for _, addr := range addrs {
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
links = append(links, fmt.Sprintf("%s@%s:%d#%s", uriBase, addr["server"].(string), uint(port), addr["remark"].(string))) links = append(links, fmt.Sprintf("%s@%s:%.0f#%s", uriBase, addr["server"].(string), port, addr["remark"].(string)))
} }
return links return links
} }
@@ -198,7 +200,7 @@ func naiveLink(
} }
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := baseUri + toBase64([]byte(fmt.Sprintf("%s:%s@%s:%d", username, password, addr["server"].(string), uint(port)))) uri := baseUri + toBase64([]byte(fmt.Sprintf("%s:%s@%s:%.0f", username, password, addr["server"].(string), port)))
links = append(links, addParams(uri, params, addr["remark"].(string))) links = append(links, addParams(uri, params, addr["remark"].(string)))
} }
return links return links
@@ -214,11 +216,11 @@ func hysteriaLink(
for _, addr := range addrs { for _, addr := range addrs {
params := map[string]string{} params := map[string]string{}
if upmbps, ok := inbound["up_mbps"].(string); ok { if upmbps, ok := inbound["up_mbps"].(float64); ok {
params["up_mbps"] = upmbps params["upmbps"] = fmt.Sprintf("%.0f", upmbps)
} }
if downmbps, ok := inbound["down_mbps"].(string); ok { if downmbps, ok := inbound["down_mbps"].(float64); ok {
params["down_mbps"] = downmbps params["downmbps"] = fmt.Sprintf("%.0f", downmbps)
} }
if auth, ok := userConfig["auth_str"].(string); ok { if auth, ok := userConfig["auth_str"].(string); ok {
params["auth"] = auth params["auth"] = auth
@@ -246,9 +248,18 @@ func hysteriaLink(
} else { } else {
params["fastopen"] = "0" params["fastopen"] = "0"
} }
var outJson map[string]interface{}
json.Unmarshal(inbound["out_json"].(json.RawMessage), &outJson)
if mport, ok := outJson["server_ports"].([]interface{}); ok {
mportList := make([]string, len(mport))
for i, v := range mport {
mportList[i] = v.(string)
}
params["mport"] = strings.Join(mportList, ",")
}
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := fmt.Sprintf("%s%s:%d", baseUri, addr["server"].(string), uint(port)) uri := fmt.Sprintf("%s%s:%.0f", baseUri, addr["server"].(string), port)
links = append(links, addParams(uri, params, addr["remark"].(string))) links = append(links, addParams(uri, params, addr["remark"].(string)))
} }
@@ -266,11 +277,11 @@ func hysteria2Link(
for _, addr := range addrs { for _, addr := range addrs {
params := map[string]string{} params := map[string]string{}
if upmbps, ok := inbound["up_mbps"].(string); ok { if upmbps, ok := inbound["up_mbps"].(float64); ok {
params["up_mbps"] = upmbps params["upmbps"] = fmt.Sprintf("%.0f", upmbps)
} }
if downmbps, ok := inbound["down_mbps"].(string); ok { if downmbps, ok := inbound["down_mbps"].(float64); ok {
params["down_mbps"] = 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 { if sni, ok := tls["server_name"].(string); ok {
@@ -300,9 +311,18 @@ func hysteria2Link(
} else { } else {
params["fastopen"] = "0" params["fastopen"] = "0"
} }
var outJson map[string]interface{}
json.Unmarshal(inbound["out_json"].(json.RawMessage), &outJson)
if mport, ok := outJson["server_ports"].([]interface{}); ok {
mportList := make([]string, len(mport))
for i, v := range mport {
mportList[i] = v.(string)
}
params["mport"] = strings.Join(mportList, ",")
}
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := fmt.Sprintf("%s%s:%d", baseUri, addr["server"].(string), uint(port)) uri := fmt.Sprintf("%s%s:%.0f", baseUri, addr["server"].(string), port)
links = append(links, addParams(uri, params, addr["remark"].(string))) links = append(links, addParams(uri, params, addr["remark"].(string)))
} }
@@ -336,7 +356,7 @@ func anytlsLink(
} }
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := fmt.Sprintf("%s%s:%d", baseUri, addr["server"].(string), uint(port)) uri := fmt.Sprintf("%s%s:%.0f", baseUri, addr["server"].(string), port)
links = append(links, addParams(uri, params, addr["remark"].(string))) links = append(links, addParams(uri, params, addr["remark"].(string)))
} }
@@ -378,7 +398,7 @@ func tuicLink(
} }
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := fmt.Sprintf("%s%s:%d", baseUri, addr["server"].(string), uint(port)) uri := fmt.Sprintf("%s%s:%.0f", baseUri, addr["server"].(string), port)
links = append(links, addParams(uri, params, addr["remark"].(string))) links = append(links, addParams(uri, params, addr["remark"].(string)))
} }
@@ -429,7 +449,7 @@ func vlessLink(
} }
} }
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := fmt.Sprintf("vless://%s@%s:%d", uuid, addr["server"].(string), uint(port)) uri := fmt.Sprintf("vless://%s@%s:%.0f", uuid, addr["server"].(string), port)
uri = addParams(uri, params, addr["remark"].(string)) uri = addParams(uri, params, addr["remark"].(string))
links = append(links, uri) links = append(links, uri)
} }
@@ -477,7 +497,7 @@ func trojanLink(
} }
} }
port, _ := addr["server_port"].(float64) port, _ := addr["server_port"].(float64)
uri := fmt.Sprintf("trojan://%s@%s:%d", password, addr["server"].(string), uint(port)) uri := fmt.Sprintf("trojan://%s@%s:%.0f", password, addr["server"].(string), port)
uri = addParams(uri, params, addr["remark"].(string)) uri = addParams(uri, params, addr["remark"].(string))
links = append(links, uri) links = append(links, uri)
} }
@@ -556,11 +576,11 @@ func toBase64(d []byte) string {
func addParams(uri string, params map[string]string, remark string) string { func addParams(uri string, params map[string]string, remark string) string {
URL, _ := url.Parse(uri) URL, _ := url.Parse(uri)
q := URL.Query() var q []string
for k, v := range params { for k, v := range params {
q.Add(k, v) q = append(q, fmt.Sprintf("%s=%s", k, v))
} }
URL.RawQuery = q.Encode() URL.RawQuery = strings.Join(q, "&")
URL.Fragment = remark URL.Fragment = remark
return URL.String() return URL.String()
} }