mirror of
https://github.com/langgenius/dify-plugin-daemon.git
synced 2026-07-22 17:56:00 -04:00
46 lines
898 B
Go
46 lines
898 B
Go
package decoder
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"path"
|
|
"slices"
|
|
)
|
|
|
|
func CalculateChecksum(plugin PluginDecoder) (string, error) {
|
|
m := map[string][]byte{}
|
|
|
|
sha256 := func(data []byte) []byte {
|
|
sha := sha256.New()
|
|
sha.Write(data)
|
|
return sha.Sum(nil)
|
|
}
|
|
|
|
if err := plugin.Walk(func(filename string, dir string) error {
|
|
var err error
|
|
content, err := plugin.ReadFile(path.Join(dir, filename))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m[path.Join(dir, filename)] = sha256(content)
|
|
return nil
|
|
}); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// sort the keys, ensure the order is consistent
|
|
keys := make([]string, 0, len(m))
|
|
for k := range m {
|
|
keys = append(keys, k)
|
|
}
|
|
slices.Sort(keys)
|
|
|
|
data := make([]byte, 0, len(m)*(32+32))
|
|
for _, k := range keys {
|
|
data = append(data, sha256([]byte(k))...)
|
|
data = append(data, m[k]...)
|
|
}
|
|
|
|
return hex.EncodeToString(sha256(data)), nil
|
|
}
|