From 3b1e860256297d3515f0fcd58dd28292c316d79f Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Fri, 9 Jun 2023 15:52:58 -0400 Subject: [PATCH] feat: add proof download --- controller/files.go | 25 +++++++++++++++++++++++++ service/files/files.go | 16 ++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/controller/files.go b/controller/files.go index a78a11c..a9e614b 100644 --- a/controller/files.go +++ b/controller/files.go @@ -84,6 +84,31 @@ func (f *FilesController) GetDownloadBy(cidString string) { } } +func (f *FilesController) GetProofBy(cidString string) { + ctx := f.Ctx + + hashHex, valid := validateCid(cidString, true, ctx) + + if !valid { + return + } + + download, err := files.DownloadProof(hashHex) + if internalError(ctx, err) { + logger.Get().Debug("failed fetching file proof", zap.Error(err)) + return + } + + err = ctx.StreamWriter(func(w io.Writer) error { + _, err = io.Copy(w, download) + _ = download.(io.Closer).Close() + return err + }) + if internalError(ctx, err) { + logger.Get().Debug("failed streaming file proof", zap.Error(err)) + } +} + func (f *FilesController) GetStatusBy(cidString string) { ctx := f.Ctx diff --git a/service/files/files.go b/service/files/files.go index 7e64d00..ffd2fd6 100644 --- a/service/files/files.go +++ b/service/files/files.go @@ -198,6 +198,22 @@ func Download(hash string) (io.Reader, error) { } } +func DownloadProof(hash string) (io.Reader, error) { + uploadItem := db.Get().Model(&model.Upload{}).Where(&model.Upload{Hash: hash}).Row() + + if uploadItem.Err() != nil { + logger.Get().Debug(ErrInvalidFile.Error(), zap.String("hash", hash)) + return nil, ErrInvalidFile + } + fetch, err := client.R().SetDoNotParseResponse(true).Get(getWorkerProofUrl(hash)) + if err != nil { + logger.Get().Error(ErrFailedFetchObject.Error(), zap.Error(err)) + return nil, ErrFailedFetchObject + } + + return fetch.RawBody(), nil +} + func Status(hash string) int { var count int64