Skip to content

Commit 3d559fa

Browse files
authored
fix: panic issue in get/ download pod logs api (#5342)
1 parent 682e4a1 commit 3d559fa

File tree

2 files changed

+25
-26
lines changed

2 files changed

+25
-26
lines changed

api/k8s/application/k8sApplicationRestHandler.go

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,7 @@ func (handler *K8sApplicationRestHandlerImpl) GetResource(w http.ResponseWriter,
177177
request.AppIdentifier = appIdentifier
178178
request.ClusterId = request.AppIdentifier.ClusterId
179179
if request.DeploymentType == bean2.HelmInstalledType {
180-
valid, err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest)
181-
if err != nil || !valid {
182-
handler.logger.Errorw("error in validating resource request", "err", err)
180+
if err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest); err != nil {
183181
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
184182
return
185183
}
@@ -388,9 +386,7 @@ func (handler *K8sApplicationRestHandlerImpl) UpdateResource(w http.ResponseWrit
388386
request.AppIdentifier = appIdentifier
389387
request.ClusterId = appIdentifier.ClusterId
390388
if request.DeploymentType == bean2.HelmAppType {
391-
valid, err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest)
392-
if err != nil || !valid {
393-
handler.logger.Errorw("error in validating resource request", "err", err)
389+
if err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest); err != nil {
394390
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
395391
return
396392
}
@@ -490,9 +486,7 @@ func (handler *K8sApplicationRestHandlerImpl) DeleteResource(w http.ResponseWrit
490486
request.AppIdentifier = appIdentifier
491487
request.ClusterId = appIdentifier.ClusterId
492488
if request.DeploymentType == bean2.HelmInstalledType {
493-
valid, err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest)
494-
if err != nil || !valid {
495-
handler.logger.Errorw("error in validating resource request", "err", err)
489+
if err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest); err != nil {
496490
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
497491
return
498492
}
@@ -586,9 +580,7 @@ func (handler *K8sApplicationRestHandlerImpl) ListEvents(w http.ResponseWriter,
586580
request.AppIdentifier = appIdentifier
587581
request.ClusterId = appIdentifier.ClusterId
588582
if request.DeploymentType == bean2.HelmInstalledType {
589-
valid, err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest)
590-
if err != nil || !valid {
591-
handler.logger.Errorw("error in validating resource request", "err", err)
583+
if err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest); err != nil {
592584
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
593585
return
594586
}
@@ -771,18 +763,8 @@ func generatePodLogsFilename(filename string) string {
771763
func (handler *K8sApplicationRestHandlerImpl) requestValidationAndRBAC(w http.ResponseWriter, r *http.Request, token string, request *k8s.ResourceRequestBean) {
772764
if request.AppIdentifier != nil {
773765
if request.DeploymentType == bean2.HelmInstalledType {
774-
valid, err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest)
775-
if err != nil || !valid {
776-
handler.logger.Errorw("error in validating resource request", "err", err, "request.AppIdentifier", request.AppIdentifier, "request.K8sRequest", request.K8sRequest)
777-
apiError := util2.ApiError{
778-
InternalMessage: "failed to validate the resource with error " + err.Error(),
779-
UserMessage: "Failed to validate resource",
780-
}
781-
if !valid {
782-
apiError.InternalMessage = "failed to validate the resource"
783-
apiError.UserMessage = "requested Pod or Container doesn't exist"
784-
}
785-
common.WriteJsonResp(w, &apiError, nil, http.StatusBadRequest)
766+
if err := handler.k8sApplicationService.ValidateResourceRequest(r.Context(), request.AppIdentifier, request.K8sRequest); err != nil {
767+
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
786768
return
787769
}
788770
} else if request.DeploymentType == bean2.ArgoInstalledType {

pkg/k8s/application/k8sApplicationService.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ type K8sApplicationService interface {
7070
ValidateTerminalRequestQuery(r *http.Request) (*terminal.TerminalSessionRequest, *k8s.ResourceRequestBean, error)
7171
DecodeDevtronAppId(applicationId string) (*bean3.DevtronAppIdentifier, error)
7272
GetPodLogs(ctx context.Context, request *k8s.ResourceRequestBean) (io.ReadCloser, error)
73-
ValidateResourceRequest(ctx context.Context, appIdentifier *bean.AppIdentifier, request *k8s2.K8sRequestBean) (bool, error)
73+
ValidateResourceRequest(ctx context.Context, appIdentifier *bean.AppIdentifier, request *k8s2.K8sRequestBean) error
7474
ValidateClusterResourceRequest(ctx context.Context, clusterResourceRequest *k8s.ResourceRequestBean,
7575
rbacCallback func(clusterName string, resourceIdentifier k8s2.ResourceIdentifier) bool) (bool, error)
7676
ValidateClusterResourceBean(ctx context.Context, clusterId int, manifest unstructured.Unstructured, gvk schema.GroupVersionKind, rbacCallback func(clusterName string, resourceIdentifier k8s2.ResourceIdentifier) bool) bool
@@ -442,7 +442,24 @@ func (impl *K8sApplicationServiceImpl) ValidateClusterResourceBean(ctx context.C
442442
return impl.validateResourceManifest(clusterBean.ClusterName, manifest, gvk, rbacCallback)
443443
}
444444

445-
func (impl *K8sApplicationServiceImpl) ValidateResourceRequest(ctx context.Context, appIdentifier *bean.AppIdentifier, request *k8s2.K8sRequestBean) (bool, error) {
445+
func (impl *K8sApplicationServiceImpl) ValidateResourceRequest(ctx context.Context, appIdentifier *bean.AppIdentifier, request *k8s2.K8sRequestBean) error {
446+
if valid, err := impl.validateResourceRequest(ctx, appIdentifier, request); err != nil || !valid {
447+
if !valid {
448+
impl.logger.Errorw("validation error in resource request", "request.AppIdentifier", appIdentifier, "request.K8sRequest", request)
449+
err = &util.ApiError{
450+
HttpStatusCode: http.StatusBadRequest,
451+
InternalMessage: "validation failed for the requested resource",
452+
UserMessage: fmt.Sprintf("resource %s: \"%s\" doesn't exist", request.ResourceIdentifier.GroupVersionKind.Kind, request.ResourceIdentifier.Name),
453+
}
454+
} else if err != nil {
455+
impl.logger.Errorw("error in validating resource request", "err", err, "request.AppIdentifier", appIdentifier, "request.K8sRequest", request)
456+
}
457+
return err
458+
}
459+
return nil
460+
}
461+
462+
func (impl *K8sApplicationServiceImpl) validateResourceRequest(ctx context.Context, appIdentifier *bean.AppIdentifier, request *k8s2.K8sRequestBean) (bool, error) {
446463
app, err := impl.helmAppService.GetApplicationDetail(ctx, appIdentifier)
447464
if err != nil {
448465
impl.logger.Errorw("error in getting app detail", "err", err, "appDetails", appIdentifier)

0 commit comments

Comments
 (0)