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  }