repos / pico

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

pico / pkg / send / list
Eric Bower  ·  2025-05-24

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			//nolint
16			if !(len(cmd) > 1 && cmd[0] == "command" && cmd[1] == "ls") {
17				return sshHandler(session)
18			}
19
20			fileList, err := writeHandler.List(session, "/", true, false)
21			if err != nil {
22				utils.ErrorHandler(session, err)
23				return err
24			}
25
26			var data []string
27			for _, file := range fileList {
28				name := strings.ReplaceAll(file.Name(), "/", "")
29				if file.IsDir() {
30					name += "/"
31				}
32
33				data = append(data, name)
34			}
35
36			sort.Strings(data)
37
38			_, err = session.Write([]byte(strings.Join(data, "\r\n")))
39			if err != nil {
40				utils.ErrorHandler(session, err)
41			}
42			return err
43		}
44	}
45}