Codebase list golang-github-gliderlabs-ssh / bb0e5c0
Simplify handlers to remove additional types Kaleb Elwert 4 years ago
3 changed file(s) with 16 addition(s) and 32 deletion(s). Raw diff Collapse all Expand all
1313 // ErrServerClosed is returned by the Server's Serve, ListenAndServe,
1414 // and ListenAndServeTLS methods after a call to Shutdown or Close.
1515 var ErrServerClosed = errors.New("ssh: Server closed")
16
17 type RequestHandler func(ctx Context, srv *Server, req *gossh.Request) (ok bool, payload []byte)
18
19 var DefaultRequestHandlers = map[string]RequestHandler{}
20
21 type ChannelHandler func(srv *Server, conn *gossh.ServerConn, newChan gossh.NewChannel, ctx Context)
22
23 var DefaultChannelHandlers = map[string]ChannelHandler{
24 "session": DefaultSessionHandler,
25 }
1626
1727 // Server defines parameters for running an SSH server. The zero value for
1828 // Server is a valid configuration. When both PasswordHandler and
5262 conns map[*gossh.ServerConn]struct{}
5363 connWg sync.WaitGroup
5464 doneChan chan struct{}
55 }
56
57 type RequestHandler interface {
58 HandleSSHRequest(ctx Context, srv *Server, req *gossh.Request) (ok bool, payload []byte)
59 }
60
61 type RequestHandlerFunc func(ctx Context, srv *Server, req *gossh.Request) (ok bool, payload []byte)
62
63 func (f RequestHandlerFunc) HandleSSHRequest(ctx Context, srv *Server, req *gossh.Request) (ok bool, payload []byte) {
64 return f(ctx, srv, req)
65 }
66
67 var DefaultRequestHandlers = map[string]RequestHandler{}
68
69 type ChannelHandler interface {
70 HandleSSHChannel(srv *Server, conn *gossh.ServerConn, newChan gossh.NewChannel, ctx Context)
71 }
72
73 type ChannelHandlerFunc func(srv *Server, conn *gossh.ServerConn, newChan gossh.NewChannel, ctx Context)
74
75 func (f ChannelHandlerFunc) HandleSSHChannel(srv *Server, conn *gossh.ServerConn, newChan gossh.NewChannel, ctx Context) {
76 f(srv, conn, newChan, ctx)
77 }
78
79 var DefaultChannelHandlers = map[string]ChannelHandler{
80 "session": ChannelHandlerFunc(DefaultSessionHandler),
8165 }
8266
8367 func (srv *Server) ensureHostSigner() error {
287271 ch.Reject(gossh.UnknownChannelType, "unsupported channel type")
288272 continue
289273 }
290 go handler.HandleSSHChannel(srv, sshConn, ch, ctx)
274 go handler(srv, sshConn, ch, ctx)
291275 }
292276 }
293277
303287 }
304288 /*reqCtx, cancel := context.WithCancel(ctx)
305289 defer cancel() */
306 ret, payload := handler.HandleSSHRequest(ctx, srv, req)
290 ret, payload := handler(ctx, srv, req)
307291 req.Reply(ret, payload)
308292 }
309293 }
1919 return e
2020 }
2121 srv.ChannelHandlers = map[string]ChannelHandler{
22 "session": ChannelHandlerFunc(DefaultSessionHandler),
23 "direct-tcpip": ChannelHandlerFunc(DirectTCPIPHandler),
22 "session": DefaultSessionHandler,
23 "direct-tcpip": DirectTCPIPHandler,
2424 }
2525 srv.handleConn(conn)
2626 return nil
8686 }
8787
8888 // ForwardedTCPHandler can be enabled by creating a ForwardedTCPHandler and
89 // adding it to the server's RequestHandlers under tcpip-forward and
90 // cancel-tcpip-forward.
89 // adding the HandleSSHRequest callback to the server's RequestHandlers under
90 // tcpip-forward and cancel-tcpip-forward.
9191 type ForwardedTCPHandler struct {
9292 forwards map[string]net.Listener
9393 sync.Mutex