@@ -34,7 +34,9 @@ import (
34
34
util2 "github.com/devtron-labs/devtron/util"
35
35
"github.com/go-pg/pg"
36
36
"go.uber.org/zap"
37
+ "net/http"
37
38
"regexp"
39
+ "strconv"
38
40
"time"
39
41
)
40
42
@@ -504,12 +506,19 @@ func (impl ConfigMapServiceImpl) CSGlobalAddUpdate(configMapRequest *bean.Config
504
506
return nil , fmt .Errorf ("invalid request multiple config found for add or update" )
505
507
}
506
508
configData := configMapRequest .ConfigData [0 ]
509
+ // validating config/secret data at service layer since this func is consumed in multiple flows, hence preventing code duplication
507
510
valid , err := impl .validateConfigData (configData )
508
511
if err != nil && ! valid {
509
512
impl .logger .Errorw ("error in validating" , "error" , err )
510
513
return configMapRequest , err
511
514
}
512
515
516
+ valid , err = impl .validateConfigDataForSecretsOnly (configData )
517
+ if err != nil && ! valid {
518
+ impl .logger .Errorw ("error in validating secrets only data" , "error" , err )
519
+ return configMapRequest , err
520
+ }
521
+
513
522
valid , err = impl .validateExternalSecretChartCompatibility (configMapRequest .AppId , configMapRequest .EnvironmentId , configData )
514
523
if err != nil && ! valid {
515
524
impl .logger .Errorw ("error in validating" , "error" , err )
@@ -704,11 +713,17 @@ func (impl ConfigMapServiceImpl) CSEnvironmentAddUpdate(configMapRequest *bean.C
704
713
}
705
714
706
715
configData := configMapRequest .ConfigData [0 ]
716
+ // validating config/secret data at service layer since this func is consumed in multiple flows, hence preventing code duplication
707
717
valid , err := impl .validateConfigData (configData )
708
718
if err != nil && ! valid {
709
719
impl .logger .Errorw ("error in validating" , "error" , err )
710
720
return configMapRequest , err
711
721
}
722
+ valid , err = impl .validateConfigDataForSecretsOnly (configData )
723
+ if err != nil && ! valid {
724
+ impl .logger .Errorw ("error in validating secrets only data" , "error" , err )
725
+ return configMapRequest , err
726
+ }
712
727
713
728
valid , err = impl .validateExternalSecretChartCompatibility (configMapRequest .AppId , configMapRequest .EnvironmentId , configData )
714
729
if err != nil && ! valid {
@@ -795,13 +810,6 @@ func (impl ConfigMapServiceImpl) CSEnvironmentAddUpdate(configMapRequest *bean.C
795
810
}
796
811
configMapRequest .Id = configMap .Id
797
812
}
798
- //VARIABLE_MAPPING_UPDATE
799
- //sl := bean.SecretsList{}
800
- //data, err := sl.GetTransformedDataForSecretList(model.SecretData, util2.DecodeSecret)
801
- //if err != nil {
802
- // return nil, err
803
- //}
804
- //err = impl.extractAndMapVariables(data, model.Id, repository5.EntityTypeSecretEnvLevel, configMapRequest.UserId)
805
813
err = impl .scopedVariableManager .CreateVariableMappingsForSecretEnv (model )
806
814
if err != nil {
807
815
return nil , err
@@ -1545,6 +1553,26 @@ func (impl ConfigMapServiceImpl) validateConfigData(configData *bean.ConfigData)
1545
1553
return true , nil
1546
1554
}
1547
1555
1556
+ func (impl ConfigMapServiceImpl ) validateConfigDataForSecretsOnly (configData * bean.ConfigData ) (bool , error ) {
1557
+
1558
+ // check encoding in base64 for secret data
1559
+ if len (configData .Data ) > 0 {
1560
+ dataMap := make (map [string ]string )
1561
+ err := json .Unmarshal (configData .Data , & dataMap )
1562
+ if err != nil {
1563
+ impl .logger .Errorw ("error while unmarshalling secret data " , "error" , err )
1564
+ return false , err
1565
+ }
1566
+ err = util2 .ValidateEncodedDataByDecoding (dataMap )
1567
+ if err != nil {
1568
+ impl .logger .Errorw ("error in decoding secret data" , "error" , err )
1569
+ return false , util .NewApiError ().WithHttpStatusCode (http .StatusUnprocessableEntity ).WithCode (strconv .Itoa (http .StatusUnprocessableEntity )).
1570
+ WithUserMessage ("error in decoding data, make sure the secret data is encoded properly" )
1571
+ }
1572
+ }
1573
+ return true , nil
1574
+ }
1575
+
1548
1576
func (impl ConfigMapServiceImpl ) updateConfigData (configData * bean.ConfigData , syncRequest * bean.BulkPatchRequest ) (* bean.ConfigData , error ) {
1549
1577
dataMap := make (map [string ]string )
1550
1578
var updatedData json.RawMessage
0 commit comments