mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-12 06:30:35 +00:00
Handle checksums
This commit is contained in:
+48
-18
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user