From f528c84d3d5ff665b11bea913b448af6cb697217 Mon Sep 17 00:00:00 2001 From: Felicitas Pojtinger Date: Fri, 17 Dec 2021 18:21:59 +0100 Subject: [PATCH] fix: Prevent returning parent header when returning child header --- internal/persisters/metadata.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/internal/persisters/metadata.go b/internal/persisters/metadata.go index 65eae7f..f0c743f 100644 --- a/internal/persisters/metadata.go +++ b/internal/persisters/metadata.go @@ -102,10 +102,23 @@ func (p *MetadataPersister) GetHeader(ctx context.Context, name string) (*models } func (p *MetadataPersister) GetHeaderChildren(ctx context.Context, name string) (models.HeaderSlice, error) { - return models.Headers( + headers, err := models.Headers( qm.Where(models.HeaderColumns.Name+" like ?", strings.TrimSuffix(name, "/")+"/%"), // Prevent double trailing slashes qm.Where(models.HeaderColumns.Deleted+" != 1"), ).All(ctx, p.db) + if err != nil { + return nil, err + } + + outhdrs := models.HeaderSlice{} + for _, hdr := range headers { + prefix := strings.TrimSuffix(hdr.Name, "/") + if name != prefix && name != prefix+"/" { + outhdrs = append(outhdrs, hdr) + } + } + + return outhdrs, nil } func (p *MetadataPersister) GetHeaderDirectChildren(ctx context.Context, name string) (models.HeaderSlice, error) { @@ -194,7 +207,15 @@ where %v like ? return nil, err } - return headers, nil + outhdrs := models.HeaderSlice{} + for _, hdr := range headers { + prefix := strings.TrimSuffix(hdr.Name, "/") + if name != prefix && name != prefix+"/" { + outhdrs = append(outhdrs, hdr) + } + } + + return outhdrs, nil } func (p *MetadataPersister) DeleteHeader(ctx context.Context, name string, lastknownrecord, lastknownblock int64) (*models.Header, error) {