Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sub/subService.go')
-rw-r--r--sub/subService.go190
1 files changed, 95 insertions, 95 deletions
diff --git a/sub/subService.go b/sub/subService.go
index f52d4b67..9f26c0e0 100644
--- a/sub/subService.go
+++ b/sub/subService.go
@@ -141,9 +141,9 @@ func (s *SubService) getFallbackMaster(dest string, streamSettings string) (stri
return "", 0, "", err
}
- var stream map[string]interface{}
+ var stream map[string]any
json.Unmarshal([]byte(streamSettings), &stream)
- var masterStream map[string]interface{}
+ var masterStream map[string]any
json.Unmarshal([]byte(inbound.StreamSettings), &masterStream)
stream["security"] = masterStream["security"]
stream["tlsSettings"] = masterStream["tlsSettings"]
@@ -171,66 +171,66 @@ func (s *SubService) genVmessLink(inbound *model.Inbound, email string) string {
if inbound.Protocol != model.VMESS {
return ""
}
- obj := map[string]interface{}{
+ obj := map[string]any{
"v": "2",
"add": s.address,
"port": inbound.Port,
"type": "none",
}
- var stream map[string]interface{}
+ var stream map[string]any
json.Unmarshal([]byte(inbound.StreamSettings), &stream)
network, _ := stream["network"].(string)
obj["net"] = network
switch network {
case "tcp":
- tcp, _ := stream["tcpSettings"].(map[string]interface{})
- header, _ := tcp["header"].(map[string]interface{})
+ tcp, _ := stream["tcpSettings"].(map[string]any)
+ header, _ := tcp["header"].(map[string]any)
typeStr, _ := header["type"].(string)
obj["type"] = typeStr
if typeStr == "http" {
- request := header["request"].(map[string]interface{})
- requestPath, _ := request["path"].([]interface{})
+ request := header["request"].(map[string]any)
+ requestPath, _ := request["path"].([]any)
obj["path"] = requestPath[0].(string)
- headers, _ := request["headers"].(map[string]interface{})
+ headers, _ := request["headers"].(map[string]any)
obj["host"] = searchHost(headers)
}
case "kcp":
- kcp, _ := stream["kcpSettings"].(map[string]interface{})
- header, _ := kcp["header"].(map[string]interface{})
+ kcp, _ := stream["kcpSettings"].(map[string]any)
+ header, _ := kcp["header"].(map[string]any)
obj["type"], _ = header["type"].(string)
obj["path"], _ = kcp["seed"].(string)
case "ws":
- ws, _ := stream["wsSettings"].(map[string]interface{})
+ ws, _ := stream["wsSettings"].(map[string]any)
obj["path"] = ws["path"].(string)
if host, ok := ws["host"].(string); ok && len(host) > 0 {
obj["host"] = host
} else {
- headers, _ := ws["headers"].(map[string]interface{})
+ headers, _ := ws["headers"].(map[string]any)
obj["host"] = searchHost(headers)
}
case "grpc":
- grpc, _ := stream["grpcSettings"].(map[string]interface{})
+ grpc, _ := stream["grpcSettings"].(map[string]any)
obj["path"] = grpc["serviceName"].(string)
obj["authority"] = grpc["authority"].(string)
if grpc["multiMode"].(bool) {
obj["type"] = "multi"
}
case "httpupgrade":
- httpupgrade, _ := stream["httpupgradeSettings"].(map[string]interface{})
+ httpupgrade, _ := stream["httpupgradeSettings"].(map[string]any)
obj["path"] = httpupgrade["path"].(string)
if host, ok := httpupgrade["host"].(string); ok && len(host) > 0 {
obj["host"] = host
} else {
- headers, _ := httpupgrade["headers"].(map[string]interface{})
+ headers, _ := httpupgrade["headers"].(map[string]any)
obj["host"] = searchHost(headers)
}
case "xhttp":
- xhttp, _ := stream["xhttpSettings"].(map[string]interface{})
+ xhttp, _ := stream["xhttpSettings"].(map[string]any)
obj["path"] = xhttp["path"].(string)
if host, ok := xhttp["host"].(string); ok && len(host) > 0 {
obj["host"] = host
} else {
- headers, _ := xhttp["headers"].(map[string]interface{})
+ headers, _ := xhttp["headers"].(map[string]any)
obj["host"] = searchHost(headers)
}
obj["mode"] = xhttp["mode"].(string)
@@ -238,8 +238,8 @@ func (s *SubService) genVmessLink(inbound *model.Inbound, email string) string {
security, _ := stream["security"].(string)
obj["tls"] = security
if security == "tls" {
- tlsSetting, _ := stream["tlsSettings"].(map[string]interface{})
- alpns, _ := tlsSetting["alpn"].([]interface{})
+ tlsSetting, _ := stream["tlsSettings"].(map[string]any)
+ alpns, _ := tlsSetting["alpn"].([]any)
if len(alpns) > 0 {
var alpn []string
for _, a := range alpns {
@@ -273,14 +273,14 @@ func (s *SubService) genVmessLink(inbound *model.Inbound, email string) string {
obj["id"] = clients[clientIndex].ID
obj["scy"] = clients[clientIndex].Security
- externalProxies, _ := stream["externalProxy"].([]interface{})
+ externalProxies, _ := stream["externalProxy"].([]any)
if len(externalProxies) > 0 {
links := ""
for index, externalProxy := range externalProxies {
- ep, _ := externalProxy.(map[string]interface{})
+ ep, _ := externalProxy.(map[string]any)
newSecurity, _ := ep["forceTls"].(string)
- newObj := map[string]interface{}{}
+ newObj := map[string]any{}
for key, value := range obj {
if !(newSecurity == "none" && (key == "alpn" || key == "sni" || key == "fp" || key == "allowInsecure")) {
newObj[key] = value
@@ -313,7 +313,7 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string {
if inbound.Protocol != model.VLESS {
return ""
}
- var stream map[string]interface{}
+ var stream map[string]any
json.Unmarshal([]byte(inbound.StreamSettings), &stream)
clients, _ := s.inboundService.GetClients(inbound)
clientIndex := -1
@@ -331,54 +331,54 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string {
switch streamNetwork {
case "tcp":
- tcp, _ := stream["tcpSettings"].(map[string]interface{})
- header, _ := tcp["header"].(map[string]interface{})
+ tcp, _ := stream["tcpSettings"].(map[string]any)
+ header, _ := tcp["header"].(map[string]any)
typeStr, _ := header["type"].(string)
if typeStr == "http" {
- request := header["request"].(map[string]interface{})
- requestPath, _ := request["path"].([]interface{})
+ request := header["request"].(map[string]any)
+ requestPath, _ := request["path"].([]any)
params["path"] = requestPath[0].(string)
- headers, _ := request["headers"].(map[string]interface{})
+ headers, _ := request["headers"].(map[string]any)
params["host"] = searchHost(headers)
params["headerType"] = "http"
}
case "kcp":
- kcp, _ := stream["kcpSettings"].(map[string]interface{})
- header, _ := kcp["header"].(map[string]interface{})
+ kcp, _ := stream["kcpSettings"].(map[string]any)
+ header, _ := kcp["header"].(map[string]any)
params["headerType"] = header["type"].(string)
params["seed"] = kcp["seed"].(string)
case "ws":
- ws, _ := stream["wsSettings"].(map[string]interface{})
+ ws, _ := stream["wsSettings"].(map[string]any)
params["path"] = ws["path"].(string)
if host, ok := ws["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := ws["headers"].(map[string]interface{})
+ headers, _ := ws["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
case "grpc":
- grpc, _ := stream["grpcSettings"].(map[string]interface{})
+ grpc, _ := stream["grpcSettings"].(map[string]any)
params["serviceName"] = grpc["serviceName"].(string)
params["authority"], _ = grpc["authority"].(string)
if grpc["multiMode"].(bool) {
params["mode"] = "multi"
}
case "httpupgrade":
- httpupgrade, _ := stream["httpupgradeSettings"].(map[string]interface{})
+ httpupgrade, _ := stream["httpupgradeSettings"].(map[string]any)
params["path"] = httpupgrade["path"].(string)
if host, ok := httpupgrade["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := httpupgrade["headers"].(map[string]interface{})
+ headers, _ := httpupgrade["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
case "xhttp":
- xhttp, _ := stream["xhttpSettings"].(map[string]interface{})
+ xhttp, _ := stream["xhttpSettings"].(map[string]any)
params["path"] = xhttp["path"].(string)
if host, ok := xhttp["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := xhttp["headers"].(map[string]interface{})
+ headers, _ := xhttp["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
params["mode"] = xhttp["mode"].(string)
@@ -386,8 +386,8 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string {
security, _ := stream["security"].(string)
if security == "tls" {
params["security"] = "tls"
- tlsSetting, _ := stream["tlsSettings"].(map[string]interface{})
- alpns, _ := tlsSetting["alpn"].([]interface{})
+ tlsSetting, _ := stream["tlsSettings"].(map[string]any)
+ alpns, _ := tlsSetting["alpn"].([]any)
var alpn []string
for _, a := range alpns {
alpn = append(alpn, a.(string))
@@ -418,18 +418,18 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string {
if security == "reality" {
params["security"] = "reality"
- realitySetting, _ := stream["realitySettings"].(map[string]interface{})
+ realitySetting, _ := stream["realitySettings"].(map[string]any)
realitySettings, _ := searchKey(realitySetting, "settings")
if realitySetting != nil {
if sniValue, ok := searchKey(realitySetting, "serverNames"); ok {
- sNames, _ := sniValue.([]interface{})
+ sNames, _ := sniValue.([]any)
params["sni"] = sNames[random.Num(len(sNames))].(string)
}
if pbkValue, ok := searchKey(realitySettings, "publicKey"); ok {
params["pbk"], _ = pbkValue.(string)
}
if sidValue, ok := searchKey(realitySetting, "shortIds"); ok {
- shortIds, _ := sidValue.([]interface{})
+ shortIds, _ := sidValue.([]any)
params["sid"] = shortIds[random.Num(len(shortIds))].(string)
}
if fpValue, ok := searchKey(realitySettings, "fingerprint"); ok {
@@ -449,12 +449,12 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string {
params["security"] = "none"
}
- externalProxies, _ := stream["externalProxy"].([]interface{})
+ externalProxies, _ := stream["externalProxy"].([]any)
if len(externalProxies) > 0 {
links := ""
for index, externalProxy := range externalProxies {
- ep, _ := externalProxy.(map[string]interface{})
+ ep, _ := externalProxy.(map[string]any)
newSecurity, _ := ep["forceTls"].(string)
dest, _ := ep["dest"].(string)
port := int(ep["port"].(float64))
@@ -507,7 +507,7 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string
if inbound.Protocol != model.Trojan {
return ""
}
- var stream map[string]interface{}
+ var stream map[string]any
json.Unmarshal([]byte(inbound.StreamSettings), &stream)
clients, _ := s.inboundService.GetClients(inbound)
clientIndex := -1
@@ -525,54 +525,54 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string
switch streamNetwork {
case "tcp":
- tcp, _ := stream["tcpSettings"].(map[string]interface{})
- header, _ := tcp["header"].(map[string]interface{})
+ tcp, _ := stream["tcpSettings"].(map[string]any)
+ header, _ := tcp["header"].(map[string]any)
typeStr, _ := header["type"].(string)
if typeStr == "http" {
- request := header["request"].(map[string]interface{})
- requestPath, _ := request["path"].([]interface{})
+ request := header["request"].(map[string]any)
+ requestPath, _ := request["path"].([]any)
params["path"] = requestPath[0].(string)
- headers, _ := request["headers"].(map[string]interface{})
+ headers, _ := request["headers"].(map[string]any)
params["host"] = searchHost(headers)
params["headerType"] = "http"
}
case "kcp":
- kcp, _ := stream["kcpSettings"].(map[string]interface{})
- header, _ := kcp["header"].(map[string]interface{})
+ kcp, _ := stream["kcpSettings"].(map[string]any)
+ header, _ := kcp["header"].(map[string]any)
params["headerType"] = header["type"].(string)
params["seed"] = kcp["seed"].(string)
case "ws":
- ws, _ := stream["wsSettings"].(map[string]interface{})
+ ws, _ := stream["wsSettings"].(map[string]any)
params["path"] = ws["path"].(string)
if host, ok := ws["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := ws["headers"].(map[string]interface{})
+ headers, _ := ws["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
case "grpc":
- grpc, _ := stream["grpcSettings"].(map[string]interface{})
+ grpc, _ := stream["grpcSettings"].(map[string]any)
params["serviceName"] = grpc["serviceName"].(string)
params["authority"], _ = grpc["authority"].(string)
if grpc["multiMode"].(bool) {
params["mode"] = "multi"
}
case "httpupgrade":
- httpupgrade, _ := stream["httpupgradeSettings"].(map[string]interface{})
+ httpupgrade, _ := stream["httpupgradeSettings"].(map[string]any)
params["path"] = httpupgrade["path"].(string)
if host, ok := httpupgrade["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := httpupgrade["headers"].(map[string]interface{})
+ headers, _ := httpupgrade["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
case "xhttp":
- xhttp, _ := stream["xhttpSettings"].(map[string]interface{})
+ xhttp, _ := stream["xhttpSettings"].(map[string]any)
params["path"] = xhttp["path"].(string)
if host, ok := xhttp["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := xhttp["headers"].(map[string]interface{})
+ headers, _ := xhttp["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
params["mode"] = xhttp["mode"].(string)
@@ -580,8 +580,8 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string
security, _ := stream["security"].(string)
if security == "tls" {
params["security"] = "tls"
- tlsSetting, _ := stream["tlsSettings"].(map[string]interface{})
- alpns, _ := tlsSetting["alpn"].([]interface{})
+ tlsSetting, _ := stream["tlsSettings"].(map[string]any)
+ alpns, _ := tlsSetting["alpn"].([]any)
var alpn []string
for _, a := range alpns {
alpn = append(alpn, a.(string))
@@ -608,18 +608,18 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string
if security == "reality" {
params["security"] = "reality"
- realitySetting, _ := stream["realitySettings"].(map[string]interface{})
+ realitySetting, _ := stream["realitySettings"].(map[string]any)
realitySettings, _ := searchKey(realitySetting, "settings")
if realitySetting != nil {
if sniValue, ok := searchKey(realitySetting, "serverNames"); ok {
- sNames, _ := sniValue.([]interface{})
+ sNames, _ := sniValue.([]any)
params["sni"] = sNames[random.Num(len(sNames))].(string)
}
if pbkValue, ok := searchKey(realitySettings, "publicKey"); ok {
params["pbk"], _ = pbkValue.(string)
}
if sidValue, ok := searchKey(realitySetting, "shortIds"); ok {
- shortIds, _ := sidValue.([]interface{})
+ shortIds, _ := sidValue.([]any)
params["sid"] = shortIds[random.Num(len(shortIds))].(string)
}
if fpValue, ok := searchKey(realitySettings, "fingerprint"); ok {
@@ -639,12 +639,12 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string
params["security"] = "none"
}
- externalProxies, _ := stream["externalProxy"].([]interface{})
+ externalProxies, _ := stream["externalProxy"].([]any)
if len(externalProxies) > 0 {
links := ""
for index, externalProxy := range externalProxies {
- ep, _ := externalProxy.(map[string]interface{})
+ ep, _ := externalProxy.(map[string]any)
newSecurity, _ := ep["forceTls"].(string)
dest, _ := ep["dest"].(string)
port := int(ep["port"].(float64))
@@ -698,11 +698,11 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st
if inbound.Protocol != model.Shadowsocks {
return ""
}
- var stream map[string]interface{}
+ var stream map[string]any
json.Unmarshal([]byte(inbound.StreamSettings), &stream)
clients, _ := s.inboundService.GetClients(inbound)
- var settings map[string]interface{}
+ var settings map[string]any
json.Unmarshal([]byte(inbound.Settings), &settings)
inboundPassword := settings["password"].(string)
method := settings["method"].(string)
@@ -719,54 +719,54 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st
switch streamNetwork {
case "tcp":
- tcp, _ := stream["tcpSettings"].(map[string]interface{})
- header, _ := tcp["header"].(map[string]interface{})
+ tcp, _ := stream["tcpSettings"].(map[string]any)
+ header, _ := tcp["header"].(map[string]any)
typeStr, _ := header["type"].(string)
if typeStr == "http" {
- request := header["request"].(map[string]interface{})
- requestPath, _ := request["path"].([]interface{})
+ request := header["request"].(map[string]any)
+ requestPath, _ := request["path"].([]any)
params["path"] = requestPath[0].(string)
- headers, _ := request["headers"].(map[string]interface{})
+ headers, _ := request["headers"].(map[string]any)
params["host"] = searchHost(headers)
params["headerType"] = "http"
}
case "kcp":
- kcp, _ := stream["kcpSettings"].(map[string]interface{})
- header, _ := kcp["header"].(map[string]interface{})
+ kcp, _ := stream["kcpSettings"].(map[string]any)
+ header, _ := kcp["header"].(map[string]any)
params["headerType"] = header["type"].(string)
params["seed"] = kcp["seed"].(string)
case "ws":
- ws, _ := stream["wsSettings"].(map[string]interface{})
+ ws, _ := stream["wsSettings"].(map[string]any)
params["path"] = ws["path"].(string)
if host, ok := ws["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := ws["headers"].(map[string]interface{})
+ headers, _ := ws["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
case "grpc":
- grpc, _ := stream["grpcSettings"].(map[string]interface{})
+ grpc, _ := stream["grpcSettings"].(map[string]any)
params["serviceName"] = grpc["serviceName"].(string)
params["authority"], _ = grpc["authority"].(string)
if grpc["multiMode"].(bool) {
params["mode"] = "multi"
}
case "httpupgrade":
- httpupgrade, _ := stream["httpupgradeSettings"].(map[string]interface{})
+ httpupgrade, _ := stream["httpupgradeSettings"].(map[string]any)
params["path"] = httpupgrade["path"].(string)
if host, ok := httpupgrade["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := httpupgrade["headers"].(map[string]interface{})
+ headers, _ := httpupgrade["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
case "xhttp":
- xhttp, _ := stream["xhttpSettings"].(map[string]interface{})
+ xhttp, _ := stream["xhttpSettings"].(map[string]any)
params["path"] = xhttp["path"].(string)
if host, ok := xhttp["host"].(string); ok && len(host) > 0 {
params["host"] = host
} else {
- headers, _ := xhttp["headers"].(map[string]interface{})
+ headers, _ := xhttp["headers"].(map[string]any)
params["host"] = searchHost(headers)
}
params["mode"] = xhttp["mode"].(string)
@@ -775,8 +775,8 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st
security, _ := stream["security"].(string)
if security == "tls" {
params["security"] = "tls"
- tlsSetting, _ := stream["tlsSettings"].(map[string]interface{})
- alpns, _ := tlsSetting["alpn"].([]interface{})
+ tlsSetting, _ := stream["tlsSettings"].(map[string]any)
+ alpns, _ := tlsSetting["alpn"].([]any)
var alpn []string
for _, a := range alpns {
alpn = append(alpn, a.(string))
@@ -806,12 +806,12 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st
encPart = fmt.Sprintf("%s:%s:%s", method, inboundPassword, clients[clientIndex].Password)
}
- externalProxies, _ := stream["externalProxy"].([]interface{})
+ externalProxies, _ := stream["externalProxy"].([]any)
if len(externalProxies) > 0 {
links := ""
for index, externalProxy := range externalProxies {
- ep, _ := externalProxy.(map[string]interface{})
+ ep, _ := externalProxy.(map[string]any)
newSecurity, _ := ep["forceTls"].(string)
dest, _ := ep["dest"].(string)
port := int(ep["port"].(float64))
@@ -944,9 +944,9 @@ func (s *SubService) genRemark(inbound *model.Inbound, email string, extra strin
return strings.Join(remark, separationChar)
}
-func searchKey(data interface{}, key string) (interface{}, bool) {
+func searchKey(data any, key string) (any, bool) {
switch val := data.(type) {
- case map[string]interface{}:
+ case map[string]any:
for k, v := range val {
if k == key {
return v, true
@@ -955,7 +955,7 @@ func searchKey(data interface{}, key string) (interface{}, bool) {
return result, true
}
}
- case []interface{}:
+ case []any:
for _, v := range val {
if result, ok := searchKey(v, key); ok {
return result, true
@@ -965,19 +965,19 @@ func searchKey(data interface{}, key string) (interface{}, bool) {
return nil, false
}
-func searchHost(headers interface{}) string {
- data, _ := headers.(map[string]interface{})
+func searchHost(headers any) string {
+ data, _ := headers.(map[string]any)
for k, v := range data {
if strings.EqualFold(k, "host") {
switch v.(type) {
- case []interface{}:
- hosts, _ := v.([]interface{})
+ case []any:
+ hosts, _ := v.([]any)
if len(hosts) > 0 {
return hosts[0].(string)
} else {
return ""
}
- case interface{}:
+ case any:
return v.(string)
}
}