MCPcopy
hub / github.com/minio/minio-go / getCanonicalHeaders

Function getCanonicalHeaders

pkg/signer/request-signature-v4.go:112–148  ·  view source on GitHub ↗

getCanonicalHeaders generate a list of request headers for signature.

(req http.Request, ignoredHeaders map[string]bool)

Source from the content-addressed store, hash-verified

110// getCanonicalHeaders generate a list of request headers for
111// signature.
112func getCanonicalHeaders(req http.Request, ignoredHeaders map[string]bool) string {
113 var headers []string
114 vals := make(map[string][]string)
115 for k, vv := range req.Header {
116 if _, ok := ignoredHeaders[http.CanonicalHeaderKey(k)]; ok {
117 continue // ignored header
118 }
119 headers = append(headers, strings.ToLower(k))
120 vals[strings.ToLower(k)] = vv
121 }
122 if !headerExists("host", headers) {
123 headers = append(headers, "host")
124 }
125 sort.Strings(headers)
126
127 var buf bytes.Buffer
128 // Save all the headers in canonical form <header>:<value> newline
129 // separated for each header.
130 for _, k := range headers {
131 buf.WriteString(k)
132 buf.WriteByte(':')
133 switch k {
134 case "host":
135 buf.WriteString(getHostAddr(&req))
136 buf.WriteByte('\n')
137 default:
138 for idx, v := range vals[k] {
139 if idx > 0 {
140 buf.WriteByte(',')
141 }
142 buf.WriteString(signV4TrimAll(v))
143 }
144 buf.WriteByte('\n')
145 }
146 }
147 return buf.String()
148}
149
150func headerExists(key string, headers []string) bool {
151 for _, k := range headers {

Callers 2

TestRequestHostFunction · 0.85
getCanonicalRequestFunction · 0.85

Calls 4

headerExistsFunction · 0.85
getHostAddrFunction · 0.85
signV4TrimAllFunction · 0.85
StringMethod · 0.45

Tested by 1

TestRequestHostFunction · 0.68