feat: add ascii diagram to tunnel creation message
This commit is contained in:
parent
1bdad36787
commit
56d7174b96
|
@ -0,0 +1,7 @@
|
||||||
|
NAT NAT
|
||||||
|
My machine | {{ .Hostname }} | Remote Machine
|
||||||
|
+----------+ | +----------+ | +----------+
|
||||||
|
| |<local_service_port> | {{.Pp}}| |{{.Pp}} | {{.Rp}}| |
|
||||||
|
| +<-----------------------+----------->+ +<-------------+------->+ |
|
||||||
|
+----------+ | +----------+ | +----------+
|
||||||
|
| |
|
|
@ -1,4 +1,6 @@
|
||||||
**/*.go
|
**/*.go
|
||||||
|
diagram.txt
|
||||||
|
.env
|
||||||
Makefile {
|
Makefile {
|
||||||
prep: make build
|
prep: make build
|
||||||
daemon: make run
|
daemon: make run
|
||||||
|
|
|
@ -1,13 +1,23 @@
|
||||||
package rebound
|
package rebound
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
|
"strings"
|
||||||
|
"text/template"
|
||||||
|
|
||||||
|
_ "embed"
|
||||||
|
|
||||||
"github.com/gliderlabs/ssh"
|
"github.com/gliderlabs/ssh"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed diagram.txt
|
||||||
|
var asciiDiagram string
|
||||||
|
var asciiDiagramTmpl = template.Must(template.New("").Parse(asciiDiagram))
|
||||||
|
|
||||||
func (s *Server) handleSession(sess ssh.Session) {
|
func (s *Server) handleSession(sess ssh.Session) {
|
||||||
ctx := sess.Context()
|
ctx := sess.Context()
|
||||||
sessionID := SessionID(ctx.SessionID())
|
sessionID := SessionID(ctx.SessionID())
|
||||||
|
@ -15,9 +25,7 @@ func (s *Server) handleSession(sess ssh.Session) {
|
||||||
s.log("(%s): session opened", sessionID)
|
s.log("(%s): session opened", sessionID)
|
||||||
|
|
||||||
message := `
|
message := `
|
||||||
Welcome on Rebound !
|
Welcome on Rebound !
|
||||||
|
|
||||||
Type Ctrl+C or Ctrl+D to exit.
|
|
||||||
`
|
`
|
||||||
|
|
||||||
if _, err := sess.Write([]byte(message)); err != nil {
|
if _, err := sess.Write([]byte(message)); err != nil {
|
||||||
|
@ -71,7 +79,9 @@ func (s *Server) handleSessionData(sess ssh.Session, data SessionData) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) writeConsumerMessage(sess ssh.Session, data SessionData) error {
|
func (s *Server) writeConsumerMessage(sess ssh.Session, data SessionData) error {
|
||||||
message := ``
|
message := `
|
||||||
|
Type Ctrl+C or Ctrl+D to exit.
|
||||||
|
`
|
||||||
|
|
||||||
if _, err := sess.Write([]byte(message)); err != nil {
|
if _, err := sess.Write([]byte(message)); err != nil {
|
||||||
return errors.WithStack(err)
|
return errors.WithStack(err)
|
||||||
|
@ -81,12 +91,46 @@ func (s *Server) writeConsumerMessage(sess ssh.Session, data SessionData) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) writeProviderMessage(sess ssh.Session, data SessionData) error {
|
func (s *Server) writeProviderMessage(sess ssh.Session, data SessionData) error {
|
||||||
|
var diagramBuff bytes.Buffer
|
||||||
|
|
||||||
|
hostname := s.opts.PublicHost
|
||||||
|
if len(hostname) < 24 {
|
||||||
|
halfPadding := (24 - len(hostname)) / 2
|
||||||
|
leftPadding := strings.Repeat(" ", halfPadding)
|
||||||
|
rightPadding := strings.Repeat(" ", halfPadding)
|
||||||
|
hostname = fmt.Sprintf("%s%s%s", leftPadding, hostname, rightPadding)
|
||||||
|
if len(hostname) > 24 {
|
||||||
|
hostname = hostname[0:23]
|
||||||
|
}
|
||||||
|
} else if len(hostname) >= 24 {
|
||||||
|
hostname = hostname[0:20] + "..."
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("'%s'", hostname)
|
||||||
|
|
||||||
|
tmplData := struct {
|
||||||
|
Pp string
|
||||||
|
Rp string
|
||||||
|
Hostname string
|
||||||
|
}{
|
||||||
|
Pp: fmt.Sprintf("%04d", s.opts.PublicPort),
|
||||||
|
Rp: "<port>",
|
||||||
|
Hostname: hostname,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := asciiDiagramTmpl.Execute(&diagramBuff, tmplData); err != nil {
|
||||||
|
return errors.WithStack(err)
|
||||||
|
}
|
||||||
|
|
||||||
message := fmt.Sprintf(`
|
message := fmt.Sprintf(`
|
||||||
You can connect to your tunnel by running in an other terminal:
|
You can connect to your tunnel by running in an other terminal:
|
||||||
|
|
||||||
ssh -L <local-port>:0.0.0.0:1 %s@%s -p %d
|
ssh -L <port>:127.0.0.1:1 %s@%s -p %d
|
||||||
|
|
||||||
`, data.Token, s.opts.PublicHost, s.opts.PublicPort)
|
%s
|
||||||
|
|
||||||
|
Type Ctrl+C or Ctrl+D to exit.
|
||||||
|
`, data.Token, s.opts.PublicHost, s.opts.PublicPort, diagramBuff.String())
|
||||||
|
|
||||||
if _, err := sess.Write([]byte(message)); err != nil {
|
if _, err := sess.Write([]byte(message)); err != nil {
|
||||||
return errors.WithStack(err)
|
return errors.WithStack(err)
|
||||||
|
|
Loading…
Reference in New Issue