add metadata

This commit is contained in:
ginuerzh
2021-10-29 23:49:57 +08:00
parent 4969bc1067
commit 57a4d116d4
46 changed files with 466 additions and 381 deletions

View File

@ -3,9 +3,11 @@ package handler
import (
"context"
"net"
"github.com/go-gost/gost/pkg/components/metadata"
)
type Handler interface {
Init(Metadata) error
Init(metadata.Metadata) error
Handle(context.Context, net.Conn)
}

View File

@ -5,9 +5,13 @@ import (
"context"
"net"
"net/http"
"net/http/httputil"
"strings"
"github.com/go-gost/gost/pkg/auth"
"github.com/go-gost/gost/pkg/chain"
"github.com/go-gost/gost/pkg/components/handler"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
)
@ -34,19 +38,41 @@ func NewHandler(opts ...handler.Option) handler.Handler {
}
}
func (h *Handler) Init(md handler.Metadata) error {
func (h *Handler) Init(md md.Metadata) error {
return h.parseMetadata(md)
}
func (h *Handler) parseMetadata(md md.Metadata) error {
h.md.proxyAgent = md.GetString(proxyAgent)
if v, _ := md.Get(auths).([]interface{}); len(v) > 0 {
authenticator := auth.NewLocalAuthenticator(nil)
for _, auth := range v {
if s, _ := auth.(string); s != "" {
ss := strings.SplitN(s, ":", 2)
if len(ss) == 1 {
authenticator.Add(ss[0], "")
} else {
authenticator.Add(ss[0], ss[1])
}
}
}
h.md.authenticator = authenticator
}
return nil
}
func (h *Handler) Handle(ctx context.Context, conn net.Conn) {
defer conn.Close()
h.logger = h.logger.WithFields(map[string]interface{}{
"src": conn.RemoteAddr(),
"local": conn.LocalAddr(),
})
req, err := http.ReadRequest(bufio.NewReader(conn))
if err != nil {
h.logger.WithFields(map[string]interface{}{
"src": conn.RemoteAddr(),
"local": conn.LocalAddr(),
}).Error(err)
h.logger.Error(err)
return
}
defer req.Body.Close()
@ -73,6 +99,14 @@ func (h *Handler) handleRequest(ctx context.Context, conn net.Conn, req *http.Re
host = net.JoinHostPort(host, "80")
}
h.logger = h.logger.WithFields(map[string]interface{}{
"dst": host,
})
if h.logger.IsLevelEnabled(logger.DebugLevel) {
dump, _ := httputil.DumpRequest(req, false)
h.logger.Debug(string(dump))
}
/*
u, _, _ := basicProxyAuth(req.Header.Get("Proxy-Authorization"))
if u != "" {

View File

@ -1,7 +1,16 @@
package http
import "github.com/go-gost/gost/pkg/auth"
const (
addr = "addr"
proxyAgent = "proxyAgent"
auths = "auths"
)
type metadata struct {
addr string
proxyAgent string
retryCount int
addr string
authenticator auth.Authenticator
proxyAgent string
retryCount int
}

View File

@ -1,3 +0,0 @@
package handler
type Metadata map[string]string

View File

@ -8,6 +8,7 @@ import (
"github.com/go-gost/gosocks5"
"github.com/go-gost/gost/pkg/components/handler"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"github.com/shadowsocks/go-shadowsocks2/core"
@ -34,12 +35,8 @@ func NewHandler(opts ...handler.Option) handler.Handler {
}
}
func (h *Handler) Init(md handler.Metadata) (err error) {
h.md, err = h.parseMetadata(md)
if err != nil {
return
}
return nil
func (h *Handler) Init(md md.Metadata) (err error) {
return h.parseMetadata(md)
}
func (h *Handler) Handle(ctx context.Context, conn net.Conn) {
@ -74,14 +71,17 @@ func (h *Handler) Handle(ctx context.Context, conn net.Conn) {
handler.Transport(conn, cc)
}
func (h *Handler) parseMetadata(md handler.Metadata) (m metadata, err error) {
m.cipher, err = h.initCipher(md[method], md[password], md[key])
func (h *Handler) parseMetadata(md md.Metadata) (err error) {
h.md.cipher, err = h.initCipher(
md.GetString(method),
md.GetString(password),
md.GetString(key),
)
if err != nil {
return
}
if v, ok := md[readTimeout]; ok {
m.readTimeout, _ = time.ParseDuration(v)
}
h.md.readTimeout = md.GetDuration(readTimeout)
return
}

View File

@ -3,9 +3,9 @@ package ss
import (
"context"
"net"
"time"
"github.com/go-gost/gost/pkg/components/handler"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
"github.com/shadowsocks/go-shadowsocks2/core"
@ -32,26 +32,26 @@ func NewHandler(opts ...handler.Option) handler.Handler {
}
}
func (h *Handler) Init(md handler.Metadata) (err error) {
h.md, err = h.parseMetadata(md)
if err != nil {
return
}
return nil
func (h *Handler) Init(md md.Metadata) (err error) {
return h.parseMetadata(md)
}
func (h *Handler) Handle(ctx context.Context, conn net.Conn) {
defer conn.Close()
}
func (h *Handler) parseMetadata(md handler.Metadata) (m metadata, err error) {
m.cipher, err = h.initCipher(md[method], md[password], md[key])
func (h *Handler) parseMetadata(md md.Metadata) (err error) {
h.md.cipher, err = h.initCipher(
md.GetString(method),
md.GetString(password),
md.GetString(key),
)
if err != nil {
return
}
if v, ok := md[readTimeout]; ok {
m.readTimeout, _ = time.ParseDuration(v)
}
h.md.readTimeout = md.GetDuration(readTimeout)
return
}