Skip to content

Commit a6956ed

Browse files
authored
Merge pull request #6220 from devtron-labs/copy-image-plugin-panic
fix: Copy image plugin panic
2 parents cace927 + cfab5b4 commit a6956ed

File tree

4 files changed

+32
-8
lines changed

4 files changed

+32
-8
lines changed

pkg/app/AppListingViewBuilder.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package app
1818

1919
import (
20+
"errors"
2021
"github.com/devtron-labs/devtron/api/bean"
2122
"github.com/devtron-labs/devtron/internal/sql/repository/helper"
2223
"go.uber.org/zap"
@@ -60,12 +61,16 @@ func (impl *AppListingViewBuilderImpl) BuildView(fetchAppListingRequest FetchApp
6061

6162
var appContainersResponses []*bean.AppContainer
6263
for k, v := range filteredAppEnvMap {
63-
appId, err := strconv.Atoi(strings.Split(k, "_")[0])
64+
appIdAndName := strings.Split(k, "_")
65+
if len(appIdAndName) != 2 {
66+
return []*bean.AppContainer{}, errors.New("invalid format for app id and name. It should be in format <appId>_<appName>")
67+
}
68+
appId, err := strconv.Atoi(appIdAndName[0])
6469
if err != nil {
6570
impl.Logger.Error("err", err)
6671
return []*bean.AppContainer{}, nil
6772
}
68-
appName := strings.Split(k, "_")[1]
73+
appName := appIdAndName[1]
6974
defaultEnv := bean.AppEnvironmentContainer{}
7075
projectId := 0
7176
for _, env := range v {

pkg/auth/user/UserService.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1244,7 +1244,11 @@ func (impl *UserServiceImpl) GetUserByToken(context context.Context, token strin
12441244
}
12451245

12461246
func (impl *UserServiceImpl) CheckIfTokenIsValid(email string, version string) error {
1247-
tokenName := userHelper.ExtractTokenNameFromEmail(email)
1247+
tokenName, err := userHelper.ExtractTokenNameFromEmail(email)
1248+
if err != nil {
1249+
impl.logger.Errorw("error in extracting token name from email", "email", email, "error", err)
1250+
return err
1251+
}
12481252
embeddedTokenVersion, _ := strconv.Atoi(version)
12491253
isProvidedTokenValid, err := impl.userRepository.CheckIfTokenExistsByTokenNameAndVersion(tokenName, embeddedTokenVersion)
12501254
if err != nil || !isProvidedTokenValid {

pkg/auth/user/helper/helper.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package helper
1818

1919
import (
20+
"errors"
2021
"fmt"
2122
bean2 "github.com/devtron-labs/devtron/api/bean"
2223
"github.com/devtron-labs/devtron/internal/util"
@@ -65,8 +66,12 @@ func CheckIfUserIdsExists(userIds []int32) error {
6566
return nil
6667
}
6768

68-
func ExtractTokenNameFromEmail(email string) string {
69-
return strings.Split(email, ":")[1]
69+
func ExtractTokenNameFromEmail(email string) (string, error) {
70+
splitData := strings.Split(email, ":")
71+
if splitData == nil || len(splitData) != 2 {
72+
return "", errors.New("invalid apitoken format")
73+
}
74+
return splitData[1], nil
7075
}
7176

7277
func CreateErrorMessageForUserRoleGroups(restrictedGroups []bean2.RestrictedGroup) (string, string) {

pkg/pipeline/pipelineStageVariableParser.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,14 @@ func (impl *PluginInputVariableParserImpl) HandleCopyContainerImagePluginInputVa
9292
dockerImageTag = pluginTriggerImageSplit[len(pluginTriggerImageSplit)-1]
9393
}
9494

95-
registryRepoMapping := impl.getRegistryRepoMapping(DestinationInfo)
95+
registryRepoMapping, err := impl.getRegistryRepoMapping(DestinationInfo)
96+
if err != nil {
97+
impl.logger.Errorw("error in getting registry repo mapping", "DestinationInfo", DestinationInfo, "err", err)
98+
return nil, nil, err
99+
}
96100
registryCredentials, err = impl.getRegistryDetails(registryRepoMapping, sourceImageDockerRegistry)
97101
if err != nil {
102+
impl.logger.Errorw("error in getting registry details", "err", err)
98103
return nil, nil, err
99104
}
100105
registryDestinationImageMap = impl.getRegistryDestinationImageMapping(registryRepoMapping, dockerImageTag, registryCredentials)
@@ -108,7 +113,7 @@ func (impl *PluginInputVariableParserImpl) HandleCopyContainerImagePluginInputVa
108113
return registryDestinationImageMap, registryCredentials, nil
109114
}
110115

111-
func (impl *PluginInputVariableParserImpl) getRegistryRepoMapping(destinationInfo string) map[string][]string {
116+
func (impl *PluginInputVariableParserImpl) getRegistryRepoMapping(destinationInfo string) (map[string][]string, error) {
112117
/*
113118
creating map with registry as key and list of repositories in that registry where we need to copy image
114119
destinationInfo format (each registry detail is separated by new line) :
@@ -119,6 +124,11 @@ func (impl *PluginInputVariableParserImpl) getRegistryRepoMapping(destinationInf
119124
destinationRegistryRepoDetails := strings.Split(destinationInfo, "\n")
120125
for _, detail := range destinationRegistryRepoDetails {
121126
registryRepoSplit := strings.Split(detail, "|")
127+
if len(registryRepoSplit) != 2 {
128+
impl.logger.Errorw("invalid destination info format", "destinationInfo", destinationInfo)
129+
// skipping for invalid format
130+
return destinationRegistryRepositoryMap, errors.New("invalid destination info format. Please provide it in <registry-1> | <repo1>,<repo2>")
131+
}
122132
registryName := strings.Trim(registryRepoSplit[0], EMPTY_STRING)
123133
repositoryValuesSplit := strings.Split(registryRepoSplit[1], ",")
124134
var repositories []string
@@ -128,7 +138,7 @@ func (impl *PluginInputVariableParserImpl) getRegistryRepoMapping(destinationInf
128138
}
129139
destinationRegistryRepositoryMap[registryName] = repositories
130140
}
131-
return destinationRegistryRepositoryMap
141+
return destinationRegistryRepositoryMap, nil
132142
}
133143

134144
func (impl *PluginInputVariableParserImpl) getRegistryDetails(destinationRegistryRepositoryMap map[string][]string, sourceRegistry string) (map[string]bean2.RegistryCredentials, error) {

0 commit comments

Comments
 (0)