summaryrefslogtreecommitdiff
path: root/pkg/server/hook
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/hook')
-rw-r--r--pkg/server/hook/aes.go2
-rw-r--r--pkg/server/hook/auth.go2
-rw-r--r--pkg/server/hook/b64.go2
-rw-r--r--pkg/server/hook/b85.go2
-rw-r--r--pkg/server/hook/hex.go2
-rw-r--r--pkg/server/hook/hook.go13
-rw-r--r--pkg/server/hook/info-http.go2
-rw-r--r--pkg/server/hook/proxy.go27
-rw-r--r--pkg/server/hook/split.go2
-rw-r--r--pkg/server/hook/tee.go2
-rw-r--r--pkg/server/hook/zip.go2
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
}