mirror of
https://hacklab.nilfm.cc/nirvash
synced 2024-10-22 14:01:49 +00:00
88 lines
1.7 KiB
Go
88 lines
1.7 KiB
Go
package archetype
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
type SimpleFileManager struct {
|
|
Root string
|
|
ShowHtml bool
|
|
ShowHidden bool
|
|
}
|
|
|
|
type FileListing struct {
|
|
Error string
|
|
Root string
|
|
Up string
|
|
SubDirs []string
|
|
Files []string
|
|
}
|
|
|
|
type FileManager interface {
|
|
Init(cfg *Config) error
|
|
// ListTree() FileListing
|
|
ListSubTree(root string) FileListing
|
|
// AddFile(path string, file multipart.FileHeader) error
|
|
// MkDir(path string) error
|
|
// Remove(path string) error
|
|
// Rename(old, new string) error
|
|
}
|
|
|
|
func (self *SimpleFileManager) Init(cfg *Config) error {
|
|
self.Root = cfg.StaticRoot
|
|
self.ShowHtml = cfg.StaticShowHtml
|
|
self.ShowHidden = cfg.StaticShowHidden
|
|
return nil
|
|
}
|
|
|
|
func (self *SimpleFileManager) ListSubTree(root string) FileListing {
|
|
list := FileListing{}
|
|
|
|
if strings.Contains(root, "../") || strings.Contains(root, "..\\") {
|
|
list.Error = "You cannot escape!"
|
|
return list
|
|
}
|
|
|
|
fullPath := filepath.Join(self.Root, root)
|
|
|
|
files, err := ioutil.ReadDir(fullPath)
|
|
|
|
if err != nil {
|
|
list.Error = err.Error()
|
|
return list
|
|
}
|
|
|
|
list.Root = root
|
|
if !strings.HasSuffix(list.Root, "/") {
|
|
list.Root += "/"
|
|
}
|
|
if !strings.HasPrefix(list.Root, "/") {
|
|
list.Root = "/" + list.Root
|
|
}
|
|
|
|
levels := strings.Split(root, "/")
|
|
if list.Root != "/" {
|
|
list.Up = "/"
|
|
}
|
|
if len(levels) >= 2 {
|
|
list.Up = "/" + strings.Join(levels[:len(levels)-1], "/")
|
|
}
|
|
|
|
for _, file := range files {
|
|
if !self.ShowHidden && strings.HasPrefix(file.Name(), ".") {
|
|
continue
|
|
}
|
|
if file.IsDir() {
|
|
list.SubDirs = append(list.SubDirs, file.Name())
|
|
} else {
|
|
if !self.ShowHtml && strings.HasSuffix(file.Name(), ".html") {
|
|
continue
|
|
}
|
|
list.Files = append(list.Files, file.Name())
|
|
}
|
|
}
|
|
|
|
return list
|
|
}
|