prime8dev

prime8dev
git clone https://git.prime8.dev/prime8dev.git
Log | Files | Refs | README | LICENSE

route.go (861B)


      1 package ssh
      2 
      3 import (
      4 	"io"
      5 	"log/slog"
      6 
      7 	charmssh "github.com/charmbracelet/ssh"
      8 	"github.com/charmbracelet/wish"
      9 )
     10 
     11 func routeMiddleware(logger *slog.Logger) wish.Middleware {
     12 	return func(next charmssh.Handler) charmssh.Handler {
     13 		return func(sess charmssh.Session) {
     14 			ip := remoteIP(sess.RemoteAddr())
     15 			user := sess.User()
     16 
     17 			if len(sess.Command()) > 0 {
     18 				_, _ = io.WriteString(sess.Stderr(), "remote command execution is disabled on the public interface\n")
     19 				logger.Info("route decision",
     20 					"user", user,
     21 					"ip", ip,
     22 					"result", "rejected",
     23 					"command", sess.RawCommand(),
     24 				)
     25 				_ = sess.Exit(126)
     26 				return
     27 			}
     28 
     29 			logger.Info("route decision",
     30 				"user", user,
     31 				"ip", ip,
     32 				"result", "accepted",
     33 			)
     34 			next(sess)
     35 			logger.Info("route decision",
     36 				"user", user,
     37 				"ip", ip,
     38 				"result", "exited",
     39 			)
     40 		}
     41 	}
     42 }