diff --git a/pkg/app/AppListingViewBuilder.go b/pkg/app/AppListingViewBuilder.go index c973d86894..0209e475ba 100644 --- a/pkg/app/AppListingViewBuilder.go +++ b/pkg/app/AppListingViewBuilder.go @@ -17,6 +17,7 @@ package app import ( + "errors" "github.com/devtron-labs/devtron/api/bean" "github.com/devtron-labs/devtron/internal/sql/repository/helper" "go.uber.org/zap" @@ -60,12 +61,16 @@ func (impl *AppListingViewBuilderImpl) BuildView(fetchAppListingRequest FetchApp var appContainersResponses []*bean.AppContainer for k, v := range filteredAppEnvMap { - appId, err := strconv.Atoi(strings.Split(k, "_")[0]) + appIdAndName := strings.Split(k, "_") + if len(appIdAndName) != 2 { + return []*bean.AppContainer{}, errors.New("invalid format for app id and name. It should be in format _") + } + appId, err := strconv.Atoi(appIdAndName[0]) if err != nil { impl.Logger.Error("err", err) return []*bean.AppContainer{}, nil } - appName := strings.Split(k, "_")[1] + appName := appIdAndName[1] defaultEnv := bean.AppEnvironmentContainer{} projectId := 0 for _, env := range v { diff --git a/pkg/auth/user/UserService.go b/pkg/auth/user/UserService.go index ab215e10e6..d6ff19aed5 100644 --- a/pkg/auth/user/UserService.go +++ b/pkg/auth/user/UserService.go @@ -1244,7 +1244,11 @@ func (impl *UserServiceImpl) GetUserByToken(context context.Context, token strin } func (impl *UserServiceImpl) CheckIfTokenIsValid(email string, version string) error { - tokenName := userHelper.ExtractTokenNameFromEmail(email) + tokenName, err := userHelper.ExtractTokenNameFromEmail(email) + if err != nil { + impl.logger.Errorw("error in extracting token name from email", "email", email, "error", err) + return err + } embeddedTokenVersion, _ := strconv.Atoi(version) isProvidedTokenValid, err := impl.userRepository.CheckIfTokenExistsByTokenNameAndVersion(tokenName, embeddedTokenVersion) if err != nil || !isProvidedTokenValid { diff --git a/pkg/auth/user/helper/helper.go b/pkg/auth/user/helper/helper.go index 06e0810bd2..df2a353197 100644 --- a/pkg/auth/user/helper/helper.go +++ b/pkg/auth/user/helper/helper.go @@ -17,6 +17,7 @@ package helper import ( + "errors" "fmt" bean2 "github.com/devtron-labs/devtron/api/bean" "github.com/devtron-labs/devtron/internal/util" @@ -65,8 +66,12 @@ func CheckIfUserIdsExists(userIds []int32) error { return nil } -func ExtractTokenNameFromEmail(email string) string { - return strings.Split(email, ":")[1] +func ExtractTokenNameFromEmail(email string) (string, error) { + splitData := strings.Split(email, ":") + if splitData == nil || len(splitData) != 2 { + return "", errors.New("invalid apitoken format") + } + return splitData[1], nil } func CreateErrorMessageForUserRoleGroups(restrictedGroups []bean2.RestrictedGroup) (string, string) { diff --git a/pkg/pipeline/pipelineStageVariableParser.go b/pkg/pipeline/pipelineStageVariableParser.go index ff90265e6e..b97517d30b 100644 --- a/pkg/pipeline/pipelineStageVariableParser.go +++ b/pkg/pipeline/pipelineStageVariableParser.go @@ -92,9 +92,14 @@ func (impl *PluginInputVariableParserImpl) HandleCopyContainerImagePluginInputVa dockerImageTag = pluginTriggerImageSplit[len(pluginTriggerImageSplit)-1] } - registryRepoMapping := impl.getRegistryRepoMapping(DestinationInfo) + registryRepoMapping, err := impl.getRegistryRepoMapping(DestinationInfo) + if err != nil { + impl.logger.Errorw("error in getting registry repo mapping", "DestinationInfo", DestinationInfo, "err", err) + return nil, nil, err + } registryCredentials, err = impl.getRegistryDetails(registryRepoMapping, sourceImageDockerRegistry) if err != nil { + impl.logger.Errorw("error in getting registry details", "err", err) return nil, nil, err } registryDestinationImageMap = impl.getRegistryDestinationImageMapping(registryRepoMapping, dockerImageTag, registryCredentials) @@ -108,7 +113,7 @@ func (impl *PluginInputVariableParserImpl) HandleCopyContainerImagePluginInputVa return registryDestinationImageMap, registryCredentials, nil } -func (impl *PluginInputVariableParserImpl) getRegistryRepoMapping(destinationInfo string) map[string][]string { +func (impl *PluginInputVariableParserImpl) getRegistryRepoMapping(destinationInfo string) (map[string][]string, error) { /* creating map with registry as key and list of repositories in that registry where we need to copy image destinationInfo format (each registry detail is separated by new line) : @@ -119,6 +124,11 @@ func (impl *PluginInputVariableParserImpl) getRegistryRepoMapping(destinationInf destinationRegistryRepoDetails := strings.Split(destinationInfo, "\n") for _, detail := range destinationRegistryRepoDetails { registryRepoSplit := strings.Split(detail, "|") + if len(registryRepoSplit) != 2 { + impl.logger.Errorw("invalid destination info format", "destinationInfo", destinationInfo) + // skipping for invalid format + return destinationRegistryRepositoryMap, errors.New("invalid destination info format. Please provide it in | ,") + } registryName := strings.Trim(registryRepoSplit[0], EMPTY_STRING) repositoryValuesSplit := strings.Split(registryRepoSplit[1], ",") var repositories []string @@ -128,7 +138,7 @@ func (impl *PluginInputVariableParserImpl) getRegistryRepoMapping(destinationInf } destinationRegistryRepositoryMap[registryName] = repositories } - return destinationRegistryRepositoryMap + return destinationRegistryRepositoryMap, nil } func (impl *PluginInputVariableParserImpl) getRegistryDetails(destinationRegistryRepositoryMap map[string][]string, sourceRegistry string) (map[string]bean2.RegistryCredentials, error) {