update imports

This commit is contained in:
ginuerzh
2022-04-04 12:47:07 +08:00
parent 810f9f4d8f
commit 1b31c80d2c
7 changed files with 85 additions and 186 deletions

View File

@ -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,

View File

@ -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) {

View File

@ -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 {

View File

@ -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"
)

View File

@ -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
}

4
go.mod
View File

@ -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 (

8
go.sum
View File

@ -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=