/
registry.go
44 lines (40 loc) · 1.13 KB
/
registry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package checksum
import (
"fmt"
"path"
"strings"
"github.com/aquaproj/aqua/pkg/config/aqua"
"github.com/sirupsen/logrus"
"github.com/suzuki-shunsuke/logrus-error/logerr"
)
func RegistryID(regist *aqua.Registry) string {
return path.Join("registries", "github_content", "github.com", regist.RepoOwner, regist.RepoName, regist.Ref, regist.Path)
}
func CheckRegistry(regist *aqua.Registry, checksums *Checksums, content []byte) error {
checksumID := RegistryID(regist)
chksum := checksums.Get(checksumID)
algorithm := "sha512"
if chksum != nil {
algorithm = chksum.Algorithm
}
chk, err := CalculateReader(strings.NewReader(string(content)), algorithm)
if err != nil {
return fmt.Errorf("calculate a checksum: %w", err)
}
if chksum == nil {
chksum = &Checksum{
ID: checksumID,
Algorithm: "sha512",
Checksum: chk,
}
checksums.Set(checksumID, chksum)
return nil
}
if !strings.EqualFold(chksum.Checksum, chk) {
return logerr.WithFields(errInvalidChecksum, logrus.Fields{ //nolint:wrapcheck
"actual_checksum": strings.ToUpper(chk),
"expected_checksum": strings.ToUpper(chksum.Checksum),
})
}
return nil
}