@@ -4,36 +4,41 @@ import (
44 "encoding/json"
55 "fmt"
66 "github.com/devtron-labs/devtron/api/restHandler/common"
7+ "github.com/devtron-labs/devtron/internal/util"
78 "github.com/devtron-labs/devtron/pkg/chart"
89 chartRepoRepository "github.com/devtron-labs/devtron/pkg/chartRepo/repository"
910 "github.com/devtron-labs/devtron/pkg/sql"
1011 "github.com/devtron-labs/devtron/pkg/user"
1112 "github.com/devtron-labs/devtron/pkg/user/casbin"
13+ "github.com/gorilla/mux"
1214 "github.com/juju/errors"
1315 "go.uber.org/zap"
1416 "gopkg.in/go-playground/validator.v9"
1517 "io/ioutil"
1618 "net/http"
1719 "os"
1820 "path/filepath"
21+ "strconv"
1922 "strings"
2023 "time"
2124)
2225
2326type DeploymentConfigRestHandler interface {
2427 CreateChartFromFile (w http.ResponseWriter , r * http.Request )
2528 SaveChart (w http.ResponseWriter , r * http.Request )
29+ DownloadChart (w http.ResponseWriter , r * http.Request )
2630 GetUploadedCharts (w http.ResponseWriter , r * http.Request )
2731}
2832
2933type DeploymentConfigRestHandlerImpl struct {
30- Logger * zap.SugaredLogger
31- userAuthService user.UserService
32- enforcer casbin.Enforcer
33- validator * validator.Validate
34- refChartDir chartRepoRepository.RefChartDir
35- chartService chart.ChartService
36- chartRefRepository chartRepoRepository.ChartRefRepository
34+ Logger * zap.SugaredLogger
35+ userAuthService user.UserService
36+ enforcer casbin.Enforcer
37+ validator * validator.Validate
38+ refChartDir chartRepoRepository.RefChartDir
39+ chartService chart.ChartService
40+ chartRefRepository chartRepoRepository.ChartRefRepository
41+ chartTemplateService util.ChartTemplateService
3742}
3843
3944type DeploymentChartInfo struct {
@@ -46,15 +51,16 @@ type DeploymentChartInfo struct {
4651}
4752
4853func NewDeploymentConfigRestHandlerImpl (Logger * zap.SugaredLogger , userAuthService user.UserService , enforcer casbin.Enforcer , validator * validator.Validate ,
49- refChartDir chartRepoRepository.RefChartDir , chartService chart.ChartService , chartRefRepository chartRepoRepository.ChartRefRepository ) * DeploymentConfigRestHandlerImpl {
54+ refChartDir chartRepoRepository.RefChartDir , chartService chart.ChartService , chartTemplateService util. ChartTemplateService , chartRefRepository chartRepoRepository.ChartRefRepository ) * DeploymentConfigRestHandlerImpl {
5055 return & DeploymentConfigRestHandlerImpl {
51- Logger : Logger ,
52- userAuthService : userAuthService ,
53- enforcer : enforcer ,
54- validator : validator ,
55- refChartDir : refChartDir ,
56- chartService : chartService ,
57- chartRefRepository : chartRefRepository ,
56+ Logger : Logger ,
57+ userAuthService : userAuthService ,
58+ enforcer : enforcer ,
59+ validator : validator ,
60+ refChartDir : refChartDir ,
61+ chartService : chartService ,
62+ chartTemplateService : chartTemplateService ,
63+ chartRefRepository : chartRefRepository ,
5864 }
5965}
6066
@@ -210,6 +216,42 @@ func (handler *DeploymentConfigRestHandlerImpl) SaveChart(w http.ResponseWriter,
210216
211217}
212218
219+ func (handler * DeploymentConfigRestHandlerImpl ) DownloadChart (w http.ResponseWriter , r * http.Request ) {
220+ userId , err := handler .userAuthService .GetLoggedInUser (r )
221+ if userId == 0 || err != nil {
222+ common .WriteJsonResp (w , err , nil , http .StatusUnauthorized )
223+ return
224+ }
225+
226+ token := r .Header .Get ("token" )
227+ if ok := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionDelete , "*" ); ! ok {
228+ common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
229+ return
230+ }
231+
232+ vars := mux .Vars (r )
233+ chartRefId , err := strconv .Atoi (vars ["chartRefId" ])
234+ if err != nil {
235+ handler .Logger .Errorw ("error in parsing chartRefId" , "chartRefId" , chartRefId , "err" , err )
236+ common .WriteJsonResp (w , fmt .Errorf ("error in parsing chartRefId : %s must be integer" , chartRefId ), nil , http .StatusBadRequest )
237+ return
238+ }
239+ chartRef , err := handler .chartService .FetchChartInfoByChartRefId (chartRefId )
240+ if err != nil {
241+ common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
242+ return
243+ }
244+ refChartPath := filepath .Join (string (handler .refChartDir ), chartRef .Location )
245+ manifestByteArr , err := handler .chartTemplateService .LoadChartInBytes (refChartPath , false )
246+ if err != nil {
247+ handler .Logger .Errorw ("error in converting chart to bytes" , "err" , err )
248+ common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
249+ return
250+ }
251+ common .WriteOctetStreamResp (w , r , manifestByteArr , "" )
252+ return
253+ }
254+
213255func (handler * DeploymentConfigRestHandlerImpl ) GetUploadedCharts (w http.ResponseWriter , r * http.Request ) {
214256
215257 userId , err := handler .userAuthService .GetLoggedInUser (r )
@@ -224,7 +266,7 @@ func (handler *DeploymentConfigRestHandlerImpl) GetUploadedCharts(w http.Respons
224266 return
225267 }
226268
227- charts , err := handler .chartService .FetchChartInfoByFlag ( true )
269+ charts , err := handler .chartService .FetchCustomChartsInfo ( )
228270 if err != nil {
229271 common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
230272 return
0 commit comments