Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions api/appStore/deployment/AppStoreDeploymentRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -470,13 +470,13 @@ func (handler AppStoreDeploymentRestHandlerImpl) UpdateInstalledApp(w http.Respo
if util2.IsBaseStack() || util2.IsHelmApp(request.AppOfferingMode) {
ctx = context.WithValue(r.Context(), "token", token)
} else {
acdToken, err := handler.argoUserService.GetLatestDevtronArgoCdUserToken()
if err != nil {
handler.Logger.Errorw("error in getting acd token", "err", err)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
ctx = context.WithValue(r.Context(), "token", acdToken)
//acdToken, err := handler.argoUserService.GetLatestDevtronArgoCdUserToken()
//if err != nil {
// handler.Logger.Errorw("error in getting acd token", "err", err)
// common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
// return
//}
ctx = context.WithValue(r.Context(), "token", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTIzNTM3MDYsImp0aSI6IjcwNDIzOTRjLTQwNDktNDVjMi05MWE0LTkxZDViYjEwNDJmNCIsImlhdCI6MTY5MjI2NzMwNiwiaXNzIjoiYXJnb2NkIiwibmJmIjoxNjkyMjY3MzA2LCJzdWIiOiJhZG1pbiJ9.gSWm-GbKY4I1Svg5xOGsrVRGSAAvdBC7S8iIlomfL9I")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert this change

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed 👍

}
triggeredAt := time.Now()
res, err := handler.appStoreDeploymentService.UpdateInstalledApp(ctx, &request)
Expand Down
70 changes: 53 additions & 17 deletions api/deployment/DeploymentConfigRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,41 @@ import (
"encoding/json"
"fmt"
"github.com/devtron-labs/devtron/api/restHandler/common"
"github.com/devtron-labs/devtron/internal/util"
"github.com/devtron-labs/devtron/pkg/chart"
chartRepoRepository "github.com/devtron-labs/devtron/pkg/chartRepo/repository"
"github.com/devtron-labs/devtron/pkg/sql"
"github.com/devtron-labs/devtron/pkg/user"
"github.com/devtron-labs/devtron/pkg/user/casbin"
"github.com/gorilla/mux"
"github.com/juju/errors"
"go.uber.org/zap"
"gopkg.in/go-playground/validator.v9"
"io/ioutil"
"net/http"
"os"
"path/filepath"
"strconv"
"strings"
"time"
)

type DeploymentConfigRestHandler interface {
CreateChartFromFile(w http.ResponseWriter, r *http.Request)
SaveChart(w http.ResponseWriter, r *http.Request)
DownloadChart(w http.ResponseWriter, r *http.Request)
GetUploadedCharts(w http.ResponseWriter, r *http.Request)
}

type DeploymentConfigRestHandlerImpl struct {
Logger *zap.SugaredLogger
userAuthService user.UserService
enforcer casbin.Enforcer
validator *validator.Validate
refChartDir chartRepoRepository.RefChartDir
chartService chart.ChartService
chartRefRepository chartRepoRepository.ChartRefRepository
Logger *zap.SugaredLogger
userAuthService user.UserService
enforcer casbin.Enforcer
validator *validator.Validate
refChartDir chartRepoRepository.RefChartDir
chartService chart.ChartService
chartRefRepository chartRepoRepository.ChartRefRepository
chartTemplateService util.ChartTemplateService
}

type DeploymentChartInfo struct {
Expand All @@ -46,15 +51,16 @@ type DeploymentChartInfo struct {
}

func NewDeploymentConfigRestHandlerImpl(Logger *zap.SugaredLogger, userAuthService user.UserService, enforcer casbin.Enforcer, validator *validator.Validate,
refChartDir chartRepoRepository.RefChartDir, chartService chart.ChartService, chartRefRepository chartRepoRepository.ChartRefRepository) *DeploymentConfigRestHandlerImpl {
refChartDir chartRepoRepository.RefChartDir, chartService chart.ChartService, chartTemplateService util.ChartTemplateService, chartRefRepository chartRepoRepository.ChartRefRepository) *DeploymentConfigRestHandlerImpl {
return &DeploymentConfigRestHandlerImpl{
Logger: Logger,
userAuthService: userAuthService,
enforcer: enforcer,
validator: validator,
refChartDir: refChartDir,
chartService: chartService,
chartRefRepository: chartRefRepository,
Logger: Logger,
userAuthService: userAuthService,
enforcer: enforcer,
validator: validator,
refChartDir: refChartDir,
chartService: chartService,
chartTemplateService: chartTemplateService,
chartRefRepository: chartRefRepository,
}
}

Expand Down Expand Up @@ -107,7 +113,7 @@ func (handler *DeploymentConfigRestHandlerImpl) CreateChartFromFile(w http.Respo
handler.Logger.Errorw("error in deleting temp dir ", "err", err1)
}
}
if err.Error() == "Chart exists already, try uploading another chart" {
if err.Error() == chart.CHART_ALREADY_EXISTS_INTERNAL_ERROR || err.Error() == chart.CHART_NAME_RESERVED_INTERNAL_ERROR {
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
return
}
Expand Down Expand Up @@ -210,6 +216,36 @@ func (handler *DeploymentConfigRestHandlerImpl) SaveChart(w http.ResponseWriter,

}

func (handler *DeploymentConfigRestHandlerImpl) DownloadChart(w http.ResponseWriter, r *http.Request) {
userId, err := handler.userAuthService.GetLoggedInUser(r)
if userId == 0 || err != nil {
common.WriteJsonResp(w, err, nil, http.StatusUnauthorized)
return
}

token := r.Header.Get("token")
if ok := handler.enforcer.Enforce(token, casbin.ResourceGlobal, casbin.ActionDelete, "*"); !ok {
common.WriteJsonResp(w, errors.New("unauthorized"), nil, http.StatusForbidden)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correct rbac action

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have used ActionUpdate

return
}

vars := mux.Vars(r)
chartRefId, err := strconv.Atoi(vars["chartRefId"])
if err != nil {
handler.Logger.Errorw("error in parsing chartRefId", "chartRefId", chartRefId, "err", err)
common.WriteJsonResp(w, fmt.Errorf("error in parsing chartRefId : %s must be integer", chartRefId), nil, http.StatusBadRequest)
return
}
manifestByteArr, err := handler.chartService.DownloadCustomChart(chartRefId)
if err != nil {
handler.Logger.Errorw("error in converting chart to bytes", "err", err)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
common.WriteOctetStreamResp(w, r, manifestByteArr, "")
return
}

func (handler *DeploymentConfigRestHandlerImpl) GetUploadedCharts(w http.ResponseWriter, r *http.Request) {

userId, err := handler.userAuthService.GetLoggedInUser(r)
Expand All @@ -224,7 +260,7 @@ func (handler *DeploymentConfigRestHandlerImpl) GetUploadedCharts(w http.Respons
return
}

charts, err := handler.chartService.FetchChartInfoByFlag(true)
charts, err := handler.chartService.FetchCustomChartsInfo()
if err != nil {
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
Expand Down
2 changes: 2 additions & 0 deletions api/deployment/DeploymentConfigRouter.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ func (router DeploymentConfigRouterImpl) Init(configRouter *mux.Router) {
HandlerFunc(router.deploymentRestHandler.CreateChartFromFile).Methods("POST")
configRouter.Path("/upload").
HandlerFunc(router.deploymentRestHandler.SaveChart).Methods("PUT")
configRouter.Path("/download/{chartRefId}").
HandlerFunc(router.deploymentRestHandler.DownloadChart).Methods("GET")
configRouter.Path("/fetch").
HandlerFunc(router.deploymentRestHandler.GetUploadedCharts).Methods("GET")
}
4 changes: 4 additions & 0 deletions api/restHandler/common/ApiResponseErrorMapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ const (
InternalServerError = "E103"
ResourceNotFound = "E104"
UnknownError = "E105"
CONTENT_DISPOSITION = "Content-Disposition"
CONTENT_TYPE = "Content-Type"
CONTENT_LENGTH = "Content-Length"
APPLICATION_JSON = "application/json"
)

var errorMessage = map[string]string{
Expand Down
12 changes: 11 additions & 1 deletion api/restHandler/common/ApiResponseWriter.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,20 @@ func WriteApiJsonResponseStructured(w http.ResponseWriter, apiResponse *ApiRespo
util.GetLogger().Error("error in marshaling api response object", err)
statusCode = 500
}
w.Header().Set("Content-Type", "application/json")
w.Header().Set(CONTENT_TYPE, APPLICATION_JSON)
w.WriteHeader(statusCode)
_, err = w.Write(apiResponseByteArr)
if err != nil {
util.GetLogger().Error(err)
}
}

func WriteOctetStreamResp(w http.ResponseWriter, r *http.Request, byteArr []byte, defaultFilename string) {
w.WriteHeader(http.StatusOK)
if defaultFilename != "" {
w.Header().Set(CONTENT_DISPOSITION, "attachment; filename="+defaultFilename)
}
w.Header().Set(CONTENT_TYPE, "application/octet-stream")
w.Header().Set(CONTENT_LENGTH, r.Header.Get(CONTENT_LENGTH))
w.Write(byteArr)
}
10 changes: 5 additions & 5 deletions api/restHandler/common/apiError.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import (
"strconv"
)

//use of writeJsonRespStructured is preferable. it api exists due to historical reason
// use of writeJsonRespStructured is preferable. it api exists due to historical reason
// err.message is used as internal message for ApiError object in resp
func WriteJsonResp(w http.ResponseWriter, err error, respBody interface{}, status int) {
response := Response{}
Expand Down Expand Up @@ -117,7 +117,7 @@ func WriteJsonResp(w http.ResponseWriter, err error, respBody interface{}, statu
if status > 299 || err != nil {
util.GetLogger().Infow("ERROR RES", "TYPE", "API-ERROR", "RES", response.Code, "ERROR-MSG", response.Errors, "err", err)
}
w.Header().Set("Content-Type", "application/json")
w.Header().Set(CONTENT_TYPE, APPLICATION_JSON)
w.WriteHeader(status)
_, err = w.Write(b)
if err != nil {
Expand All @@ -126,7 +126,7 @@ func WriteJsonResp(w http.ResponseWriter, err error, respBody interface{}, statu

}

//use this method when we have specific api error to be conveyed to api User
// use this method when we have specific api error to be conveyed to api User
func writeJsonRespStructured(w http.ResponseWriter, err error, respBody interface{}, status int, apiErrors []*util.ApiError) {
response := Response{}
response.Code = status
Expand All @@ -141,15 +141,15 @@ func writeJsonRespStructured(w http.ResponseWriter, err error, respBody interfac
util.GetLogger().Error("error in marshaling err object", err)
status = 500
}
w.Header().Set("Content-Type", "application/json")
w.Header().Set(CONTENT_TYPE, APPLICATION_JSON)
w.WriteHeader(status)
_, err = w.Write(b)
if err != nil {
util.GetLogger().Error(err)
}
}

//global response body used across api
// global response body used across api
type Response struct {
Code int `json:"code,omitempty"`
Status string `json:"status,omitempty"`
Expand Down
1 change: 1 addition & 0 deletions internal/constants/InternalErrorCode.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ const (
DockerRegDeleteFailedInGocd string = "3010"
GitProviderUpdateFailedInSync string = "3011"
ChartCreatedAlreadyExists string = "5001"
ChartNameAlreadyReserved string = "5002"
UserCreateDBFailed string = "6001"
UserCreatePolicyFailed string = "6002"
UserUpdateDBFailed string = "6003"
Expand Down
1 change: 1 addition & 0 deletions pkg/chart/ChartCompatibility.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ type stringSet map[string]struct{}
const (
DeploymentChartType = "Deployment"
RolloutChartType = "Rollout Deployment"
ReferenceChart = "reference-chart"
)

var chartCompatibilityMatrix = map[string]stringSet{
Expand Down
Loading