repos / pico

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

pico / pkg / send / list
Antonio Mika  ·  2025-03-12

list.go

 1package list
 2
 3import (
 4	"sort"
 5	"strings"
 6
 7	"github.com/picosh/pico/pkg/pssh"
 8	"github.com/picosh/pico/pkg/send/utils"
 9)
10
11func Middleware(writeHandler utils.CopyFromClientHandler) pssh.SSHServerMiddleware {
12	return func(sshHandler pssh.SSHServerHandler) pssh.SSHServerHandler {
13		return func(session *pssh.SSHServerConnSession) error {
14			cmd := session.Command()
15			if !(len(cmd) > 1 && cmd[0] == "command" && cmd[1] == "ls") {
16				return sshHandler(session)
17			}
18
19			fileList, err := writeHandler.List(session, "/", true, false)
20			if err != nil {
21				utils.ErrorHandler(session, err)
22				return err
23			}
24
25			var data []string
26			for _, file := range fileList {
27				name := strings.ReplaceAll(file.Name(), "/", "")
28				if file.IsDir() {
29					name += "/"
30				}
31
32				data = append(data, name)
33			}
34
35			sort.Strings(data)
36
37			_, err = session.Write([]byte(strings.Join(data, "\r\n")))
38			if err != nil {
39				utils.ErrorHandler(session, err)
40			}
41			return err
42		}
43	}
44}