mirror of
https://github.com/packwiz/packwiz.git
synced 2025-04-19 21:16:30 +02:00
Use new SHA1/MD5 hashes from CurseForge API
This commit is contained in:
parent
9585272311
commit
55ce2fb581
@ -179,16 +179,16 @@ func createModFile(modInfo modInfo, fileInfo modFileInfo, index *core.Index) err
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hash, hashFormat := fileInfo.getBestHash()
|
||||||
|
|
||||||
modMeta := core.Mod{
|
modMeta := core.Mod{
|
||||||
Name: modInfo.Name,
|
Name: modInfo.Name,
|
||||||
FileName: fileInfo.FileName,
|
FileName: fileInfo.FileName,
|
||||||
Side: core.UniversalSide,
|
Side: core.UniversalSide,
|
||||||
Download: core.ModDownload{
|
Download: core.ModDownload{
|
||||||
URL: u,
|
URL: u,
|
||||||
// TODO: murmur2 hashing may be unstable in curse api, calculate the hash manually?
|
HashFormat: hashFormat,
|
||||||
// TODO: check if the hash is invalid (e.g. 0)
|
Hash: hash,
|
||||||
HashFormat: "murmur2",
|
|
||||||
Hash: strconv.Itoa(fileInfo.Fingerprint),
|
|
||||||
},
|
},
|
||||||
Update: updateMap,
|
Update: updateMap,
|
||||||
}
|
}
|
||||||
@ -421,12 +421,11 @@ func (u cfUpdater) DoUpdate(mods []*core.Mod, cachedState []interface{}) error {
|
|||||||
|
|
||||||
v.FileName = fileInfoData.FileName
|
v.FileName = fileInfoData.FileName
|
||||||
v.Name = modState.Name
|
v.Name = modState.Name
|
||||||
|
hash, hashFormat := fileInfoData.getBestHash()
|
||||||
v.Download = core.ModDownload{
|
v.Download = core.ModDownload{
|
||||||
URL: u,
|
URL: u,
|
||||||
// TODO: murmur2 hashing may be unstable in curse api, calculate the hash manually?
|
HashFormat: hashFormat,
|
||||||
// TODO: check if the hash is invalid (e.g. 0)
|
Hash: hash,
|
||||||
HashFormat: "murmur2",
|
|
||||||
Hash: strconv.Itoa(fileInfoData.Fingerprint),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
v.Update["curseforge"]["project-id"] = modState.ID
|
v.Update["curseforge"]["project-id"] = modState.ID
|
||||||
|
@ -124,6 +124,12 @@ const (
|
|||||||
modloaderTypeFabric
|
modloaderTypeFabric
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//noinspection GoUnusedConst
|
||||||
|
const (
|
||||||
|
hashAlgoSHA1 int = iota + 1
|
||||||
|
hashAlgoMD5
|
||||||
|
)
|
||||||
|
|
||||||
// modInfo is a subset of the deserialised JSON response from the Curse API for mods (addons)
|
// modInfo is a subset of the deserialised JSON response from the Curse API for mods (addons)
|
||||||
type modInfo struct {
|
type modInfo struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
@ -244,6 +250,37 @@ type modFileInfo struct {
|
|||||||
ModID int `json:"addonId"`
|
ModID int `json:"addonId"`
|
||||||
Type int `json:"type"`
|
Type int `json:"type"`
|
||||||
} `json:"dependencies"`
|
} `json:"dependencies"`
|
||||||
|
|
||||||
|
Hashes []struct {
|
||||||
|
Value string `json:"value"`
|
||||||
|
Algorithm int `json:"algorithm"`
|
||||||
|
} `json:"hashes"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i modFileInfo) getBestHash() (hash string, hashFormat string) {
|
||||||
|
// TODO: check if the hash is invalid (e.g. 0)
|
||||||
|
hash = strconv.Itoa(i.Fingerprint)
|
||||||
|
hashFormat = "murmur2"
|
||||||
|
hashPreferred := 0
|
||||||
|
|
||||||
|
// Prefer SHA1, then MD5 if found:
|
||||||
|
if i.Hashes != nil {
|
||||||
|
for _, v := range i.Hashes {
|
||||||
|
if v.Algorithm == hashAlgoMD5 && hashPreferred < 1 {
|
||||||
|
hashPreferred = 1
|
||||||
|
|
||||||
|
hash = v.Value
|
||||||
|
hashFormat = "md5"
|
||||||
|
} else if v.Algorithm == hashAlgoSHA1 && hashPreferred < 2 {
|
||||||
|
hashPreferred = 2
|
||||||
|
|
||||||
|
hash = v.Value
|
||||||
|
hashFormat = "sha1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFileInfo(modID int, fileID int) (modFileInfo, error) {
|
func getFileInfo(modID int, fileID int) (modFileInfo, error) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user