diff --git a/session/handler.go b/session/handler.go index c861c30..bef1142 100644 --- a/session/handler.go +++ b/session/handler.go @@ -56,6 +56,7 @@ func (s *Session) handleGlobalRequest() { break } Clients[slug] = s + s.Slug = slug buf := new(bytes.Buffer) binary.Write(buf, binary.BigEndian, uint32(portToBind)) log.Printf("Forwarding approved on port: %d", portToBind) diff --git a/session/session.go b/session/session.go index 3aa41ee..f32c596 100644 --- a/session/session.go +++ b/session/session.go @@ -2,11 +2,14 @@ package session import ( "fmt" + "github.com/google/uuid" "golang.org/x/crypto/ssh" "net" ) type Session struct { + ID uuid.UUID + Slug string ConnChannels []ssh.Channel Connection *ssh.ServerConn GlobalRequest <-chan *ssh.Request @@ -33,6 +36,8 @@ func init() { func New(conn *ssh.ServerConn, sshChannel <-chan ssh.NewChannel, req <-chan *ssh.Request) *Session { session := &Session{ + ID: uuid.New(), + Slug: "", ConnChannels: []ssh.Channel{}, Connection: conn, GlobalRequest: req, @@ -53,6 +58,8 @@ func (session *Session) Close() { session.Done <- true if session.TunnelType != HTTP { session.Listener.Close() + } else { + delete(Clients, session.Slug) } for _, ch := range session.ConnChannels {