From a23b36a2df0013a7dc21bb635267cd3edbe1de5c Mon Sep 17 00:00:00 2001 From: jabuxas Date: Thu, 19 Sep 2024 22:22:49 -0300 Subject: [PATCH] feat: request and time mod payload --- spire.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/spire.go b/spire.go index c961ffd..ac546fe 100644 --- a/spire.go +++ b/spire.go @@ -1,7 +1,59 @@ package main -import "fmt" +import ( + "fmt" + "io" + "log" + "net/http" + "os" + "time" +) + +const TMPDIR = "/tmp/spire" +const PAYLOAD = TMPDIR + "/payload.json" func main() { - fmt.Println("hello hi") + get_cache() +} + +func get_cache() error { + info, err := os.Stat(PAYLOAD) + + if err != nil { + fmt.Println("payload isn't accessible, requesting") + download_cache() + } else if !(info.ModTime().After(time.Now().Add(-2 * time.Hour))) { + download_cache() + } else { + fmt.Println("payload was updated recently, won't update") + } + + return nil +} + +func download_cache() error { + resp, err := http.Get("https://thunderstore.io/api/v1/package/") + if err != nil { + log.Fatal("couldn't download thunderstore payload") + return err + } + defer resp.Body.Close() + + if err := os.MkdirAll(TMPDIR, os.ModePerm); err != nil { + log.Fatal("couldn't create tmpdir") + return err + } + out, err := os.Create(PAYLOAD) + if err != nil { + log.Fatal("couldn't create payload file") + return err + } + defer out.Close() + + if _, err := io.Copy(out, resp.Body); err != nil { + log.Fatal("couldn't write to payload file") + return err + } + + return nil }