MCPcopy
hub / github.com/getsops/sops / ParseKMSContext

Function ParseKMSContext

kms/keysource.go:142–189  ·  view source on GitHub ↗

ParseKMSContext takes either a KMS context map or a comma-separated list of KMS context key:value pairs, and returns a map.

(in interface{})

Source from the content-addressed store, hash-verified

140// ParseKMSContext takes either a KMS context map or a comma-separated list of
141// KMS context key:value pairs, and returns a map.
142func ParseKMSContext(in interface{}) map[string]*string {
143 const nonStringValueWarning = "Encryption context contains a non-string value, context will not be used"
144 out := make(map[string]*string)
145 switch in := in.(type) {
146 case map[string]interface{}:
147 if len(in) == 0 {
148 return nil
149 }
150 for k, v := range in {
151 value, ok := v.(string)
152 if !ok {
153 log.Warn(nonStringValueWarning)
154 return nil
155 }
156 out[k] = &value
157 }
158 case map[interface{}]interface{}:
159 if len(in) == 0 {
160 return nil
161 }
162 for k, v := range in {
163 key, ok := k.(string)
164 if !ok {
165 log.Warn(nonStringValueWarning)
166 return nil
167 }
168 value, ok := v.(string)
169 if !ok {
170 log.Warn(nonStringValueWarning)
171 return nil
172 }
173 out[key] = &value
174 }
175 case string:
176 if in == "" {
177 return nil
178 }
179 for _, kv := range strings.Split(in, ",") {
180 kv := strings.Split(kv, ":")
181 if len(kv) != 2 {
182 log.Warn(nonStringValueWarning)
183 return nil
184 }
185 out[kv[0]] = &kv[1]
186 }
187 }
188 return out
189}
190
191// kmsContextToString converts a dictionary into a string that can be parsed
192// again with ParseKMSContext().

Callers 4

mainFunction · 0.92
getRotateOptsFunction · 0.92
keyGroupsFunction · 0.92
TestParseKMSContextFunction · 0.85

Calls

no outgoing calls

Tested by 1

TestParseKMSContextFunction · 0.68