-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathurl.go
More file actions
63 lines (54 loc) · 1.55 KB
/
Copy pathurl.go
File metadata and controls
63 lines (54 loc) · 1.55 KB
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package getrelease
import (
"fmt"
"regexp"
"strings"
)
// resolveChecksum downloads checksum file and creates url query compatible with go-getter
func resolveChecksum(urlGetter urlGetter, checksum string) (string, error) {
vs := strings.SplitN(checksum, ":", 2)
switch len(vs) {
case 2:
break // good
default:
// if no checksum type us provided, it is invalid
return "", fmt.Errorf("unsupported checksum: %s", checksum)
}
checksumType, checksumValue := vs[0], vs[1]
switch checksumType {
case "asset":
reg, err := regexp.Compile(checksumValue)
if err != nil {
return "", err
}
_, _, url, err := urlGetter(reg)
if err != nil {
return "", err
}
return "file:" + *url, nil
case "md5", "sha1", "sha256", "sha512":
return checksum, nil
case "link", "file":
return "file:" + checksumValue, nil
default:
return "", fmt.Errorf("unsupported checksum type: %s", checksumType)
}
}
// adjustUrlForGetter creates url queries compatible with go-getter
func adjustUrlForGetter(url string, urlGetter urlGetter, config *Configuration) (string, error) {
url += "?"
if strings.TrimSpace(config.Archive) != "" {
url += fmt.Sprintf("%s=%s&", "archive", config.Archive)
}
if strings.TrimSpace(config.Checksum) != "" {
checksum, err := resolveChecksum(urlGetter, config.Checksum)
if err != nil {
return "", err
}
url += fmt.Sprintf("%s=%s&", "checksum", checksum)
}
if strings.TrimSpace(config.FileName) != "" {
url += fmt.Sprintf("%s=%s&", "filename", config.FileName)
}
return strings.Trim(strings.Trim(url, "?"), "&"), nil
}