From 855e7ff186a8b9aceb1006f533228d70e3a443aa Mon Sep 17 00:00:00 2001 From: Kevin Ruffin Date: Fri, 18 Feb 2022 00:58:26 -0500 Subject: [PATCH] Starts to build the bash script now. Needs to be more resiliant tho. --- main.go | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 94 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index d37f818..ee8bc7a 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,9 @@ import ( "io/ioutil" "strconv" "fmt" + "regexp" + "strings" + "os" ) var ( @@ -29,10 +32,13 @@ var ( func saveToken(tok *oauth2.Token, filename string) { j, err := json.MarshalIndent(tok, "", "\t") + if err != nil { + log.Fatalf("Failed to marshal token: %v", err) + } + err = ioutil.WriteFile(filename, j, 0664) if err != nil { log.Fatalf("Failed to save token: %v", err) } - ioutil.WriteFile(filename, j, 0777) } func loadToken(filename string) *oauth2.Token { @@ -134,6 +140,7 @@ type Product struct { Installers [] struct { Name string `json:"name"` Os string `json:"os"` + Language string `json:"language"` Files [] struct { Id string `json:"id"` Size int64 `json:"size"` @@ -168,6 +175,9 @@ func getProduct(id int) *Product { type DownloadLinks struct { Downlink string `json:"downlink"` Checksum string `json:"checksum"` + InstallerName string + Filename string + Md5 string } func (dl *DownloadLinks) String() string { @@ -195,6 +205,8 @@ func getDownloadLinks(p *Product) []*DownloadLinks { if err != nil { log.Fatalf("Failed to parse file download response: %v", err) } + + dl.InstallerName = sanitizeName(i.Name) links = append(links, dl) } } @@ -202,6 +214,69 @@ func getDownloadLinks(p *Product) []*DownloadLinks { return links } +func sanitizeName(name string) string { + s := strings.Replace(name, " ", "_", -1) + s = strings.Replace(s, "'", "", -1) + s = strings.Replace(s, "™", "", -1) + return s +} + +func writeChecksumIfNeeded(dl *DownloadLinks, folder string) { + // TODO: reuse an existing checksum file somehow + res, err := client.Get(dl.Checksum) + if err != nil { + log.Fatalf("Failed to get file checksum info: %v", err) + } + defer res.Body.Close() + body, err := ioutil.ReadAll(res.Body) + if err != nil { + log.Fatalf("Failed to parse file checksum body: %v", err) + } + + re := regexp.MustCompile(`