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}