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.ServeDirs)) for k := range config.ServeDirs { keys = append(keys, k) } sort.Slice(keys, func(i, j int) bool { return i < j }) entries := make([]html.Entry, 0, len(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.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!") } } }