diff --git a/server/server.go b/server/server.go index b6a66c1..0538d69 100644 --- a/server/server.go +++ b/server/server.go @@ -99,7 +99,16 @@ func (s *server) handleConnection(conn net.Conn) { cancel() } log.Println("SSH connection established:", sshConn.User()) - sshSession := session.New(s.randomizer, s.config, sshConn, forwardingReqs, chans, s.sessionRegistry, s.portRegistry, user) + sshSession := session.New(&session.Config{ + Randomizer: s.randomizer, + Config: s.config, + Conn: sshConn, + InitialReq: forwardingReqs, + SshChan: chans, + SessionRegistry: s.sessionRegistry, + PortRegistry: s.portRegistry, + User: user, + }) err = sshSession.Start() if err != nil { log.Printf("SSH session ended with error: %s", err.Error()) diff --git a/session/session.go b/session/session.go index c88f615..2e052d9 100644 --- a/session/session.go +++ b/session/session.go @@ -48,24 +48,35 @@ type session struct { registry registry.Registry } +type Config struct { + Randomizer random.Random + Config config.Config + Conn *ssh.ServerConn + InitialReq <-chan *ssh.Request + SshChan <-chan ssh.NewChannel + SessionRegistry registry.Registry + PortRegistry portUtil.Port + User string +} + var blockedReservedPorts = []uint16{1080, 1433, 1521, 1900, 2049, 3306, 3389, 5432, 5900, 6379, 8080, 8443, 9000, 9200, 27017} -func New(randomizer random.Random, config config.Config, conn *ssh.ServerConn, initialReq <-chan *ssh.Request, sshChan <-chan ssh.NewChannel, sessionRegistry registry.Registry, portRegistry portUtil.Port, user string) Session { +func New(conf *Config) Session { slugManager := slug.New() - forwarderManager := forwarder.New(config, slugManager, conn) - lifecycleManager := lifecycle.New(conn, forwarderManager, slugManager, portRegistry, sessionRegistry, user) - interactionManager := interaction.New(randomizer, config, slugManager, forwarderManager, sessionRegistry, user, lifecycleManager.Close) + forwarderManager := forwarder.New(conf.Config, slugManager, conf.Conn) + lifecycleManager := lifecycle.New(conf.Conn, forwarderManager, slugManager, conf.PortRegistry, conf.SessionRegistry, conf.User) + interactionManager := interaction.New(conf.Randomizer, conf.Config, slugManager, forwarderManager, conf.SessionRegistry, conf.User, lifecycleManager.Close) return &session{ - randomizer: randomizer, - config: config, - initialReq: initialReq, - sshChan: sshChan, + randomizer: conf.Randomizer, + config: conf.Config, + initialReq: conf.InitialReq, + sshChan: conf.SshChan, lifecycle: lifecycleManager, interaction: interactionManager, forwarder: forwarderManager, slug: slugManager, - registry: sessionRegistry, + registry: conf.SessionRegistry, } }