study_xxqg/utils/update/update_other.go

53 lines
861 B
Go
Raw Permalink Normal View History

2022-05-27 13:37:16 +00:00
//go:build !windows
// +build !windows
package update
import (
"archive/tar"
"bytes"
"crypto/sha256"
"errors"
"io"
"net/http"
"github.com/klauspost/compress/gzip"
2022-05-27 13:37:16 +00:00
)
// update study_xxqg自我更新
func update(url string, sum []byte) error {
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
wc := writeSumCounter{
hash: sha256.New(),
}
rsp, err := io.ReadAll(io.TeeReader(resp.Body, &wc))
if err != nil {
return err
}
if !bytes.Equal(wc.hash.Sum(nil), sum) {
return errors.New("文件已损坏")
}
gr, err := gzip.NewReader(bytes.NewReader(rsp))
if err != nil {
return err
}
tr := tar.NewReader(gr)
for {
header, err := tr.Next()
if err != nil {
return err
}
if header.Name == "study_xxqg" {
err, _ := fromStream(tr)
if err != nil {
return err
}
return nil
}
}
}