···
"github.com/bluesky-social/indigo/atproto/syntax"
···
"tangled.sh/tangled.sh/core/api/tangled"
"tangled.sh/tangled.sh/core/appview/config"
"tangled.sh/tangled.sh/core/appview/db"
18
+
"tangled.sh/tangled.sh/core/appview/pages/markup"
"tangled.sh/tangled.sh/core/appview/spindleverify"
"tangled.sh/tangled.sh/core/idresolver"
"tangled.sh/tangled.sh/core/rbac"
···
case tangled.ActorProfileNSID:
case tangled.SpindleMemberNSID:
64
-
err = i.ingestSpindleMember(e)
66
+
err = i.ingestSpindleMember(ctx, e)
case tangled.SpindleNSID:
66
-
err = i.ingestSpindle(e)
68
+
err = i.ingestSpindle(ctx, e)
71
+
case tangled.RepoIssueNSID:
72
+
err = i.ingestIssue(ctx, e)
l = i.Logger.With("nsid", e.Commit.Collection)
···
339
-
func (i *Ingester) ingestSpindleMember(e *models.Event) error {
343
+
func (i *Ingester) ingestSpindleMember(ctx context.Context, e *models.Event) error {
···
return fmt.Errorf("failed to enforce permissions: %w", err)
362
-
memberId, err := i.IdResolver.ResolveIdent(context.Background(), record.Subject)
366
+
memberId, err := i.IdResolver.ResolveIdent(ctx, record.Subject)
···
445
-
func (i *Ingester) ingestSpindle(e *models.Event) error {
449
+
func (i *Ingester) ingestSpindle(ctx context.Context, e *models.Event) error {
···
478
-
err = spindleverify.RunVerification(context.Background(), instance, did, i.Config.Core.Dev)
482
+
err = spindleverify.RunVerification(ctx, instance, did, i.Config.Core.Dev)
l.Error("failed to add spindle to db", "err", err, "instance", instance)
···
617
+
func (i *Ingester) ingestIssue(ctx context.Context, e *models.Event) error {
619
+
rkey := e.Commit.RKey
623
+
l := i.Logger.With("handler", "ingestIssue", "nsid", e.Commit.Collection, "did", did, "rkey", rkey)
624
+
l.Info("ingesting record")
626
+
ddb, ok := i.Db.Execer.(*db.DB)
628
+
return fmt.Errorf("failed to index issue record, invalid db cast")
631
+
switch e.Commit.Operation {
632
+
case models.CommitOperationCreate:
633
+
raw := json.RawMessage(e.Commit.Record)
634
+
record := tangled.RepoIssue{}
635
+
err = json.Unmarshal(raw, &record)
637
+
l.Error("invalid record", "err", err)
641
+
issue := db.IssueFromRecord(did, rkey, record)
643
+
sanitizer := markup.NewSanitizer()
644
+
if st := strings.TrimSpace(sanitizer.SanitizeDescription(issue.Title)); st == "" {
645
+
return fmt.Errorf("title is empty after HTML sanitization")
647
+
if sb := strings.TrimSpace(sanitizer.SanitizeDefault(issue.Body)); sb == "" {
648
+
return fmt.Errorf("body is empty after HTML sanitization")
651
+
tx, err := ddb.BeginTx(ctx, nil)
653
+
l.Error("failed to begin transaction", "err", err)
657
+
err = db.NewIssue(tx, &issue)
659
+
l.Error("failed to create issue", "err", err)
665
+
case models.CommitOperationUpdate:
666
+
// TODO: implement updates
669
+
case models.CommitOperationDelete:
670
+
// TODO: implement issue deletion
674
+
return fmt.Errorf("unknown operation: %s", e.Commit.Operation)