Skip to content

Commit

Permalink
fix listing with no prefix
Browse files Browse the repository at this point in the history
  • Loading branch information
mobyvb committed Oct 12, 2018
1 parent fc00905 commit 525ab2e
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions pkg/storage/streams/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,10 @@ func (s *streamStore) List(ctx context.Context, prefix, startAfter, endBefore pa
metaFlags |= meta.UserDefined
}

if prefix == nil {
return listNoPrefix(ctx, s, startAfter, endBefore, recursive, limit, metaFlags)
}

encPrefix, err := encryptAfterBucket(prefix, s.rootKey)
if err != nil {
return nil, false, err
Expand Down Expand Up @@ -417,6 +421,39 @@ func (s *streamStore) List(ctx context.Context, prefix, startAfter, endBefore pa
return items, more, nil
}

func listNoPrefix(ctx context.Context, s *streamStore, startAfter, endBefore paths.Path, recursive bool, limit int, metaFlags uint32) (items []ListItem, more bool, err error) {
defer mon.Task()(&ctx)(&err)

encStartAfter, err := encryptAfterBucket(startAfter, s.rootKey)
if err != nil {
return nil, false, err
}
encEndBefore, err := encryptAfterBucket(endBefore, s.rootKey)
if err != nil {
return nil, false, err
}

segments, more, err := s.segments.List(ctx, paths.New("l"), encStartAfter, encEndBefore, recursive, limit, metaFlags)
if err != nil {
return nil, false, err
}

items = make([]ListItem, len(segments))
for i, item := range segments {
newMeta, err := convertMeta(item.Meta)
if err != nil {
return nil, false, err
}
decPath, err := decryptAfterBucket(item.Path, s.rootKey)
if err != nil {
return nil, false, err
}
items[i] = ListItem{Path: decPath, Meta: newMeta, IsPrefix: item.IsPrefix}
}

return items, more, nil
}

type lazySegmentRanger struct {
ranger ranger.Ranger
segments segments.Store
Expand Down Expand Up @@ -487,6 +524,9 @@ func decryptRanger(ctx context.Context, rr ranger.Ranger, decryptedSize int64, c

// encryptAfterBucket encrypts a path without encrypting its first element
func encryptAfterBucket(p paths.Path, key []byte) (encrypted paths.Path, err error) {
if len(p) <= 1 {
return p, nil
}
bucket := p[0]
toEncrypt := p[1:]

Expand All @@ -504,6 +544,9 @@ func encryptAfterBucket(p paths.Path, key []byte) (encrypted paths.Path, err err

// decryptAfterBucket decrypts a path without modifying its first element
func decryptAfterBucket(p paths.Path, key []byte) (decrypted paths.Path, err error) {
if len(p) <= 1 {
return p, nil
}
bucket := p[0]
toDecrypt := p[1:]

Expand Down

0 comments on commit 525ab2e

Please sign in to comment.