github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/config/destination_config.go (about) 1 package config 2 3 import ( 4 "encoding/base64" 5 6 "github.com/kyma-incubator/compass/components/director/pkg/oauth" 7 "github.com/pkg/errors" 8 "github.com/tidwall/gjson" 9 ) 10 11 // DestinationsConfig destination service configuration 12 type DestinationsConfig struct { 13 InstanceClientIDPath string `envconfig:"APP_DESTINATION_INSTANCE_CLIENT_ID_PATH,default=clientid"` 14 InstanceClientSecretPath string `envconfig:"APP_DESTINATION_INSTANCE_CLIENT_SECRET_PATH,default=clientsecret"` 15 InstanceURLPath string `envconfig:"APP_DESTINATION_INSTANCE_URL_PATH,default=uri"` 16 InstanceTokenURLPath string `envconfig:"APP_DESTINATION_INSTANCE_TOKEN_URL_PATH,default=certurl"` 17 InstanceCertPath string `envconfig:"APP_DESTINATION_INSTANCE_X509_CERT_PATH,default=certificate"` 18 InstanceKeyPath string `envconfig:"APP_DESTINATION_INSTANCE_X509_KEY_PATH,default=key"` 19 DestinationSecretPath string `envconfig:"APP_DESTINATION_SECRET_PATH"` 20 RegionToInstanceConfig map[string]InstanceConfig `envconfig:"-"` 21 OAuthMode oauth.AuthMode `envconfig:"APP_DESTINATION_OAUTH_MODE,default=oauth-mtls"` 22 } 23 24 // MapInstanceConfigs creates region to destination configuration map 25 func (c *DestinationsConfig) MapInstanceConfigs() error { 26 secretData, err := ReadConfigFile(c.DestinationSecretPath) 27 if err != nil { 28 return errors.Wrapf(err, "while getting destinations secret") 29 } 30 31 bindingsMap, err := ParseConfigToJSONMap(secretData) 32 if err != nil { 33 return err 34 } 35 36 c.RegionToInstanceConfig = make(map[string]InstanceConfig) 37 for region, config := range bindingsMap { 38 i := InstanceConfig{ 39 ClientID: gjson.Get(config.String(), c.InstanceClientIDPath).String(), 40 ClientSecret: gjson.Get(config.String(), c.InstanceClientSecretPath).String(), 41 URL: gjson.Get(config.String(), c.InstanceURLPath).String(), 42 TokenURL: gjson.Get(config.String(), c.InstanceTokenURLPath).String(), 43 Cert: gjson.Get(config.String(), c.InstanceCertPath).String(), 44 Key: gjson.Get(config.String(), c.InstanceKeyPath).String(), 45 } 46 47 if i.Cert != "" { 48 decodeCert, err := base64.StdEncoding.DecodeString(i.Cert) 49 if err != nil { 50 return errors.Wrap(err, "could not base64 decode client certificate") 51 } 52 i.Cert = string(decodeCert) 53 } 54 55 if i.Key != "" { 56 decodeKey, err := base64.StdEncoding.DecodeString(i.Key) 57 if err != nil { 58 return errors.Wrap(err, "could not base64 decode client certificate") 59 } 60 i.Key = string(decodeKey) 61 } 62 63 if err := i.validate(c.OAuthMode); err != nil { 64 c.RegionToInstanceConfig = nil 65 return errors.Wrapf(err, "while validating instance for region: %q", region) 66 } 67 c.RegionToInstanceConfig[region] = i 68 } 69 70 return nil 71 }