From 1b31c80d2c813f816f32708f2b0bc05c79fa8fb6 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Mon, 4 Apr 2022 12:47:07 +0800 Subject: [PATCH] update imports --- cmd/gost/cmd.go | 85 ++++++++++++++++++---------------- cmd/gost/config.go | 15 +++--- cmd/gost/main.go | 9 +++- cmd/gost/register.go | 43 ++++++++--------- cmd/gost/tls.go | 107 ------------------------------------------- go.mod | 4 +- go.sum | 8 ++-- 7 files changed, 85 insertions(+), 186 deletions(-) delete mode 100644 cmd/gost/tls.go diff --git a/cmd/gost/cmd.go b/cmd/gost/cmd.go index 118e751..801f258 100644 --- a/cmd/gost/cmd.go +++ b/cmd/gost/cmd.go @@ -9,9 +9,9 @@ import ( "strings" "time" - "github.com/go-gost/core/metadata" - "github.com/go-gost/core/registry" "github.com/go-gost/x/config" + "github.com/go-gost/x/metadata" + "github.com/go-gost/x/registry" ) var ( @@ -87,11 +87,12 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { nodes = append(nodes, nodeCfg) } - md := metadata.MapMetadata(nodeConfig.Connector.Metadata) + mc := nodeConfig.Connector.Metadata + md := metadata.NewMetadata(mc) hopConfig := &config.HopConfig{ Name: fmt.Sprintf("hop-%d", i), - Selector: parseSelector(md), + Selector: parseSelector(mc), Nodes: nodes, } @@ -111,7 +112,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } hopConfig.Bypass = bypassCfg.Name cfg.Bypasses = append(cfg.Bypasses, bypassCfg) - md.Del("bypass") + delete(mc, "bypass") } if v := metadata.GetString(md, "resolver"); v != "" { resolverCfg := &config.ResolverConfig{ @@ -130,7 +131,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } hopConfig.Resolver = resolverCfg.Name cfg.Resolvers = append(cfg.Resolvers, resolverCfg) - md.Del("resolver") + delete(mc, "resolver") } if v := metadata.GetString(md, "hosts"); v != "" { hostsCfg := &config.HostsConfig{ @@ -151,18 +152,18 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } hopConfig.Hosts = hostsCfg.Name cfg.Hosts = append(cfg.Hosts, hostsCfg) - md.Del("hosts") + delete(mc, "hosts") } if v := metadata.GetString(md, "interface"); v != "" { hopConfig.Interface = v - md.Del("interface") + delete(mc, "interface") } if v := metadata.GetInt(md, "so_mark"); v > 0 { hopConfig.SockOpts = &config.SockOptsConfig{ Mark: v, } - md.Del("so_mark") + delete(mc, "so_mark") } chain.Hops = append(chain.Hops, hopConfig) @@ -188,10 +189,11 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } cfg.Services = append(cfg.Services, service) - md := metadata.MapMetadata(service.Handler.Metadata) + mh := service.Handler.Metadata + md := metadata.NewMetadata(mh) if v := metadata.GetInt(md, "retries"); v > 0 { service.Handler.Retries = v - md.Del("retries") + delete(mh, "retries") } if v := metadata.GetString(md, "admission"); v != "" { admCfg := &config.AdmissionConfig{ @@ -209,7 +211,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } service.Admission = admCfg.Name cfg.Admissions = append(cfg.Admissions, admCfg) - md.Del("admission") + delete(mh, "admission") } if v := metadata.GetString(md, "bypass"); v != "" { bypassCfg := &config.BypassConfig{ @@ -227,7 +229,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } service.Bypass = bypassCfg.Name cfg.Bypasses = append(cfg.Bypasses, bypassCfg) - md.Del("bypass") + delete(mh, "bypass") } if v := metadata.GetString(md, "resolver"); v != "" { resolverCfg := &config.ResolverConfig{ @@ -246,7 +248,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } service.Resolver = resolverCfg.Name cfg.Resolvers = append(cfg.Resolvers, resolverCfg) - md.Del("resolver") + delete(mh, "resolver") } if v := metadata.GetString(md, "hosts"); v != "" { hostsCfg := &config.HostsConfig{ @@ -267,7 +269,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } service.Hosts = hostsCfg.Name cfg.Hosts = append(cfg.Hosts, hostsCfg) - md.Del("hosts") + delete(mh, "hosts") } } @@ -324,12 +326,13 @@ func buildServiceConfig(url *url.URL) (*config.ServiceConfig, error) { auth.Password, _ = url.User.Password() } - md := metadata.MapMetadata{} + m := map[string]any{} for k, v := range url.Query() { if len(v) > 0 { - md[k] = v[0] + m[k] = v[0] } } + md := metadata.NewMetadata(m) if sa := metadata.GetString(md, "auth"); sa != "" { au, err := parseAuthFromCmd(sa) @@ -338,16 +341,16 @@ func buildServiceConfig(url *url.URL) (*config.ServiceConfig, error) { } auth = au } - md.Del("auth") + delete(m, "auth") tlsConfig := &config.TLSConfig{ CertFile: metadata.GetString(md, "certFile"), KeyFile: metadata.GetString(md, "keyFile"), CAFile: metadata.GetString(md, "caFile"), } - md.Del("certFile") - md.Del("keyFile") - md.Del("caFile") + delete(m, "certFile") + delete(m, "keyFile") + delete(m, "caFile") if tlsConfig.CertFile == "" { tlsConfig = nil @@ -358,28 +361,28 @@ func buildServiceConfig(url *url.URL) (*config.ServiceConfig, error) { } if v := metadata.GetString(md, "interface"); v != "" { svc.Interface = v - md.Del("interface") + delete(m, "interface") } if v := metadata.GetInt(md, "so_mark"); v > 0 { svc.SockOpts = &config.SockOptsConfig{ Mark: v, } - md.Del("so_mark") + delete(m, "so_mark") } if svc.Forwarder != nil { - svc.Forwarder.Selector = parseSelector(md) + svc.Forwarder.Selector = parseSelector(m) } svc.Handler = &config.HandlerConfig{ Type: handler, Auth: auth, - Metadata: md, + Metadata: m, } svc.Listener = &config.ListenerConfig{ Type: listener, TLS: tlsConfig, - Metadata: md, + Metadata: m, } if svc.Handler.Type == "sshd" { @@ -426,12 +429,13 @@ func buildNodeConfig(url *url.URL) (*config.NodeConfig, error) { auth.Password, _ = url.User.Password() } - md := metadata.MapMetadata{} + m := map[string]any{} for k, v := range url.Query() { if len(v) > 0 { - md[k] = v[0] + m[k] = v[0] } } + md := metadata.NewMetadata(m) if sauth := metadata.GetString(md, "auth"); sauth != "" && auth == nil { au, err := parseAuthFromCmd(sauth) @@ -440,7 +444,7 @@ func buildNodeConfig(url *url.URL) (*config.NodeConfig, error) { } auth = au } - md.Del("auth") + delete(m, "auth") tlsConfig := &config.TLSConfig{ CertFile: metadata.GetString(md, "certFile"), @@ -452,11 +456,11 @@ func buildNodeConfig(url *url.URL) (*config.NodeConfig, error) { if tlsConfig.ServerName == "" { tlsConfig.ServerName = url.Hostname() } - md.Del("certFile") - md.Del("keyFile") - md.Del("caFile") - md.Del("secure") - md.Del("serverName") + delete(m, "certFile") + delete(m, "keyFile") + delete(m, "caFile") + delete(m, "secure") + delete(m, "serverName") if !tlsConfig.Secure && tlsConfig.CertFile == "" && tlsConfig.CAFile == "" { tlsConfig = nil @@ -465,12 +469,12 @@ func buildNodeConfig(url *url.URL) (*config.NodeConfig, error) { node.Connector = &config.ConnectorConfig{ Type: connector, Auth: auth, - Metadata: md, + Metadata: m, } node.Dialer = &config.DialerConfig{ Type: dialer, TLS: tlsConfig, - Metadata: md, + Metadata: m, } if node.Connector.Type == "sshd" { @@ -523,7 +527,8 @@ func parseAuthFromCmd(sa string) (*config.AuthConfig, error) { }, nil } -func parseSelector(md metadata.MapMetadata) *config.SelectorConfig { +func parseSelector(m map[string]any) *config.SelectorConfig { + md := metadata.NewMetadata(m) strategy := metadata.GetString(md, "strategy") maxFails := metadata.GetInt(md, "maxFails") failTimeout := metadata.GetDuration(md, "failTimeout") @@ -540,9 +545,9 @@ func parseSelector(md metadata.MapMetadata) *config.SelectorConfig { failTimeout = time.Second } - md.Del("strategy") - md.Del("maxFails") - md.Del("failTimeout") + delete(m, "strategy") + delete(m, "maxFails") + delete(m, "failTimeout") return &config.SelectorConfig{ Strategy: strategy, diff --git a/cmd/gost/config.go b/cmd/gost/config.go index e5be84d..e68fadf 100644 --- a/cmd/gost/config.go +++ b/cmd/gost/config.go @@ -6,11 +6,12 @@ import ( "github.com/go-gost/core/logger" metrics "github.com/go-gost/core/metrics/service" - "github.com/go-gost/core/registry" "github.com/go-gost/core/service" "github.com/go-gost/x/api" "github.com/go-gost/x/config" "github.com/go-gost/x/config/parsing" + xlogger "github.com/go-gost/x/logger" + "github.com/go-gost/x/registry" ) func buildService(cfg *config.Config) (services []service.Service) { @@ -94,15 +95,15 @@ func logFromConfig(cfg *config.LogConfig) logger.Logger { if cfg == nil { cfg = &config.LogConfig{} } - opts := []logger.LoggerOption{ - logger.FormatLoggerOption(logger.LogFormat(cfg.Format)), - logger.LevelLoggerOption(logger.LogLevel(cfg.Level)), + opts := []xlogger.LoggerOption{ + xlogger.FormatLoggerOption(logger.LogFormat(cfg.Format)), + xlogger.LevelLoggerOption(logger.LogLevel(cfg.Level)), } var out io.Writer = os.Stderr switch cfg.Output { case "none", "null": - return logger.Nop() + return xlogger.Nop() case "stdout": out = os.Stdout case "stderr", "": @@ -115,9 +116,9 @@ func logFromConfig(cfg *config.LogConfig) logger.Logger { out = f } } - opts = append(opts, logger.OutputLoggerOption(out)) + opts = append(opts, xlogger.OutputLoggerOption(out)) - return logger.NewLogger(opts...) + return xlogger.NewLogger(opts...) } func buildAPIService(cfg *config.APIConfig) (service.Service, error) { diff --git a/cmd/gost/main.go b/cmd/gost/main.go index 6a8b2b3..fbef569 100644 --- a/cmd/gost/main.go +++ b/cmd/gost/main.go @@ -11,10 +11,12 @@ import ( "github.com/go-gost/core/logger" "github.com/go-gost/core/metrics" "github.com/go-gost/x/config" + "github.com/go-gost/x/config/parsing" + xlogger "github.com/go-gost/x/logger" ) var ( - log = logger.Default() + log logger.Logger cfgFile string outputFormat string @@ -43,6 +45,9 @@ func init() { version, runtime.Version(), runtime.GOOS, runtime.GOARCH) os.Exit(0) } + + log = xlogger.NewLogger() + logger.SetDefault(log) } func main() { @@ -127,7 +132,7 @@ func main() { } } - buildDefaultTLSConfig(cfg.TLS) + parsing.BuildDefaultTLSConfig(cfg.TLS) services := buildService(cfg) for _, svc := range services { diff --git a/cmd/gost/register.go b/cmd/gost/register.go index 2cb611a..aef43c7 100644 --- a/cmd/gost/register.go +++ b/cmd/gost/register.go @@ -1,33 +1,14 @@ package main import ( - // core components - _ "github.com/go-gost/core/connector/forward" - _ "github.com/go-gost/core/connector/http" - _ "github.com/go-gost/core/connector/socks/v4" - _ "github.com/go-gost/core/connector/socks/v5" - - _ "github.com/go-gost/core/dialer/tcp" - _ "github.com/go-gost/core/dialer/tls" - _ "github.com/go-gost/core/dialer/udp" - - _ "github.com/go-gost/core/handler/auto" - _ "github.com/go-gost/core/handler/forward/local" - _ "github.com/go-gost/core/handler/forward/remote" - _ "github.com/go-gost/core/handler/http" - _ "github.com/go-gost/core/handler/socks/v4" - _ "github.com/go-gost/core/handler/socks/v5" - - _ "github.com/go-gost/core/listener/rtcp" - _ "github.com/go-gost/core/listener/rudp" - _ "github.com/go-gost/core/listener/tcp" - _ "github.com/go-gost/core/listener/tls" - _ "github.com/go-gost/core/listener/udp" - - // extended components + // Register connectors + _ "github.com/go-gost/x/connector/forward" + _ "github.com/go-gost/x/connector/http" _ "github.com/go-gost/x/connector/http2" _ "github.com/go-gost/x/connector/relay" _ "github.com/go-gost/x/connector/sni" + _ "github.com/go-gost/x/connector/socks/v4" + _ "github.com/go-gost/x/connector/socks/v5" _ "github.com/go-gost/x/connector/ss" _ "github.com/go-gost/x/connector/ss/udp" _ "github.com/go-gost/x/connector/sshd" @@ -48,15 +29,24 @@ import ( _ "github.com/go-gost/x/dialer/quic" _ "github.com/go-gost/x/dialer/ssh" _ "github.com/go-gost/x/dialer/sshd" + _ "github.com/go-gost/x/dialer/tcp" + _ "github.com/go-gost/x/dialer/tls" + _ "github.com/go-gost/x/dialer/udp" _ "github.com/go-gost/x/dialer/ws" // Register handlers + _ "github.com/go-gost/x/handler/auto" _ "github.com/go-gost/x/handler/dns" + _ "github.com/go-gost/x/handler/forward/local" + _ "github.com/go-gost/x/handler/forward/remote" + _ "github.com/go-gost/x/handler/http" _ "github.com/go-gost/x/handler/http2" _ "github.com/go-gost/x/handler/redirect/tcp" _ "github.com/go-gost/x/handler/redirect/udp" _ "github.com/go-gost/x/handler/relay" _ "github.com/go-gost/x/handler/sni" + _ "github.com/go-gost/x/handler/socks/v4" + _ "github.com/go-gost/x/handler/socks/v5" _ "github.com/go-gost/x/handler/ss" _ "github.com/go-gost/x/handler/ss/udp" _ "github.com/go-gost/x/handler/sshd" @@ -80,9 +70,14 @@ import ( _ "github.com/go-gost/x/listener/quic" _ "github.com/go-gost/x/listener/redirect/tcp" _ "github.com/go-gost/x/listener/redirect/udp" + _ "github.com/go-gost/x/listener/rtcp" + _ "github.com/go-gost/x/listener/rudp" _ "github.com/go-gost/x/listener/ssh" _ "github.com/go-gost/x/listener/sshd" _ "github.com/go-gost/x/listener/tap" + _ "github.com/go-gost/x/listener/tcp" + _ "github.com/go-gost/x/listener/tls" _ "github.com/go-gost/x/listener/tun" + _ "github.com/go-gost/x/listener/udp" _ "github.com/go-gost/x/listener/ws" ) diff --git a/cmd/gost/tls.go b/cmd/gost/tls.go deleted file mode 100644 index c82e09b..0000000 --- a/cmd/gost/tls.go +++ /dev/null @@ -1,107 +0,0 @@ -package main - -import ( - "crypto/rand" - "crypto/rsa" - "crypto/tls" - "crypto/x509" - "crypto/x509/pkix" - "encoding/pem" - "math/big" - "time" - - tls_util "github.com/go-gost/core/common/util/tls" - "github.com/go-gost/x/config" -) - -func buildDefaultTLSConfig(cfg *config.TLSConfig) { - if cfg == nil { - cfg = &config.TLSConfig{ - CertFile: "cert.pem", - KeyFile: "key.pem", - } - } - - tlsConfig, err := loadConfig(cfg.CertFile, cfg.KeyFile) - if err != nil { - // generate random self-signed certificate. - cert, err := genCertificate() - if err != nil { - log.Fatal(err) - } - tlsConfig = &tls.Config{ - Certificates: []tls.Certificate{cert}, - } - log.Warn("load TLS certificate files failed, use random generated certificate") - } else { - log.Info("load TLS certificate files OK") - } - tls_util.DefaultConfig = tlsConfig -} - -func loadConfig(certFile, keyFile string) (*tls.Config, error) { - cert, err := tls.LoadX509KeyPair(certFile, keyFile) - if err != nil { - return nil, err - } - - cfg := &tls.Config{ - Certificates: []tls.Certificate{cert}, - } - - return cfg, nil -} - -func genCertificate() (cert tls.Certificate, err error) { - rawCert, rawKey, err := generateKeyPair() - if err != nil { - return - } - return tls.X509KeyPair(rawCert, rawKey) -} - -func generateKeyPair() (rawCert, rawKey []byte, err error) { - // Create private key and self-signed certificate - // Adapted from https://golang.org/src/crypto/tls/generate_cert.go - - priv, err := rsa.GenerateKey(rand.Reader, 2048) - if err != nil { - return - } - validFor := time.Hour * 24 * 365 * 10 // ten years - notBefore := time.Now() - notAfter := notBefore.Add(validFor) - serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) - serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) - if err != nil { - return - } - - template := x509.Certificate{ - SerialNumber: serialNumber, - Subject: pkix.Name{ - Organization: []string{"gost"}, - }, - NotBefore: notBefore, - NotAfter: notAfter, - - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, - BasicConstraintsValid: true, - } - - template.DNSNames = append(template.DNSNames, "gost.run") - derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &priv.PublicKey, priv) - if err != nil { - return - } - - rawCert = pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes}) - privBytes, err := x509.MarshalPKCS8PrivateKey(priv) - if err != nil { - return - } - rawKey = pem.EncodeToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: privBytes}) - - return -} diff --git a/go.mod b/go.mod index 9b2b659..0f92d33 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,8 @@ go 1.18 replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20211111114238-98168dcec14a require ( - github.com/go-gost/core v0.0.0-20220331130633-fc1e6e8ff2a6 - github.com/go-gost/x v0.0.0-20220402133839-eef1b9176f59 + github.com/go-gost/core v0.0.0-20220404042802-3cfb5fe2ca14 + github.com/go-gost/x v0.0.0-20220404044539-6aa1cc740156 ) require ( diff --git a/go.sum b/go.sum index 61d6429..6eb78e8 100644 --- a/go.sum +++ b/go.sum @@ -119,8 +119,8 @@ github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gost/core v0.0.0-20220331130633-fc1e6e8ff2a6 h1:KHk0dL+sRK7NlkdC7nx2vSegMLmHPfqmN1ycc29FTaw= -github.com/go-gost/core v0.0.0-20220331130633-fc1e6e8ff2a6/go.mod h1:oga1T7DJPJM+DpiQaZvTES9P9jvybRSgR/V5j+sEDpg= +github.com/go-gost/core v0.0.0-20220404042802-3cfb5fe2ca14 h1:XxaaYRfY/zXi0xOn6zeBdfKhj8h5Io3jDN4GzFETX8A= +github.com/go-gost/core v0.0.0-20220404042802-3cfb5fe2ca14/go.mod h1:/LzdiQ+0+3FMhyqw0phjFjXFdOa1fcQR5/bL/7ripCs= github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s= github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc= github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09 h1:A95M6UWcfZgOuJkQ7QLfG0Hs5peWIUSysCDNz4pfe04= @@ -129,8 +129,8 @@ github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7 h1:itaaJhQJ19kUXEB github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8= github.com/go-gost/tls-dissector v0.0.2-0.20211125135007-2b5d5bd9c07e h1:73NGqAs22ey3wJkIYVD/ACEoovuIuOlEzQTEoqrO5+U= github.com/go-gost/tls-dissector v0.0.2-0.20211125135007-2b5d5bd9c07e/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= -github.com/go-gost/x v0.0.0-20220402133839-eef1b9176f59 h1:B1d3MHm5jd6+I/T86ilkSg5mEUScBJO5JcnofLmjws0= -github.com/go-gost/x v0.0.0-20220402133839-eef1b9176f59/go.mod h1:leUsfOfh52v8QkEOWRLTAM4tbQaYYWIWfd9UfLB+tkg= +github.com/go-gost/x v0.0.0-20220404044539-6aa1cc740156 h1:Vh48o3X5zZRT5e50wgLGr1GNnHqHV/GRVUnpMc4hrwU= +github.com/go-gost/x v0.0.0-20220404044539-6aa1cc740156/go.mod h1:ZcHIO92IOsnu7K723MCN+aNVgwuRTgYN5pBvQku4o8s= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=