joao/pkg/op-client/checksum.go

39 lines
836 B
Go

package opclient
import (
"fmt"
"sort"
"strings"
op "github.com/1Password/connect-sdk-go/onepassword"
"golang.org/x/crypto/blake2b"
)
func Checksum(fields []*op.ItemField) string {
newHash, err := blake2b.New256(nil)
if err != nil {
panic(err)
}
df := []string{}
for _, field := range fields {
if field.ID == "password" || field.ID == "notesPlain" || (field.Section != nil && field.Section.ID == "~annotations") {
continue
}
label := field.Label
if field.Section != nil {
sectionID := field.Section.Label
if sectionID == "" {
sectionID = field.Section.ID
}
if sectionID != "" {
label = sectionID + "." + label
}
}
df = append(df, label+field.Value)
}
sort.Strings(df)
newHash.Write([]byte(strings.Join(df, "")))
checksum := newHash.Sum(nil)
return fmt.Sprintf("%x", checksum)
}