diff --git a/cmd/dirlist.go b/cmd/dirlist.go index 7ef5191..7f4ded9 100644 --- a/cmd/dirlist.go +++ b/cmd/dirlist.go @@ -1,20 +1,73 @@ package cmd import ( - "fmt" + "bufio" + "net/http" + "os" + "strconv" + "github.com/charmbracelet/lipgloss" "github.com/charmbracelet/log" ) +const ( + directoryURL = "https://raw.githubusercontent.com/pushfs/sif-runtime/main/dirlist/" + smallFile = "directory-list-2.3-small.txt" + mediumFile = "directory-list-2.3-medium.txt" + bigFile = "directory-list-2.3-big.txt" +) + +var statusstyle = lipgloss.NewStyle(). + Bold(true). + Foreground(lipgloss.Color("#00ff1a")) + +var directorystyle = lipgloss.NewStyle(). + Bold(true). + Underline(true) + func Dirlist(size string, url string) { - log.Infof("Starting directory scan on %s...", url) + + logger := log.NewWithOptions(os.Stderr, log.Options{ + Prefix: "Dirlist 📂", + }) + dirlog := logger.With("url", url) + + var list string switch size { case "small": - fmt.Println("small") + list = directoryURL + smallFile case "medium": - fmt.Println("medium") + list = directoryURL + mediumFile case "large": - fmt.Println("large") + list = directoryURL + bigFile + } + + dirlog.Infof("Starting %s directory listing", size) + + resp, err := http.Get(list) + if err != nil { + log.Errorf("Error downloading directory list: %s", err) + return + } + var directories []string + scanner := bufio.NewScanner(resp.Body) + scanner.Split(bufio.ScanLines) + for scanner.Scan() { + directories = append(directories, scanner.Text()) + } + + for _, directory := range directories { + log.Debugf("%s", directory) + resp, err := http.Get(url + "/" + directory) + if err != nil { + log.Debugf("Error %s: %s", directory, err) + return + } + + if resp.StatusCode != 404 { + // log url, directory, and status code\ + dirlog.Infof("%s [%s]", statusstyle.Render(strconv.Itoa(resp.StatusCode)), directorystyle.Render(directory)) + } } }