65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package route
|
|
|
|
import (
|
|
"leech/config"
|
|
"leech/html"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
func HandleList(c *fiber.Ctx) error {
|
|
req := c.Params("req")
|
|
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
|
|
if req == "" {
|
|
keys := make([]string, 0, len(config.Config.ServeDirs))
|
|
for k := range config.Config.ServeDirs {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Slice(keys, func(i, j int) bool {
|
|
return i < j
|
|
})
|
|
|
|
entries := make([]html.Entry, 0, len(config.Config.ServeDirs))
|
|
for _, key := range keys {
|
|
entries = append(entries, html.Entry{
|
|
Name: key,
|
|
Size: -1,
|
|
IsDir: true,
|
|
})
|
|
}
|
|
|
|
return c.SendString(html.FileListPage(req, entries))
|
|
} else {
|
|
pathSlice := strings.Split(req, ".")
|
|
pathBase, ok := config.Config.ServeDirs[pathSlice[0]]
|
|
if ok {
|
|
pathSlice[0] = pathBase
|
|
completePath := path.Join(pathSlice...)
|
|
files, err := os.ReadDir(completePath)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
entries := []html.Entry{}
|
|
for _, f := range files {
|
|
dirEntryInfo, err := f.Info()
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).SendString("Internal server error!")
|
|
}
|
|
entries = append(entries, html.Entry{
|
|
Name: f.Name(),
|
|
Size: dirEntryInfo.Size(),
|
|
IsDir: f.IsDir(),
|
|
})
|
|
}
|
|
return c.SendString(html.FileListPage(req, entries))
|
|
} else {
|
|
return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!")
|
|
}
|
|
}
|
|
}
|