Skip to content

Commit 091aad0

Browse files
committed
Merge branch 'develop' into fix-dependabot-security-advisory
# Conflicts: # go.mod # go.sum # vendor/modules.txt
2 parents 71eec85 + ef11462 commit 091aad0

9 files changed

Lines changed: 520 additions & 46 deletions

api/restHandler/app/appList/AppListingRestHandler.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import (
5656
"github.com/gorilla/mux"
5757
"go.opentelemetry.io/otel"
5858
"go.uber.org/zap"
59+
"gopkg.in/go-playground/validator.v9"
5960
"net/http"
6061
"strconv"
6162
"time"
@@ -98,6 +99,7 @@ type AppListingRestHandlerImpl struct {
9899
k8sApplicationService k8sApplication.K8sApplicationService
99100
deploymentConfigService common2.DeploymentConfigService
100101
resourceTreeService resourceTree.Service
102+
validator *validator.Validate
101103
}
102104

103105
type AppStatus struct {
@@ -141,6 +143,7 @@ func NewAppListingRestHandlerImpl(appListingService app.AppListingService,
141143
k8sApplicationService: k8sApplicationService,
142144
deploymentConfigService: deploymentConfigService,
143145
resourceTreeService: resourceTreeService,
146+
validator: validator.New(),
144147
}
145148
return appListingHandler
146149
}
@@ -276,6 +279,28 @@ func (handler AppListingRestHandlerImpl) FetchJobOverviewCiPipelines(w http.Resp
276279
common.WriteJsonResp(w, err, jobCi, http.StatusOK)
277280
}
278281

282+
// validateFetchAppListingRequest performs request and business-rule validation.
283+
func (handler AppListingRestHandlerImpl) validateFetchAppListingRequest(w http.ResponseWriter, r *http.Request, fetchAppListingRequest *app.FetchAppListingRequest) bool {
284+
err := handler.validator.Struct(*fetchAppListingRequest)
285+
if err != nil {
286+
handler.logger.Errorw("validation err, FetchAppsByEnvironment", "err", err, "payload", fetchAppListingRequest)
287+
common.HandleValidationErrors(w, r, err)
288+
return false
289+
}
290+
err = handler.appListingService.ValidateTagFilters(fetchAppListingRequest.TagFilters)
291+
if err != nil {
292+
handler.logger.Errorw("request err, ValidateTagFilters", "err", err, "payload", fetchAppListingRequest.TagFilters)
293+
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
294+
return false
295+
}
296+
return true
297+
}
298+
299+
// normalizeFetchAppListingRequest applies request normalization after validation.
300+
func (handler AppListingRestHandlerImpl) normalizeFetchAppListingRequest(fetchAppListingRequest *app.FetchAppListingRequest) {
301+
fetchAppListingRequest.TagFilters = handler.appListingService.NormalizeTagFilters(fetchAppListingRequest.TagFilters)
302+
}
303+
279304
func (handler AppListingRestHandlerImpl) FetchAppsByEnvironmentV2(w http.ResponseWriter, r *http.Request) {
280305
//Allow CORS here By * or specific origin
281306
util3.SetupCorsOriginHeader(&w)
@@ -331,6 +356,10 @@ func (handler AppListingRestHandlerImpl) FetchAppsByEnvironmentV2(w http.Respons
331356
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
332357
return
333358
}
359+
if !handler.validateFetchAppListingRequest(w, r, &fetchAppListingRequest) {
360+
return
361+
}
362+
handler.normalizeFetchAppListingRequest(&fetchAppListingRequest)
334363
newCtx, span = otel.Tracer("fetchAppListingRequest").Start(newCtx, "GetNamespaceClusterMapping")
335364
_, _, err = fetchAppListingRequest.GetNamespaceClusterMapping()
336365
span.End()

internal/sql/repository/AppListingRepository.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,14 @@ func (impl *AppListingRepositoryImpl) FetchAppsByEnvironmentV2(appListingFilter
217217

218218
if string(appListingFilter.SortBy) == helper.LastDeployedSortBy {
219219

220-
query, queryParams := impl.appListingRepositoryQueryBuilder.GetAppIdsQueryWithPaginationForLastDeployedSearch(appListingFilter)
220+
query, queryParams, err := impl.appListingRepositoryQueryBuilder.GetAppIdsQueryWithPaginationForLastDeployedSearch(appListingFilter)
221+
if err != nil {
222+
impl.Logger.Errorw("error in building appIds query with appList filter", "err", err, "filter", appListingFilter)
223+
return appEnvArr, appsSize, err
224+
}
221225
impl.Logger.Debug("GetAppIdsQueryWithPaginationForLastDeployedSearch query ", query)
222226
start := time.Now()
223-
_, err := impl.dbConnection.Query(&lastDeployedTimeDTO, query, queryParams...)
227+
_, err = impl.dbConnection.Query(&lastDeployedTimeDTO, query, queryParams...)
224228
middleware.AppListingDuration.WithLabelValues("getAppIdsQueryWithPaginationForLastDeployedSearch", "devtron").Observe(time.Since(start).Seconds())
225229
if err != nil || len(lastDeployedTimeDTO) == 0 {
226230
if err != nil {
@@ -235,7 +239,11 @@ func (impl *AppListingRepositoryImpl) FetchAppsByEnvironmentV2(appListingFilter
235239
appIdsFound[i] = obj.AppId
236240
}
237241
appListingFilter.AppIds = appIdsFound
238-
appContainerQuery, appContainerQueryParams := impl.appListingRepositoryQueryBuilder.GetQueryForAppEnvContainers(appListingFilter)
242+
appContainerQuery, appContainerQueryParams, err := impl.appListingRepositoryQueryBuilder.GetQueryForAppEnvContainers(appListingFilter)
243+
if err != nil {
244+
impl.Logger.Errorw("error in building appEnv query with appList filter", "err", err, "filter", appListingFilter)
245+
return appEnvArr, appsSize, err
246+
}
239247
impl.Logger.Debug("GetQueryForAppEnvContainers query ", query)
240248
_, err = impl.dbConnection.Query(&appEnvContainer, appContainerQuery, appContainerQueryParams...)
241249
if err != nil {
@@ -247,10 +255,14 @@ func (impl *AppListingRepositoryImpl) FetchAppsByEnvironmentV2(appListingFilter
247255

248256
// to get all the appIds in appEnvs allowed for user and filtered by the appListing filter and sorted by name
249257
appIdCountDtos := make([]*AppView.AppEnvironmentContainer, 0)
250-
appIdCountQuery, appIdCountQueryParams := impl.appListingRepositoryQueryBuilder.GetAppIdsQueryWithPaginationForAppNameSearch(appListingFilter)
258+
appIdCountQuery, appIdCountQueryParams, appsErr := impl.appListingRepositoryQueryBuilder.GetAppIdsQueryWithPaginationForAppNameSearch(appListingFilter)
259+
if appsErr != nil {
260+
impl.Logger.Errorw("error in building appIds query with appList filter", "err", appsErr, "filter", appListingFilter)
261+
return appEnvContainer, appsSize, appsErr
262+
}
251263
impl.Logger.Debug("GetAppIdsQueryWithPaginationForAppNameSearch query ", appIdCountQuery)
252264
start := time.Now()
253-
_, appsErr := impl.dbConnection.Query(&appIdCountDtos, appIdCountQuery, appIdCountQueryParams...)
265+
_, appsErr = impl.dbConnection.Query(&appIdCountDtos, appIdCountQuery, appIdCountQueryParams...)
254266
middleware.AppListingDuration.WithLabelValues("getAppIdsQueryWithPaginationForAppNameSearch", "devtron").Observe(time.Since(start).Seconds())
255267
if appsErr != nil || len(appIdCountDtos) == 0 {
256268
if appsErr != nil {
@@ -268,7 +280,11 @@ func (impl *AppListingRepositoryImpl) FetchAppsByEnvironmentV2(appListingFilter
268280
appListingFilter.AppIds = uniqueAppIds
269281
// set appids required for this page in the filter and get the appEnv containers of these apps
270282
appListingFilter.AppIds = uniqueAppIds
271-
appsEnvquery, appsEnvQueryParams := impl.appListingRepositoryQueryBuilder.GetQueryForAppEnvContainers(appListingFilter)
283+
appsEnvquery, appsEnvQueryParams, appsErr := impl.appListingRepositoryQueryBuilder.GetQueryForAppEnvContainers(appListingFilter)
284+
if appsErr != nil {
285+
impl.Logger.Errorw("error in building appEnv query with appList filter", "err", appsErr, "filter", appListingFilter)
286+
return appEnvContainer, appsSize, appsErr
287+
}
272288
impl.Logger.Debug("GetQueryForAppEnvContainers query: ", appsEnvquery)
273289
start = time.Now()
274290
_, appsErr = impl.dbConnection.Query(&appEnvContainer, appsEnvquery, appsEnvQueryParams...)

0 commit comments

Comments
 (0)