Handle checksums

This commit is contained in:
Lorenzo Bolla
2021-10-08 13:04:00 +02:00
parent 86c1ffab2a
commit 853c990b6e
+48 -18
View File
@@ -6,12 +6,14 @@ import (
"crypto/sha1" "crypto/sha1"
"crypto/sha256" "crypto/sha256"
"crypto/sha512" "crypto/sha512"
"encoding/hex"
"fmt" "fmt"
"github.com/aptly-dev/aptly/utils"
"github.com/cavaliercoder/grab"
"net/http" "net/http"
"time" "time"
"github.com/aptly-dev/aptly/utils"
"github.com/cavaliercoder/grab"
"github.com/aptly-dev/aptly/aptly" "github.com/aptly-dev/aptly/aptly"
) )
@@ -74,26 +76,53 @@ func (d *GrabDownloader) log(msg string, a ...interface{}) {
} }
} }
func (d *GrabDownloader) maybeSetupChecksum(req *grab.Request, expected *utils.ChecksumInfo) error {
if expected == nil {
// Nothing to setup
return nil
}
if expected.MD5 != "" {
expected_hash, err := hex.DecodeString(expected.MD5)
if err != nil {
return err
}
req.SetChecksum(md5.New(), expected_hash, true)
} else if expected.SHA1 != "" {
expected_hash, err := hex.DecodeString(expected.SHA1)
if err != nil {
return err
}
req.SetChecksum(sha1.New(), expected_hash, true)
} else if expected.SHA256 != "" {
expected_hash, err := hex.DecodeString(expected.SHA256)
if err != nil {
return err
}
req.SetChecksum(sha256.New(), expected_hash, true)
} else if expected.SHA512 != "" {
expected_hash, err := hex.DecodeString(expected.SHA512)
if err != nil {
return err
}
req.SetChecksum(sha512.New(), expected_hash, true)
}
return nil
}
func (d *GrabDownloader) download(ctx context.Context, url string, destination string, expected *utils.ChecksumInfo, ignoreMismatch bool) error { func (d *GrabDownloader) download(ctx context.Context, url string, destination string, expected *utils.ChecksumInfo, ignoreMismatch bool) error {
// TODO clean up dest dir on permanent failure // TODO clean up dest dir on permanent failure
d.log("Starting download %s -> %s\n", url, destination) d.log("Starting download %s -> %s\n", url, destination)
req, _ := grab.NewRequest(destination, url)
// TODO ignoreMismatch req, err := grab.NewRequest(destination, url)
if expected != nil { if err != nil {
if expected.MD5 != "" { d.log("Error creating new request: %v\n", err)
d.log("Verifying checksum MD5 %s -> %s\n", url, expected.MD5) return err
req.SetChecksum(md5.New(), []byte(expected.MD5), true) }
} else if expected.SHA1 != "" {
d.log("Verifying checksum SHA1 %s -> %s\n", url, expected.SHA1) d.maybeSetupChecksum(req, expected)
req.SetChecksum(sha1.New(), []byte(expected.SHA1), true) if err != nil {
} else if expected.SHA256 != "" { d.log("Error setting up checksum: %v\n", err)
d.log("Verifying checksum SHA256 %s -> %s\n", url, expected.SHA256) return err
req.SetChecksum(sha256.New(), []byte(expected.SHA256), true)
} else if expected.SHA512 != "" {
d.log("Verifying checksum SHA512 %s -> %s\n", url, expected.SHA512)
req.SetChecksum(sha512.New(), []byte(expected.SHA512), true)
}
} }
resp := d.client.Do(req) resp := d.client.Do(req)
@@ -106,6 +135,7 @@ Loop:
break Loop break Loop
} }
} }
// TODO ignoreMismatch
return resp.Err() return resp.Err()
} }