From a0ce4d98fffaa448520cf5b5aad6490d0157e401 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Thu, 23 Jul 2026 04:40:14 +0900 Subject: [PATCH] appview: validate repo DID when ingesting Signed-off-by: Seongmin Lee --- appview/ingester_repo.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/appview/ingester_repo.go b/appview/ingester_repo.go index a6c4ccfc..380b173f 100644 --- a/appview/ingester_repo.go +++ b/appview/ingester_repo.go @@ -48,9 +48,13 @@ func (i *Ingester) ingestRepoCreate(ctx context.Context, e *jmodels.Event, l *sl l.Info("skipping repo create from non-DID-migrated knot") return nil } - repoDid := *record.RepoDid + repoDid, err := syntax.ParseDID(*record.RepoDid) + if err != nil { + l.Warn("skipping repo record with malformed repoDid", "value", *record.RepoDid, "err", err) + return nil + } - proceed, err := i.verifyOwnership(ctx, l, repoDid, e.Did, record.Knot) + proceed, err := i.verifyOwnership(ctx, l, repoDid.String(), e.Did, record.Knot) if err != nil { return err } @@ -73,7 +77,7 @@ func (i *Ingester) ingestRepoCreate(ctx context.Context, e *jmodels.Event, l *sl return fmt.Errorf("failed to check existing repo: %w", err) } - prev, err := db.GetRepoByDid(i.Db, repoDid) + prev, err := db.GetRepoByDid(i.Db, repoDid.String()) if err != nil && !errors.Is(err, sql.ErrNoRows) { return fmt.Errorf("failed to check existing repoDid: %w", err) } @@ -98,7 +102,7 @@ func (i *Ingester) ingestRepoCreate(ctx context.Context, e *jmodels.Event, l *sl if err := db.RenameRepo(tx, e.Did, prev.Rkey, e.Commit.RKey, newName); err != nil { return fmt.Errorf("failed to rename repo: %w", err) } - if err := db.RecordRepoRename(tx, e.Did, prev.Rkey, repoDid); err != nil { + if err := db.RecordRepoRename(tx, e.Did, prev.Rkey, repoDid.String()); err != nil { return fmt.Errorf("failed to record rename history: %w", err) } if err := db.DeleteRepoRename(tx, e.Did, strings.ToLower(newName)); err != nil { @@ -151,7 +155,7 @@ func (i *Ingester) ingestRepoCreate(ctx context.Context, e *jmodels.Event, l *sl Source: derefString(record.Source), Spindle: derefString(record.Spindle), Labels: append([]string(nil), record.Labels...), - RepoDid: repoDid, + RepoDid: repoDid.String(), } tx, err := i.Db.Begin() @@ -201,6 +205,11 @@ func (i *Ingester) ingestRepoUpdate(ctx context.Context, e *jmodels.Event, l *sl l.Info("skipping repo update from non-DID-migrated knot") return nil } + _, err := syntax.ParseDID(*record.RepoDid) + if err != nil { + l.Warn("skipping repo record with malformed repoDid", "value", *record.RepoDid, "err", err) + return nil + } proceed, err := i.verifyOwnership(ctx, l, *record.RepoDid, e.Did, record.Knot) if err != nil { -- 2.51.2