github.com/Mrs4s/go-cqhttp@v1.2.0/internal/selfupdate/update_windows.go (about)

     1  package selfupdate
     2  
     3  import (
     4  	"archive/zip"
     5  	"bytes"
     6  	"crypto/sha256"
     7  	"errors"
     8  	"io"
     9  	"net/http"
    10  )
    11  
    12  // update go-cqhttp自我更新
    13  func update(url string, sum []byte) error {
    14  	resp, err := http.Get(url)
    15  	if err != nil {
    16  		return err
    17  	}
    18  	defer resp.Body.Close()
    19  	wc := writeSumCounter{
    20  		hash: sha256.New(),
    21  	}
    22  	rsp, err := io.ReadAll(io.TeeReader(resp.Body, &wc))
    23  	if err != nil {
    24  		return err
    25  	}
    26  	if !bytes.Equal(wc.hash.Sum(nil), sum) {
    27  		return errors.New("文件已损坏")
    28  	}
    29  	reader, _ := zip.NewReader(bytes.NewReader(rsp), resp.ContentLength)
    30  	file, err := reader.Open("go-cqhttp.exe")
    31  	if err != nil {
    32  		return err
    33  	}
    34  	err, _ = fromStream(file)
    35  	if err != nil {
    36  		return err
    37  	}
    38  	return nil
    39  }