Compare commits

..

2 Commits

Author SHA1 Message Date
Derrick Hammer 3b1e860256
feat: add proof download 2023-06-09 15:52:58 -04:00
Derrick Hammer 160a9f7ebb
refactor: use getWorkerProofUrl 2023-06-09 15:48:41 -04:00
2 changed files with 42 additions and 1 deletions

View File

@ -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) { func (f *FilesController) GetStatusBy(cidString string) {
ctx := f.Ctx ctx := f.Ctx

View File

@ -164,7 +164,7 @@ func Download(hash string) (io.Reader, error) {
tusItem := db.Get().Table("tus").Where(&model.Tus{Hash: hash}).Row() tusItem := db.Get().Table("tus").Where(&model.Tus{Hash: hash}).Row()
if uploadItem.Err() == nil { if uploadItem.Err() == nil {
fetch, err := client.R().SetDoNotParseResponse(true).Get(fmt.Sprintf("/worker/objects/%s", hash)) fetch, err := client.R().SetDoNotParseResponse(true).Get(getWorkerProofUrl(hash))
if err != nil { if err != nil {
logger.Get().Error(ErrFailedFetchObject.Error(), zap.Error(err)) logger.Get().Error(ErrFailedFetchObject.Error(), zap.Error(err))
return nil, ErrFailedFetchObject return nil, ErrFailedFetchObject
@ -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 { func Status(hash string) int {
var count int64 var count int64