From b2a0ccfe02bbb82b82fe92b363a7e6430ca0674c Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Thu, 7 Aug 2025 00:35:12 +0200 Subject: [PATCH] fix ss in json sub --- sub/jsonService.go | 35 ++++++++++++++++++++++++++++++----- util/outJson.go | 1 - 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/sub/jsonService.go b/sub/jsonService.go index b8fde0e..4da59d6 100644 --- a/sub/jsonService.go +++ b/sub/jsonService.go @@ -7,6 +7,7 @@ import ( "s-ui/database/model" "s-ui/service" "s-ui/util" + "strings" ) const defaultJson = ` @@ -128,12 +129,36 @@ func (j *JsonService) getOutbounds(clientConfig json.RawMessage, inbounds []*mod return nil, nil, err } protocol, _ := outbound["type"].(string) - config, _ := configs[protocol].(map[string]interface{}) - for key, value := range config { - if key == "name" || key == "alterId" || (key == "flow" && inData.TlsId == 0) { - continue + + // Shadowsocks + if protocol == "shadowsocks" { + var userPass []string + var inbOptions map[string]interface{} + err = json.Unmarshal(inData.Options, &inbOptions) + if err != nil { + return nil, nil, err + } + method, _ := inbOptions["method"].(string) + if strings.HasPrefix(method, "2022") { + inbPass, _ := inbOptions["password"].(string) + userPass = append(userPass, inbPass) + } + var pass string + if method == "2022-blake3-aes-128-gcm" { + pass, _ = configs["shadowsocks16"].(map[string]interface{})["password"].(string) + } else { + pass, _ = configs["shadowsocks"].(map[string]interface{})["password"].(string) + } + userPass = append(userPass, pass) + outbound["password"] = strings.Join(userPass, ":") + } else { // Other protocols + config, _ := configs[protocol].(map[string]interface{}) + for key, value := range config { + if key == "name" || key == "alterId" || (key == "flow" && inData.TlsId == 0) { + continue + } + outbound[key] = value } - outbound[key] = value } var addrs []map[string]interface{} diff --git a/util/outJson.go b/util/outJson.go index d44fbae..0131036 100644 --- a/util/outJson.go +++ b/util/outJson.go @@ -42,7 +42,6 @@ func FillOutJson(i *model.Inbound, hostname string) error { case "http", "socks", "mixed", "anytls": case "shadowsocks": shadowsocksOut(&outJson, *inbound) - return nil case "shadowtls": shadowTlsOut(&outJson, *inbound) case "hysteria":