From 920423ffeb42c39e48ca23d26cf0bb1308c388af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D0=B5=D0=B3=20=D0=91=D0=BE=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Thu, 12 Mar 2026 18:02:10 +0200 Subject: [PATCH] working commit --- app/fileoper/getfile.go | 59 +++++++++++++++++++++++++---------------- app/fileoper/putfile.go | 4 +++ app/storage/helmmeta.go | 3 +++ app/storage/storage.go | 4 +-- 4 files changed, 45 insertions(+), 25 deletions(-) diff --git a/app/fileoper/getfile.go b/app/fileoper/getfile.go index 9bb9414..a083bae 100644 --- a/app/fileoper/getfile.go +++ b/app/fileoper/getfile.go @@ -10,6 +10,7 @@ package fileoper import ( + "bytes" "context" "io" "net/http" @@ -49,31 +50,43 @@ func (oper *Operator) GetFile(ctx context.Context, operatorID string, params *Ge oper.iLock.WaitAndLock(resName) defer oper.iLock.Done(resName) - descrExists, fileDescr, err := oper.mdb.GetFileByCollectionName(ctx, collection, filename) - if err != nil { - code := http.StatusInternalServerError - return code, res, err - } - if !descrExists { - code := http.StatusNotFound - return code, res, err - } - reader, err := oper.store.GetFileReader(collection, filename) - if err != nil { - code := http.StatusInternalServerError - return code, res, err - } - res = &GetFileResult{ - ContentSize: strconv.FormatInt(fileDescr.Size, 10), - ContentType: fileDescr.Type, - ContentDigest: fileDescr.Checksum, - Source: reader, + if filename != "index.yaml" { + descrExists, fileDescr, err := oper.mdb.GetFileByCollectionName(ctx, collection, filename) + if err != nil { + code := http.StatusInternalServerError + return code, res, err + } + if !descrExists { + code := http.StatusNotFound + return code, res, err + } + reader, err := oper.store.GetFileReader(collection, filename) + if err != nil { + code := http.StatusInternalServerError + return code, res, err + } + res = &GetFileResult{ + ContentSize: strconv.FormatInt(fileDescr.Size, 10), + ContentType: fileDescr.Type, + ContentDigest: fileDescr.Checksum, + Source: reader, - ContentCreatedAt: fileDescr.CreatedAt, - ContentCreatedBy: fileDescr.CreatedBy, - ContentUpdatedAt: fileDescr.UpdatedAt, - ContentUpdatedBy: fileDescr.UpdatedBy, + ContentCreatedAt: fileDescr.CreatedAt, + ContentCreatedBy: fileDescr.CreatedBy, + ContentUpdatedAt: fileDescr.UpdatedAt, + ContentUpdatedBy: fileDescr.UpdatedBy, + } + code := http.StatusOK + return code, res, err + } + // TODO: actual chart index + reader := io.NopCloser(bytes.NewReader(nil)) + res = &GetFileResult{ + ContentSize: strconv.FormatInt(0, 10), + ContentType: hcMimeType, + Source: reader, } code := http.StatusOK return code, res, err + } diff --git a/app/fileoper/putfile.go b/app/fileoper/putfile.go index 48e0838..27eb938 100644 --- a/app/fileoper/putfile.go +++ b/app/fileoper/putfile.go @@ -78,6 +78,10 @@ func (oper *Operator) PutFile(ctx context.Context, operatorID string, params *Pu var helmMeta string if contentType == hcMimeType { helmHash, helmMeta, err = oper.store.HelmMeta(tmpname) + if err != nil { + code := http.StatusInternalServerError + return code, res, err + } } descrExists, fileDescr, err := oper.mdb.GetFileByCollectionName(ctx, collection, filename) diff --git a/app/storage/helmmeta.go b/app/storage/helmmeta.go index 149008a..b7bdb64 100644 --- a/app/storage/helmmeta.go +++ b/app/storage/helmmeta.go @@ -11,6 +11,9 @@ func (store *Storage) HelmMeta(filename string) (string, string, error) { var err error var meta string var hash string + + filename = store.makeTmppath(filename) + chart, err := loader.Load(filename) if err != nil { return meta, hash, err diff --git a/app/storage/storage.go b/app/storage/storage.go index d516144..71b8632 100644 --- a/app/storage/storage.go +++ b/app/storage/storage.go @@ -78,7 +78,7 @@ func (store *Storage) WriteTempFile(source io.Reader) (string, int64, string, er var size int64 var csum string - tmpName := fmt.Sprintf("%d.tmp", auxuuid.NewUUID()) + tmpName := fmt.Sprintf("%s.tmp", auxuuid.NewUUID()) tmpPath := store.makeTmppath(tmpName) tmpdirpath := store.makeTmpsubdir() @@ -120,7 +120,7 @@ func (store *Storage) HardlinkFile(tmpName, collection, filename string) error { } filename = store.makeFilepath(collection, filename) _, err = os.Stat(dirname) - if os.IsExist(err) { + if err == nil { os.Remove(filename) // TODO: safe removing } tmpName = store.makeTmppath(tmpName)