package main import ( "fmt" "io" "net/http" "path/filepath" "github.com/gofiber/fiber/v2" cp "github.com/otiai10/copy" "github.com/robfig/cron/v3" "log" "os" ) func main() { if err := os.Mkdir("./public", 0750); err != nil && !os.IsExist(err) { log.Fatal(err) } app := fiber.New(fiber.Config{}) port := os.Getenv("PORT") if port == "" { port = "8989" } c := cron.New() cronsetting := os.Getenv("CRONSETTING") if cronsetting == "" { cronsetting = "0 1 * * *" // At 01:00, every day } c.AddFunc(cronsetting, func() { update() }) c.Start() doupdate := os.Getenv("UPDATE") if doupdate != "" { update() } app.Static("/", "./public") log.Fatalln(app.Listen(fmt.Sprintf(":%v", port))) } func update() { log.Println("Update") if err := os.Mkdir("./downloads", 0750); err != nil && !os.IsExist(err) { log.Fatal(err) } log.Println(filepath.Base("https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt")) urls := []string{"youtube", "abuse", "ads", "crypto", "drugs", "facebook", "fraud", "gambling", "malware", "phishing", "piracy", "porn", "ransomware", "redirect", "scam", "torrent", "tracking"} for uc := range urls { log.Println("Updating", urls[uc]) url := fmt.Sprintf("https://blocklistproject.github.io/Lists/%s.txt", urls[uc]) path := fmt.Sprintf("./downloads/%s.txt", urls[uc]) log.Println("Downloading", url) dlerr := DownloadFile(path, url) if dlerr != nil { log.Println("Error downloading", dlerr) } } otherList := []string{"https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt", "https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt", "https://adaway.org/hosts.txt", "https://v.firebog.net/hosts/static/w3kbl.txt", "https://raw.githubusercontent.com/kboghdady/youTube_ads_4_pi-hole/master/youtubelist.txt", "https://block.energized.pro/unified/formats/domains.txt", "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts"} for oc := range otherList { log.Println("Updating", otherList[oc]) url := otherList[oc] path := fmt.Sprintf("./downloads/%s", filepath.Base(url)) log.Println("Downloading", url) dlerr := DownloadFile(path, url) if dlerr != nil { log.Println("Error downloading", dlerr) } } copyerror := cp.Copy("./downloads", "./public") if copyerror != nil { log.Println("Error copying files", copyerror) } } func DownloadFile(filepath string, url string) error { // Get the data resp, err := http.Get(url) if err != nil { return err } defer resp.Body.Close() log.Println("Sattus", resp.Status) if resp.Status == "200 OK" { out, err := os.Create(filepath) if err != nil { return err } defer out.Close() // Write the body to file _, err = io.Copy(out, resp.Body) return err } return err }