repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

commit
f22cdb1
parent
561ede5
author
Eric Bower
date
2025-01-18 09:04:47 -0500 EST
chore(prose): rm cli mdw
2 files changed,  +3, -164
D prose/cli.go
+0, -154
  1@@ -1,154 +0,0 @@
  2-package prose
  3-
  4-import (
  5-	"fmt"
  6-	"log/slog"
  7-	"strings"
  8-
  9-	"github.com/charmbracelet/ssh"
 10-	"github.com/charmbracelet/wish"
 11-	bm "github.com/charmbracelet/wish/bubbletea"
 12-	"github.com/muesli/termenv"
 13-	"github.com/picosh/pico/db"
 14-	"github.com/picosh/pico/tui/common"
 15-	"github.com/picosh/utils"
 16-)
 17-
 18-func getUser(s ssh.Session, dbpool db.DB) (*db.User, error) {
 19-	if s.PublicKey() == nil {
 20-		return nil, fmt.Errorf("key not found")
 21-	}
 22-
 23-	key := utils.KeyForKeyText(s.PublicKey())
 24-
 25-	user, err := dbpool.FindUserForKey(s.User(), key)
 26-	if err != nil {
 27-		return nil, err
 28-	}
 29-
 30-	if user.Name == "" {
 31-		return nil, fmt.Errorf("must have username set")
 32-	}
 33-
 34-	return user, nil
 35-}
 36-
 37-type Cmd struct {
 38-	User    *db.User
 39-	Session utils.CmdSession
 40-	Log     *slog.Logger
 41-	Dbpool  db.DB
 42-	Styles  common.Styles
 43-	Width   int
 44-	Height  int
 45-}
 46-
 47-func (c *Cmd) output(out string) {
 48-	_, _ = c.Session.Write([]byte(out + "\r\n"))
 49-}
 50-
 51-func (c *Cmd) help() {
 52-	helpStr := "Commands: [help, stats]\n"
 53-	c.output(helpStr)
 54-}
 55-
 56-func (c *Cmd) statsByPost(_ string) error {
 57-	msg := fmt.Sprintf(
 58-		"%s\n\nRun %s to access pico's analytics TUI",
 59-		c.Styles.Logo.Render("DEPRECATED"),
 60-		c.Styles.Code.Render("ssh pico.sh"),
 61-	)
 62-	c.output(c.Styles.RoundedBorder.Render(msg))
 63-	return nil
 64-}
 65-
 66-func (c *Cmd) stats() error {
 67-	return c.statsByPost("")
 68-}
 69-
 70-type CliHandler struct {
 71-	DBPool db.DB
 72-	Logger *slog.Logger
 73-}
 74-
 75-func WishMiddleware(handler *CliHandler) wish.Middleware {
 76-	dbpool := handler.DBPool
 77-	log := handler.Logger
 78-
 79-	return func(next ssh.Handler) ssh.Handler {
 80-		return func(sesh ssh.Session) {
 81-			args := sesh.Command()
 82-			if len(args) == 0 {
 83-				next(sesh)
 84-				return
 85-			}
 86-
 87-			// default width and height when no pty
 88-			width := 80
 89-			height := 24
 90-			pty, _, ok := sesh.Pty()
 91-			if ok {
 92-				width = pty.Window.Width
 93-				height = pty.Window.Height
 94-			}
 95-
 96-			user, err := getUser(sesh, dbpool)
 97-			if err != nil {
 98-				wish.Errorln(sesh, err)
 99-				return
100-			}
101-
102-			renderer := bm.MakeRenderer(sesh)
103-			renderer.SetColorProfile(termenv.TrueColor)
104-			styles := common.DefaultStyles(renderer)
105-
106-			opts := Cmd{
107-				Session: sesh,
108-				User:    user,
109-				Log:     log,
110-				Dbpool:  dbpool,
111-				Styles:  styles,
112-				Width:   width,
113-				Height:  height,
114-			}
115-
116-			cmd := strings.TrimSpace(args[0])
117-			if len(args) == 1 {
118-				if cmd == "help" {
119-					opts.help()
120-					return
121-				} else if cmd == "stats" {
122-					err := opts.stats()
123-					if err != nil {
124-						wish.Fatalln(sesh, err)
125-					}
126-					return
127-				} else {
128-					next(sesh)
129-					return
130-				}
131-			}
132-
133-			postSlug := strings.TrimSpace(args[1])
134-			cmdArgs := args[2:]
135-			log.Info(
136-				"pgs middleware detected command",
137-				"args", args,
138-				"cmd", cmd,
139-				"post", postSlug,
140-				"cmdArgs", cmdArgs,
141-			)
142-
143-			if cmd == "stats" {
144-				err := opts.statsByPost(postSlug)
145-				if err != nil {
146-					wish.Fatalln(sesh, err)
147-				}
148-				return
149-			} else {
150-				next(sesh)
151-				return
152-			}
153-		}
154-	}
155-}
M prose/ssh.go
+3, -10
 1@@ -27,7 +27,7 @@ import (
 2 	"github.com/picosh/utils"
 3 )
 4 
 5-func createRouter(handler *filehandlers.FileHandlerRouter, cliHandler *CliHandler) proxy.Router {
 6+func createRouter(handler *filehandlers.FileHandlerRouter) proxy.Router {
 7 	return func(sh ssh.Handler, s ssh.Session) []wish.Middleware {
 8 		return []wish.Middleware{
 9 			pipe.Middleware(handler, ".md"),
10@@ -36,20 +36,19 @@ func createRouter(handler *filehandlers.FileHandlerRouter, cliHandler *CliHandle
11 			wishrsync.Middleware(handler),
12 			auth.Middleware(handler),
13 			wsh.PtyMdw(wsh.DeprecatedNotice()),
14-			WishMiddleware(cliHandler),
15 			wsh.LogMiddleware(handler.GetLogger()),
16 		}
17 	}
18 }
19 
20-func withProxy(handler *filehandlers.FileHandlerRouter, cliHandler *CliHandler, otherMiddleware ...wish.Middleware) ssh.Option {
21+func withProxy(handler *filehandlers.FileHandlerRouter, otherMiddleware ...wish.Middleware) ssh.Option {
22 	return func(server *ssh.Server) error {
23 		err := sftp.SSHOption(handler)(server)
24 		if err != nil {
25 			return err
26 		}
27 
28-		return proxy.WithProxy(createRouter(handler, cliHandler), otherMiddleware...)(server)
29+		return proxy.WithProxy(createRouter(handler), otherMiddleware...)(server)
30 	}
31 }
32 
33@@ -88,11 +87,6 @@ func StartSshServer() {
34 	handler := filehandlers.NewFileHandlerRouter(cfg, dbh, fileMap)
35 	handler.Spaces = []string{cfg.Space, "imgs"}
36 
37-	cliHandler := &CliHandler{
38-		Logger: logger,
39-		DBPool: dbh,
40-	}
41-
42 	sshAuth := shared.NewSshAuthHandler(dbh, logger, cfg)
43 	s, err := wish.NewServer(
44 		wish.WithAddress(fmt.Sprintf("%s:%s", host, port)),
45@@ -100,7 +94,6 @@ func StartSshServer() {
46 		wish.WithPublicKeyAuth(sshAuth.PubkeyAuthHandler),
47 		withProxy(
48 			handler,
49-			cliHandler,
50 			promwish.Middleware(fmt.Sprintf("%s:%s", host, promPort), "prose-ssh"),
51 		),
52 	)