go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/connection/ssh/cat/cat.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package cat 5 6 import ( 7 "os" 8 "time" 9 10 "github.com/cockroachdb/errors" 11 "github.com/rs/zerolog/log" 12 "github.com/spf13/afero" 13 "go.mondoo.com/cnquery/providers/os/connection/local/statutil" 14 "go.mondoo.com/cnquery/providers/os/connection/shared" 15 ) 16 17 type CommandRunner interface { 18 RunCommand(command string) (*shared.Command, error) 19 } 20 21 func New(cmdRunner CommandRunner) *Fs { 22 return &Fs{ 23 commandRunner: cmdRunner, 24 } 25 } 26 27 type Fs struct { 28 commandRunner CommandRunner 29 base64 *bool 30 } 31 32 func (cat *Fs) Name() string { 33 return "Cat FS" 34 } 35 36 func (cat *Fs) useBase64encoding() bool { 37 if cat.base64 != nil { 38 return *cat.base64 39 } 40 41 b := cat.base64available() 42 cat.base64 = &b 43 return b 44 } 45 46 func (cat *Fs) base64available() bool { 47 cmd, err := cat.commandRunner.RunCommand("command -v base64") 48 if err != nil { 49 log.Debug().Msg("base64 command not found on target system") 50 return false 51 } 52 log.Debug().Msg("use base64 encoding for data transfer") 53 return cmd.ExitStatus == 0 54 } 55 56 func (cat *Fs) Open(name string) (afero.File, error) { 57 _, err := statutil.New(cat.commandRunner).Stat(name) 58 if err != nil { 59 return nil, err 60 } 61 62 return NewFile(cat, name, cat.useBase64encoding()), nil 63 } 64 65 func (cat *Fs) Stat(name string) (os.FileInfo, error) { 66 return statutil.New(cat.commandRunner).Stat(name) 67 } 68 69 func (cat *Fs) Create(name string) (afero.File, error) { 70 return nil, errors.New("not implemented") 71 } 72 73 func (cat *Fs) Mkdir(name string, perm os.FileMode) error { 74 return errors.New("not implemented") 75 } 76 77 func (cat *Fs) MkdirAll(path string, perm os.FileMode) error { 78 return errors.New("not implemented") 79 } 80 81 func (cat *Fs) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error) { 82 return nil, errors.New("not implemented") 83 } 84 85 func (cat *Fs) Remove(name string) error { 86 return errors.New("not implemented") 87 } 88 89 func (cat *Fs) RemoveAll(path string) error { 90 return errors.New("not implemented") 91 } 92 93 func (cat *Fs) Rename(oldname, newname string) error { 94 return errors.New("not implemented") 95 } 96 97 func (cat *Fs) Chmod(name string, mode os.FileMode) error { 98 return errors.New("not implemented") 99 } 100 101 func (cat *Fs) Chtimes(name string, atime time.Time, mtime time.Time) error { 102 return errors.New("not implemented") 103 } 104 105 func (cat *Fs) Chown(name string, uid, gid int) error { 106 return errors.New("not implemented") 107 }