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}