github.com/rancher/types@v0.0.0-20220328215343-4370ff10ecd5/mapper/credentialmapper.go (about) 1 package mapper 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/rancher/norman/types" 8 "github.com/rancher/norman/types/convert" 9 "github.com/rancher/norman/types/values" 10 ) 11 12 type CredentialMapper struct { 13 } 14 15 func (s CredentialMapper) FromInternal(data map[string]interface{}) { 16 formatData(data) 17 name := convert.ToString(values.GetValueN(data, "annotations", "field.cattle.io/name")) 18 if name == "" { 19 id := convert.ToString(values.GetValueN(data, "id")) 20 if id != "" { 21 values.PutValue(data, id, "annotations", "field.cattle.io/name") 22 } 23 } 24 delete(data, "data") 25 } 26 27 func (s CredentialMapper) ToInternal(data map[string]interface{}) error { 28 updateData(data) 29 return nil 30 } 31 32 func (s CredentialMapper) ModifySchema(schema *types.Schema, schemas *types.Schemas) error { 33 return nil 34 } 35 36 func updateData(data map[string]interface{}) { 37 stringData := map[string]string{} 38 for key, val := range data { 39 if val == nil { 40 continue 41 } 42 if strings.HasSuffix(key, "Config") { 43 for key2, val2 := range convert.ToMapInterface(val) { 44 stringData[fmt.Sprintf("%s-%s", key, key2)] = convert.ToString(val2) 45 } 46 values.PutValue(data, stringData, "stringData") 47 delete(data, key) 48 return 49 } 50 } 51 } 52 53 func formatData(data map[string]interface{}) { 54 secretData := convert.ToMapInterface(data["data"]) 55 getKey := func(data map[string]interface{}) string { 56 for key := range data { 57 splitKeys := strings.Split(key, "-") 58 if len(splitKeys) != 2 { 59 continue 60 } 61 if strings.HasSuffix(splitKeys[0], "Config") { 62 return splitKeys[0] 63 } 64 } 65 return "" 66 } 67 config := getKey(secretData) 68 if config == "" { 69 return 70 } 71 for key, val := range secretData { 72 splitKeys := strings.Split(key, "-") 73 if len(splitKeys) != 2 { 74 continue 75 } 76 values.PutValue(data, convert.ToString(val), config, splitKeys[1]) 77 } 78 }