diff options
Diffstat (limited to 'pkg/server/hook')
| -rw-r--r-- | pkg/server/hook/aes.go | 2 | ||||
| -rw-r--r-- | pkg/server/hook/auth.go | 2 | ||||
| -rw-r--r-- | pkg/server/hook/b64.go | 2 | ||||
| -rw-r--r-- | pkg/server/hook/b85.go | 2 | ||||
| -rw-r--r-- | pkg/server/hook/hex.go | 2 | ||||
| -rw-r--r-- | pkg/server/hook/hook.go | 13 | ||||
| -rw-r--r-- | pkg/server/hook/info-http.go | 2 | ||||
| -rw-r--r-- | pkg/server/hook/proxy.go | 27 | ||||
| -rw-r--r-- | pkg/server/hook/split.go | 2 | ||||
| -rw-r--r-- | pkg/server/hook/tee.go | 2 | ||||
| -rw-r--r-- | pkg/server/hook/zip.go | 2 |
11 files changed, 31 insertions, 27 deletions
diff --git a/pkg/server/hook/aes.go b/pkg/server/hook/aes.go index 8ae47a3..ef0ef1a 100644 --- a/pkg/server/hook/aes.go +++ b/pkg/server/hook/aes.go @@ -78,7 +78,7 @@ func (aesHook) Open(env env.Env) (interface{}, error) { return newAes(env), nil } -func newAesHook(opts.Opts, env.Env) (hook, error) { +func newAesHook(opts.Opts) (hook, error) { return aesHook{}, nil } diff --git a/pkg/server/hook/auth.go b/pkg/server/hook/auth.go index 14ad114..86acd91 100644 --- a/pkg/server/hook/auth.go +++ b/pkg/server/hook/auth.go @@ -161,7 +161,7 @@ func (h *authHook) Open(env env.Env) (interface{}, error) { return a, nil } -func newAuthHook(opts.Opts, env.Env) (hook, error) { +func newAuthHook(opts.Opts) (hook, error) { return &authHook{}, nil } diff --git a/pkg/server/hook/b64.go b/pkg/server/hook/b64.go index 3c21474..fce42a0 100644 --- a/pkg/server/hook/b64.go +++ b/pkg/server/hook/b64.go @@ -43,7 +43,7 @@ func (h b64Hook) Open(env.Env) (interface{}, error) { return h, nil } -func newB64Hook(opts.Opts, env.Env) (hook, error) { +func newB64Hook(opts.Opts) (hook, error) { return b64Hook{}, nil } diff --git a/pkg/server/hook/b85.go b/pkg/server/hook/b85.go index 9851ffc..bf36b56 100644 --- a/pkg/server/hook/b85.go +++ b/pkg/server/hook/b85.go @@ -48,7 +48,7 @@ func (h b85Hook) Open(env.Env) (interface{}, error) { return h, nil } -func newB85Hook(opts.Opts, env.Env) (hook, error) { +func newB85Hook(opts.Opts) (hook, error) { return b85Hook{}, nil } diff --git a/pkg/server/hook/hex.go b/pkg/server/hook/hex.go index e37bc6e..bc71bf2 100644 --- a/pkg/server/hook/hex.go +++ b/pkg/server/hook/hex.go @@ -28,7 +28,7 @@ func (h hexHook) Open(env.Env) (interface{}, error) { return h, nil } -func newHexHook(opts.Opts, env.Env) (hook, error) { +func newHexHook(opts.Opts) (hook, error) { return hexHook{}, nil } diff --git a/pkg/server/hook/hook.go b/pkg/server/hook/hook.go index 6ac51a1..3065cbe 100644 --- a/pkg/server/hook/hook.go +++ b/pkg/server/hook/hook.go @@ -10,12 +10,13 @@ import ( "tunnel/pkg/server/queue" ) -type hookInitFunc func(opts.Opts, env.Env) (hook, error) +type hookInitFunc func(opts.Opts) (hook, error) var hooks = map[string]hookInitFunc{} type Pipe struct { priv interface{} + Hook H Send Func Recv Func } @@ -67,7 +68,7 @@ func (w *wrapper) Open(env env.Env) (*Pipe, error) { return nil, err } - pipe := &Pipe{priv: it} + pipe := &Pipe{priv: it, Hook: w} if s, ok := it.(Sender); ok { pipe.Send = s.Send @@ -90,7 +91,7 @@ func (p *Pipe) Close() { } } -func New(desc string, env env.Env) (H, error) { +func New(desc string) (H, error) { name, opts := opts.Parse(desc) reverse := false @@ -101,8 +102,8 @@ func New(desc string, env env.Env) (H, error) { if f, ok := hooks[name]; !ok { return nil, fmt.Errorf("unknown hook '%s'", name) - } else if h, err := f(opts, env); err != nil { - return nil, err + } else if h, err := f(opts); err != nil { + return nil, fmt.Errorf("%s: %w", name, err) } else { w := &wrapper{ hook: h, @@ -122,7 +123,7 @@ func register(name string, f hookInitFunc) { } func registerFunc(name string, p Func) { - register(name, func(opts.Opts, env.Env) (hook, error) { + register(name, func(opts.Opts) (hook, error) { return p, nil }) } diff --git a/pkg/server/hook/info-http.go b/pkg/server/hook/info-http.go index 7941072..73480ff 100644 --- a/pkg/server/hook/info-http.go +++ b/pkg/server/hook/info-http.go @@ -46,7 +46,7 @@ func (infoHttpHook) Open(env env.Env) (interface{}, error) { return &infoHttp{env: env}, nil } -func newInfoHttpHook(opts opts.Opts, env env.Env) (hook, error) { +func newInfoHttpHook(opts.Opts) (hook, error) { return infoHttpHook{}, nil } diff --git a/pkg/server/hook/proxy.go b/pkg/server/hook/proxy.go index 26be2d0..172b01a 100644 --- a/pkg/server/hook/proxy.go +++ b/pkg/server/hook/proxy.go @@ -11,7 +11,8 @@ import ( "tunnel/pkg/server/queue" ) -var addrRe = regexp.MustCompile("^[0-9a-zA-Z-.]+:[0-9]+$") +var addrPattern = "^([0-9a-zA-Z-.]+|\\[[0-9a-fA-F:]*\\]):[0-9]+$" +var isGoodAddr = regexp.MustCompile(addrPattern).MatchString type proxyHook struct { addr string @@ -61,8 +62,13 @@ func (p *proxy) Recv(rq, wq queue.Q) error { } func (h *proxyHook) Open(env env.Env) (interface{}, error) { + addr := env.Eval(h.addr) + if !isGoodAddr(addr) { + return nil, fmt.Errorf("invalid addr '%s'", addr) + } + p := &proxy{ - addr: h.addr, + addr: addr, auth: h.auth, c: make(chan bool), } @@ -74,18 +80,15 @@ func (h *proxyHook) Open(env env.Env) (interface{}, error) { return p, nil } -func newProxyHook(opts opts.Opts, env env.Env) (hook, error) { - h := &proxyHook{} - - if addr, ok := opts["addr"]; !ok { - return nil, errors.New("proxy: missing addr") - } else if !addrRe.MatchString(addr) { - return nil, errors.New("proxy: invalid addr") - } else { - h.addr = addr +func newProxyHook(opts opts.Opts) (hook, error) { + h := &proxyHook{ + addr: opts["addr"], + auth: opts["auth"], } - h.auth = opts["auth"] + if h.addr == "" { + return nil, errors.New("expected addr") + } return h, nil } diff --git a/pkg/server/hook/split.go b/pkg/server/hook/split.go index 75faf48..6a2c4ca 100644 --- a/pkg/server/hook/split.go +++ b/pkg/server/hook/split.go @@ -38,7 +38,7 @@ func (h *splitHook) Open(env.Env) (interface{}, error) { return h, nil } -func newSplitHook(opts opts.Opts, env env.Env) (hook, error) { +func newSplitHook(opts opts.Opts) (hook, error) { size := splitDefaultSize if s, ok := opts["size"]; ok { diff --git a/pkg/server/hook/tee.go b/pkg/server/hook/tee.go index 2d13fcb..3f61b50 100644 --- a/pkg/server/hook/tee.go +++ b/pkg/server/hook/tee.go @@ -93,7 +93,7 @@ func (h *teeHook) Open(env env.Env) (interface{}, error) { return &t, nil } -func newTeeHook(opts opts.Opts, env env.Env) (hook, error) { +func newTeeHook(opts opts.Opts) (hook, error) { h := &teeHook{} if file, ok := opts["file"]; ok { h.file = file diff --git a/pkg/server/hook/zip.go b/pkg/server/hook/zip.go index 94160fe..bde4957 100644 --- a/pkg/server/hook/zip.go +++ b/pkg/server/hook/zip.go @@ -46,7 +46,7 @@ func (h zipHook) Open(env.Env) (interface{}, error) { return h, nil } -func newZipHook(opts.Opts, env.Env) (hook, error) { +func newZipHook(opts.Opts) (hook, error) { return zipHook{}, nil } |
