-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.go
More file actions
104 lines (77 loc) · 1.38 KB
/
utils.go
File metadata and controls
104 lines (77 loc) · 1.38 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package storage
import (
"net/http"
"path"
"regexp"
"strings"
)
//
//
//
var metadataRegEx *regexp.Regexp
func init() {
metadataRegEx = regexp.MustCompile(`[^A-Za-z0-9\-_]+`)
}
//
//
//
// Normalize Metadate key to Canonical Header uwu;
func NormalizeMetadataKey(key string) string {
key = metadataRegEx.ReplaceAllString(key, "")
return http.CanonicalHeaderKey(key)
}
func NormalizeMetadata(metadata Metadata) Metadata {
if metadata == nil {
return nil
}
//
out := make(Metadata, len(metadata))
for k, v := range metadata {
nk := NormalizeMetadataKey(k)
out[nk] = v
}
//
return out
}
//
//
//
func NormalizeKey(key string) (string, error) {
nkey := strings.TrimSpace(key)
if nkey == "" || nkey == "/" {
return "", ErrInvalidKey.New(key)
}
//
nkey = path.Clean(nkey)
nkey = strings.TrimPrefix(nkey, "/")
if nkey == "" || nkey == "." || nkey == ".." || strings.HasPrefix(nkey, "../") {
return "", ErrInvalidKey.New(key)
}
return nkey, nil
}
//
//
//
func GetOptionsOrDefault(opts *GetOptions) *GetOptions {
if opts == nil {
return &GetOptions{}
}
return opts
}
func PutOptionsOrDefault(opts *PutOptions) *PutOptions {
if opts == nil {
return &PutOptions{
ContentType: "application/octet-stream",
}
}
newOpts := *opts
//
if newOpts.ContentType == "" {
newOpts.ContentType = "application/octet-stream"
}
//
return &newOpts
}
//
//
//