70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package keylog
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"sort"
|
|
|
|
"tea.chunkbyte.com/kato/go-worm/lib/config"
|
|
)
|
|
|
|
func Dir() (string, error) {
|
|
return config.KeylogDir()
|
|
}
|
|
|
|
func List() ([]FileInfo, error) {
|
|
dir, err := Dir()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
entries, err := os.ReadDir(dir)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
var files []FileInfo
|
|
for _, entry := range entries {
|
|
if entry.IsDir() || !ValidLogFilename(entry.Name()) {
|
|
continue
|
|
}
|
|
info, err := entry.Info()
|
|
if err != nil {
|
|
continue
|
|
}
|
|
files = append(files, FileInfo{
|
|
Name: entry.Name(),
|
|
Size: info.Size(),
|
|
ModifiedTime: info.ModTime(),
|
|
})
|
|
}
|
|
sort.Slice(files, func(i, j int) bool {
|
|
return files[i].ModifiedTime.After(files[j].ModifiedTime)
|
|
})
|
|
return files, nil
|
|
}
|
|
|
|
func Open(name string) (*os.File, os.FileInfo, error) {
|
|
if !ValidLogFilename(name) {
|
|
return nil, nil, os.ErrInvalid
|
|
}
|
|
dir, err := Dir()
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
path := filepath.Join(dir, filepath.Base(name))
|
|
info, err := os.Stat(path)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
if info.IsDir() {
|
|
return nil, nil, os.ErrInvalid
|
|
}
|
|
file, err := os.Open(path)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
return file, info, nil
|
|
}
|