@@ -27,17 +27,13 @@ import (
2727 "time"
2828
2929 cm_storage "github.com/chartmuseum/storage"
30-
30+ "github.com/gin-gonic/gin"
31+ "go.uber.org/zap"
3132 cm_logger "helm.sh/chartmuseum/pkg/chartmuseum/logger"
3233 cm_repo "helm.sh/chartmuseum/pkg/repo"
33-
3434 "helm.sh/helm/v3/pkg/chart"
3535 "helm.sh/helm/v3/pkg/chart/loader"
3636 helm_repo "helm.sh/helm/v3/pkg/repo"
37-
38- "github.com/gin-gonic/gin"
39-
40- "go.uber.org/zap"
4137)
4238
4339var (
@@ -157,6 +153,7 @@ func (server *MultiTenantServer) getStorageObjectRequestHandler(c *gin.Context)
157153 }
158154 c .Data (200 , storageObject .ContentType , storageObject .Content )
159155}
156+
160157func (server * MultiTenantServer ) getStorageObjectTemplateRequestHandler (c * gin.Context ) {
161158 repo := c .Param ("repo" )
162159 name := c .Param ("name" )
@@ -186,6 +183,34 @@ func (server *MultiTenantServer) getStorageObjectTemplateRequestHandler(c *gin.C
186183 })
187184}
188185
186+ func (server * MultiTenantServer ) getStorageObjectRawRequestHandler (c * gin.Context ) {
187+ repo := c .Param ("repo" )
188+ name := c .Param ("name" )
189+ version := c .Param ("version" )
190+
191+ log := server .Logger .ContextLoggingFn (c )
192+
193+ fileName , err := server .getChartFileName (log , repo , name , version )
194+ if err != nil {
195+ c .JSON (http .StatusNotFound , gin.H {"error" : err .Message })
196+ return
197+ }
198+
199+ storageObject , err := server .getStorageObject (log , repo , fileName )
200+ if err != nil {
201+ c .JSON (err .Status , gin.H {"error" : err .Message })
202+ return
203+ }
204+ chrt , err1 := loader .LoadArchive (bytes .NewReader (storageObject .Content ))
205+ if err1 != nil {
206+ c .JSON (http .StatusInternalServerError , gin.H {"error" : err1 })
207+ return
208+ }
209+ c .JSON (200 , map [string ]interface {}{
210+ "raw" : chrt .Raw ,
211+ })
212+ }
213+
189214func (server * MultiTenantServer ) getStorageObjectValuesRequestHandler (c * gin.Context ) {
190215 repo := c .Param ("repo" )
191216 name := c .Param ("name" )
@@ -222,6 +247,7 @@ func (server *MultiTenantServer) getStorageObjectValuesRequestHandler(c *gin.Con
222247 }
223248 c .Data (200 , "application/yaml" , data )
224249}
250+
225251func (server * MultiTenantServer ) getAllChartsRequestHandler (c * gin.Context ) {
226252 repo := c .Param ("repo" )
227253 offset := 0
@@ -368,7 +394,8 @@ func (server *MultiTenantServer) postPackageRequestHandler(c *gin.Context) {
368394 chart , chartErr := cm_repo .ChartVersionFromStorageObject (cm_storage.Object {
369395 Path : pathutil .Join (repo , filename ),
370396 Content : content ,
371- LastModified : time .Now ()})
397+ LastModified : time .Now (),
398+ })
372399 if chartErr != nil {
373400 log (cm_logger .ErrorLevel , "cannot get chart from content" , zap .Error (chartErr ), zap .Binary ("content" , content ))
374401 }
@@ -430,9 +457,10 @@ func (server *MultiTenantServer) postPackageAndProvenanceRequestHandler(c *gin.C
430457 if len (c .Errors ) > 0 {
431458 return // this is a "request too large"
432459 }
433- c .JSON (http .StatusBadRequest , gin.H {"error" : fmt .Sprintf (
434- "no package or provenance file found in form fields %s and %s" ,
435- server .ChartPostFormFieldName , server .ProvPostFormFieldName ),
460+ c .JSON (http .StatusBadRequest , gin.H {
461+ "error" : fmt .Sprintf (
462+ "no package or provenance file found in form fields %s and %s" ,
463+ server .ChartPostFormFieldName , server .ProvPostFormFieldName ),
436464 })
437465 return
438466 }
@@ -466,7 +494,8 @@ func (server *MultiTenantServer) postPackageAndProvenanceRequestHandler(c *gin.C
466494 chart , chartErr := cm_repo .ChartVersionFromStorageObject (cm_storage.Object {
467495 Path : path ,
468496 Content : chartContent ,
469- LastModified : time .Now ()})
497+ LastModified : time .Now (),
498+ })
470499 if chartErr != nil {
471500 log (cm_logger .ErrorLevel , "cannot get chart from content" , zap .Error (err ), zap .Binary ("content" , chartContent ))
472501 }
0 commit comments