80 lines
1.6 KiB
Go
80 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
type versionInfo struct {
|
|
Version string
|
|
ChecksumUrl string
|
|
AssetUrl string
|
|
AssetSize int64
|
|
}
|
|
|
|
func (v versionInfo) getAssetPath(prefix string) string {
|
|
return path.Join(buildTempDir, prefix+v.Version+"_"+assetFilename)
|
|
}
|
|
|
|
func (v versionInfo) checkAssetExist() bool {
|
|
_, err := os.Stat(v.getAssetPath(""))
|
|
return !os.IsNotExist(err)
|
|
}
|
|
|
|
func (v versionInfo) downloadAsset() (err error) {
|
|
file, err := os.OpenFile(v.getAssetPath(""), os.O_WRONLY|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
resp, err := http.Get(v.AssetUrl)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
_, err = io.Copy(file, resp.Body)
|
|
return err
|
|
}
|
|
|
|
func (v versionInfo) downloadChecksum() (checksum string, err error) {
|
|
resp, err := http.Get(v.ChecksumUrl)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
r := bufio.NewReader(resp.Body)
|
|
var line []byte
|
|
for err == nil {
|
|
line, _, err = r.ReadLine()
|
|
lineStr := string(line)
|
|
if strings.Contains(lineStr, assetFilename) {
|
|
checksum = strings.ToLower(strings.TrimSpace(strings.Split(lineStr, " ")[0]))
|
|
return
|
|
}
|
|
}
|
|
return "", fmt.Errorf("checksum for %s not found", assetFilename)
|
|
}
|
|
|
|
func (v versionInfo) calcAssetChecksum() (checksum string, err error) {
|
|
file, err := os.Open(v.getAssetPath(""))
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer file.Close()
|
|
sha := sha256.New()
|
|
_, err = io.Copy(sha, file)
|
|
if err != nil {
|
|
return
|
|
}
|
|
checksum = hex.EncodeToString(sha.Sum(nil))
|
|
return
|
|
}
|