diff --git a/handler/sponsor_handler.go b/handler/sponsor_handler.go index b3b215a..2b676c5 100644 --- a/handler/sponsor_handler.go +++ b/handler/sponsor_handler.go @@ -1,19 +1,57 @@ package handler import ( + "encoding/json" "html/template" + "log" "net/http" + "slices" + "time" "uptimemonitor" "uptimemonitor/html" ) -var sponsors = []uptimemonitor.Sponsor{ +var initialSponsors = []uptimemonitor.Sponsor{ { Name: "AIR Labs", Url: "https://airlabs.pl", Image: "/static/img/airlabs.svg", }, } +var sponsors = []uptimemonitor.Sponsor{} + +func init() { + reloadSponsors() + + go func() { + t := time.NewTicker(time.Minute * 60 * 12) + + for range t.C { + reloadSponsors() + } + }() +} + +func reloadSponsors() { + log.Printf("RELOADING SPONSORS") + req, err := http.NewRequest(http.MethodGet, "https://sponsors.uptimemonitor.dev", nil) + if err != nil { + return + } + + res, err := http.DefaultClient.Do(req) + if err != nil { + return + } + + var data []uptimemonitor.Sponsor + err = json.NewDecoder(res.Body).Decode(&data) + if err != nil { + return + } + + sponsors = slices.Concat(initialSponsors, data) +} func (*Handler) ListSponsors() http.HandlerFunc { layout := template.Must(template.ParseFS(html.FS, "layout.html"))