diff --git a/code/go/0chain.net/blobbercore/handler/handler.go b/code/go/0chain.net/blobbercore/handler/handler.go index cf56a9b43..80f7e4439 100644 --- a/code/go/0chain.net/blobbercore/handler/handler.go +++ b/code/go/0chain.net/blobbercore/handler/handler.go @@ -453,12 +453,9 @@ func InsertShare(ctx context.Context, r *http.Request) (interface{}, error) { ExpiryAt: common.ToTime(authTicket.Expiration), } - existingShare, err := reference.GetShareInfo(ctx, authTicket.ClientID, authTicket.FilePathHash) - if err != nil { - return nil, err - } + existingShare, _ := reference.GetShareInfo(ctx, authTicket.ClientID, authTicket.FilePathHash) - if existingShare != nil { + if existingShare != nil && len(existingShare.OwnerID) > 0 { err = reference.UpdateShareInfo(ctx, shareInfo) } else { err = reference.AddShareInfo(ctx, shareInfo) diff --git a/code/go/0chain.net/blobbercore/handler/handler_test.go b/code/go/0chain.net/blobbercore/handler/handler_test.go index 68e7053ea..25aa3f045 100644 --- a/code/go/0chain.net/blobbercore/handler/handler_test.go +++ b/code/go/0chain.net/blobbercore/handler/handler_test.go @@ -1279,8 +1279,8 @@ func TestHandlers_Requiring_Signature(t *testing.T) { mock.ExpectQuery(regexp.QuoteMeta(`SELECT * FROM "marketplace_share_info" WHERE`)). WithArgs("abcdefgh", "f15383a1130bd2fae1e52a7a15c432269eeb7def555f1f8b9b9a28bd9611362c"). WillReturnRows( - sqlmock.NewRows([]string{"client_id"}). - AddRow("abcdefgh"), + sqlmock.NewRows([]string{"client_id", "owner_id"}). + AddRow("abcdefgh", "owner"), ) aa := sqlmock.AnyArg() diff --git a/code/go/0chain.net/blobbercore/handler/object_operation_handler.go b/code/go/0chain.net/blobbercore/handler/object_operation_handler.go index 94556eb52..b2c1b26de 100644 --- a/code/go/0chain.net/blobbercore/handler/object_operation_handler.go +++ b/code/go/0chain.net/blobbercore/handler/object_operation_handler.go @@ -423,19 +423,26 @@ func (fsh *StorageHandler) DownloadFile( "couldn't save latest read marker: %v", err) } - if len(fileref.EncryptedKey) > 0 { - if authToken == nil { - return nil, errors.New("auth ticket is required to download encrypted file") - } - // check if client is authorized to download - shareInfo, err := reference.GetShareInfo( + var shareInfo *reference.ShareInfo + if authToken != nil { + shareInfo, err = reference.GetShareInfo( ctx, readMarker.ClientID, authToken.FilePathHash, ) - if err != nil { - return nil, errors.New("error during share info lookup in database" + err.Error()) - } else if shareInfo == nil || shareInfo.Revoked { + + if err == nil && shareInfo.Revoked { + return nil, errors.New("client does not have permission to download the file. share revoked") + } + } + + if len(fileref.EncryptedKey) > 0 { + if authToken == nil { + return nil, errors.New("auth ticket is required to download encrypted file") + } + + // should not happen, just in case + if shareInfo == nil { return nil, errors.New("client does not have permission to download the file. share does not exist") } @@ -450,9 +457,6 @@ func (fsh *StorageHandler) DownloadFile( if err := encscheme.InitForDecryption("filetype:audio", fileref.EncryptedKey); err != nil { return nil, err } - if err != nil { - return nil, err - } totalSize := len(respData) result := []byte{} diff --git a/code/go/0chain.net/blobbercore/reference/shareinfo.go b/code/go/0chain.net/blobbercore/reference/shareinfo.go index f0ab62ec6..1caafae55 100644 --- a/code/go/0chain.net/blobbercore/reference/shareinfo.go +++ b/code/go/0chain.net/blobbercore/reference/shareinfo.go @@ -74,9 +74,6 @@ func GetShareInfo(ctx context.Context, clientID string, filePathHash string) (*S }). First(shareInfo).Error - if err == gorm.ErrRecordNotFound { - return nil, nil - } if err != nil { return nil, err }