From 331c939c29262d5378e0b987382b29b253580f4e Mon Sep 17 00:00:00 2001 From: Hiddify <114227601+hiddify-com@users.noreply.github.com> Date: Tue, 16 Jan 2024 23:57:58 +0000 Subject: [PATCH] better manage configs --- config/parser.go | 31 ++++++++++++++++++++++++++----- go.mod | 3 ++- go.sum | 12 ++++++++++-- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/config/parser.go b/config/parser.go index 160d168..5cef1c7 100644 --- a/config/parser.go +++ b/config/parser.go @@ -1,10 +1,11 @@ package config + import ( _ "embed" "fmt" "os" - "encoding/json" + "github.com/titanous/json5" "github.com/hiddify/ray2sing/ray2sing" "github.com/sagernet/sing-box/experimental/libbox" @@ -33,6 +34,10 @@ func ParseConfig(path string, debug bool) ([]byte, error) { config, err := parser(content, debug) if err == nil { fmt.Printf("[ConfigParser] success with parser #%d, checking...\n", index) + err_internal_check:=isCorrectSingboxConfig(config,debug) + if err_internal_check!=nil{ + return config, err_internal_check + } err = libbox.CheckConfig(string(config)) return config, err } @@ -57,6 +62,10 @@ func parseClashConfig(content []byte, debug bool) ([]byte, error) { fmt.Printf("[ClashParser] unmarshal error: %s\n", err) return nil, err } + if len(clashConfig.Proxies)==0{ + return nil,fmt.Errorf("No Outbound Available! %s", string(content)) + } + sbConfig, err := convert.Clash2sing(clashConfig) if err != nil { @@ -74,11 +83,23 @@ func parseClashConfig(content []byte, debug bool) ([]byte, error) { } func parseSingboxConfig(content []byte, debug bool) ([]byte, error) { - - var dummy interface{} - err := json.Unmarshal(content, &dummy) - if err != nil{ + var dummy map[string]interface{} + err := json5.Unmarshal(content, &dummy) + if err != nil { return nil, err } return content, nil } +func isCorrectSingboxConfig(content []byte, debug bool) error { + var dummy map[string]interface{} + err := json5.Unmarshal(content, &dummy) + if err != nil { + return err + } + + if dummy["outbounds"]==nil { + return fmt.Errorf("No Outbound Available! %s", string(content)) + } + + return nil +} diff --git a/go.mod b/go.mod index ab5ed12..049d286 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/sagernet/sing-box v1.7.8 github.com/sagernet/sing-dns v0.1.12 github.com/spf13/cobra v1.8.0 + github.com/titanous/json5 v1.0.0 github.com/xmdhs/clash2singbox v0.0.2 gopkg.in/yaml.v3 v3.0.1 ) @@ -99,4 +100,4 @@ require ( lukechampine.com/blake3 v1.2.1 // indirect ) -replace github.com/sagernet/sing-box => github.com/hiddify/hiddify-sing-box v1.7.9-0.20240114235644-740afb0cb8b4 +replace github.com/sagernet/sing-box => github.com/hiddify/hiddify-sing-box v1.7.9-0.20240116233815-7864e2b96b56 diff --git a/go.sum b/go.sum index 9cbc4e5..da14360 100644 --- a/go.sum +++ b/go.sum @@ -47,8 +47,8 @@ github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a h1:fEBsGL/sjAuJrgah5X github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/hiddify/hiddify-sing-box v1.7.9-0.20240114235644-740afb0cb8b4 h1:xI+wJb7jFWw7AtAUYWUuIQ7krg0X/xIIG0D5sKMX+IE= -github.com/hiddify/hiddify-sing-box v1.7.9-0.20240114235644-740afb0cb8b4/go.mod h1:cxAxPGP5EAIL5gkgCpx46fkJ/5SUPB3NMCM0wcZAQig= +github.com/hiddify/hiddify-sing-box v1.7.9-0.20240116233815-7864e2b96b56 h1:M3Ywz+rT30KJSkRUqKB9+pkKmdNOnAQ8TLkPEv6kXC0= +github.com/hiddify/hiddify-sing-box v1.7.9-0.20240116233815-7864e2b96b56/go.mod h1:cxAxPGP5EAIL5gkgCpx46fkJ/5SUPB3NMCM0wcZAQig= github.com/hiddify/ray2sing v0.0.0-20240105113135-98cd4205af24 h1:eQR8WaMPsoF4dPUNVqd1xCo1hODUyrDzpIQr6UMGdzI= github.com/hiddify/ray2sing v0.0.0-20240105113135-98cd4205af24/go.mod h1:kAX09KiJcw0cyPOlmu9qiJLzIDgNiob0vR2BVHl1jYA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -65,6 +65,8 @@ github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/q github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/libdns/alidns v1.0.3 h1:LFHuGnbseq5+HCeGa1aW8awyX/4M2psB9962fdD2+yQ= github.com/libdns/alidns v1.0.3/go.mod h1:e18uAG6GanfRhcJj6/tps2rCMzQJaYVcGKT+ELjdjGE= github.com/libdns/cloudflare v0.1.0 h1:93WkJaGaiXCe353LHEP36kAWCUw0YjFqwhkBkU2/iic= @@ -112,6 +114,8 @@ github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs= github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= +github.com/robertkrimen/otto v0.2.1 h1:FVP0PJ0AHIjC+N4pKCG9yCDz6LHNPCwi/GKID5pGGF0= +github.com/robertkrimen/otto v0.2.1/go.mod h1:UPwtJ1Xu7JrLcZjNWN8orJaM5n5YEtqL//farB5FlRY= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a h1:+NkI2670SQpQWvkkD2QgdTuzQG263YZ+2emfpeyGqW0= github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a/go.mod h1:63s7jpZqcDAIpj8oI/1v4Izok+npJOHACFCU6+huCkM= @@ -176,6 +180,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/titanous/json5 v1.0.0 h1:hJf8Su1d9NuI/ffpxgxQfxh/UiBFZX7bMPid0rIL/7s= +github.com/titanous/json5 v1.0.0/go.mod h1:7JH1M8/LHKc6cyP5o5g3CSaRj+mBrIimTxzpvmckH8c= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 h1:gga7acRE695APm9hlsSMoOoE65U4/TcqNj90mc69Rlg= @@ -282,6 +288,8 @@ google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= +gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=