package ssh import ( "context" "errors" "net" "git.maze.io/maze/conduit/logger" "golang.org/x/crypto/ssh" ) type Dialer interface { DialContext(ctx context.Context, network, address string) (net.Conn, error) } func ForwardTunnel(dialer Dialer) ChannelHandler { if dialer == nil { dialer = new(net.Dialer) } return ChannelHandlerFunc(func(ctx Context, channel ssh.Channel, requests <-chan *ssh.Request, _ []byte) error { return errors.New("byez!") }) } type PortForwardRequestHandler interface { HandlePortForwardRequest(ctx Context, raddr, laddr net.Addr) (net.Conn, error) } type PortForwardRequestHandlerFunc func(Context, net.Addr, net.Addr) (net.Conn, error) func (f PortForwardRequestHandlerFunc) HandlePortForwardRequest(ctx Context, raddr, laddr net.Addr) (net.Conn, error) { return f(ctx, raddr, laddr) } func PortForwardDialer(dialer Dialer) PortForwardRequestHandler { if dialer == nil { dialer = new(net.Dialer) } return PortForwardRequestHandlerFunc(func(ctx Context, raddr, laddr net.Addr) (net.Conn, error) { log := ctx.(*sshContext).log.Values(logger.Values{ "laddr": laddr.String(), "raddr": raddr.String(), }) log.Debug("Dialing port forwarding request") return dialer.DialContext(context.Background(), raddr.Network(), raddr.String()) }) }