diff --git a/pkg/models/openpitrix/applicationversions.go b/pkg/models/openpitrix/applicationversions.go index 91554bf35..39ed52bf2 100644 --- a/pkg/models/openpitrix/applicationversions.go +++ b/pkg/models/openpitrix/applicationversions.go @@ -17,18 +17,15 @@ limitations under the License. package openpitrix import ( - "archive/tar" "bytes" - "compress/gzip" "context" "encoding/base64" "errors" "fmt" - "io" - "io/ioutil" "reflect" "sort" - "strings" + + "helm.sh/helm/v3/pkg/chart/loader" "kubesphere.io/kubesphere/pkg/apiserver/query" @@ -531,43 +528,25 @@ func (c *applicationOperator) GetAppVersionFiles(versionId string, request *GetA var version *v1alpha1.HelmApplicationVersion var err error + // get chart data version, err = c.getAppVersionByVersionIdWithData(versionId) if err != nil { + klog.Errorf("get app version %s chart data failed: %v", versionId, err) return nil, err } - gzReader, err := gzip.NewReader(bytes.NewReader(version.Spec.Data)) + // parse chart data + chartData, err := loader.LoadArchive(bytes.NewReader(version.Spec.Data)) if err != nil { - klog.Errorf("read app version %s failed, error: %s", versionId, err) + klog.Errorf("Failed to load package for app version: %s, error: %+v", versionId, err) return nil, err } - tarReader := tar.NewReader(gzReader) - res := &GetAppVersionPackageFilesResponse{Files: map[string]strfmt.Base64{}, VersionId: versionId} - for { - header, err := tarReader.Next() - if err == io.EOF { - break - } - - if err != nil { - klog.Errorf("ExtractTarGz: Next() failed: %s", err.Error()) - return res, err - } - - switch header.Typeflag { - case tar.TypeReg: - curData, _ := ioutil.ReadAll(tarReader) - name := strings.TrimPrefix(header.Name, fmt.Sprintf("%s/", version.GetTrueName())) - res.Files[name] = curData - default: - klog.Errorf( - "ExtractTarGz: unknown type: %v in %s", - header.Typeflag, - header.Name) - } + for _, f := range chartData.Raw { + res.Files[f.Name] = f.Data } + return res, nil }