···
"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/serververify"
"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)
case tangled.KnotMemberNSID:
err = i.ingestKnotMember(e)
75
+
case tangled.RepoIssueNSID:
76
+
err = i.ingestIssue(ctx, e)
l = i.Logger.With("nsid", e.Commit.Collection)
···
343
-
func (i *Ingester) ingestSpindleMember(e *models.Event) error {
347
+
func (i *Ingester) ingestSpindleMember(ctx context.Context, e *models.Event) error {
···
return fmt.Errorf("failed to enforce permissions: %w", err)
366
-
memberId, err := i.IdResolver.ResolveIdent(context.Background(), record.Subject)
370
+
memberId, err := i.IdResolver.ResolveIdent(ctx, record.Subject)
···
449
-
func (i *Ingester) ingestSpindle(e *models.Event) error {
453
+
func (i *Ingester) ingestSpindle(ctx context.Context, e *models.Event) error {
···
482
-
err = serververify.RunVerification(context.Background(), instance, did, i.Config.Core.Dev)
486
+
err = serververify.RunVerification(ctx, instance, did, i.Config.Core.Dev)
l.Error("failed to add spindle to db", "err", err, "instance", instance)
···
776
+
func (i *Ingester) ingestIssue(ctx context.Context, e *models.Event) error {
778
+
rkey := e.Commit.RKey
782
+
l := i.Logger.With("handler", "ingestIssue", "nsid", e.Commit.Collection, "did", did, "rkey", rkey)
783
+
l.Info("ingesting record")
785
+
ddb, ok := i.Db.Execer.(*db.DB)
787
+
return fmt.Errorf("failed to index issue record, invalid db cast")
790
+
switch e.Commit.Operation {
791
+
case models.CommitOperationCreate:
792
+
raw := json.RawMessage(e.Commit.Record)
793
+
record := tangled.RepoIssue{}
794
+
err = json.Unmarshal(raw, &record)
796
+
l.Error("invalid record", "err", err)
800
+
issue := db.IssueFromRecord(did, rkey, record)
802
+
sanitizer := markup.NewSanitizer()
803
+
if st := strings.TrimSpace(sanitizer.SanitizeDescription(issue.Title)); st == "" {
804
+
return fmt.Errorf("title is empty after HTML sanitization")
806
+
if sb := strings.TrimSpace(sanitizer.SanitizeDefault(issue.Body)); sb == "" {
807
+
return fmt.Errorf("body is empty after HTML sanitization")
810
+
tx, err := ddb.BeginTx(ctx, nil)
812
+
l.Error("failed to begin transaction", "err", err)
816
+
err = db.NewIssue(tx, &issue)
818
+
l.Error("failed to create issue", "err", err)
824
+
case models.CommitOperationUpdate:
825
+
raw := json.RawMessage(e.Commit.Record)
826
+
record := tangled.RepoIssue{}
827
+
err = json.Unmarshal(raw, &record)
829
+
l.Error("invalid record", "err", err)
834
+
if record.Body != nil {
835
+
body = *record.Body
838
+
sanitizer := markup.NewSanitizer()
839
+
if st := strings.TrimSpace(sanitizer.SanitizeDescription(record.Title)); st == "" {
840
+
return fmt.Errorf("title is empty after HTML sanitization")
842
+
if sb := strings.TrimSpace(sanitizer.SanitizeDefault(body)); sb == "" {
843
+
return fmt.Errorf("body is empty after HTML sanitization")
846
+
err = db.UpdateIssueByRkey(ddb, did, rkey, record.Title, body)
848
+
l.Error("failed to update issue", "err", err)
854
+
case models.CommitOperationDelete:
855
+
if err := db.DeleteIssueByRkey(ddb, did, rkey); err != nil {
856
+
l.Error("failed to delete", "err", err)
857
+
return fmt.Errorf("failed to delete issue record: %w", err)
863
+
return fmt.Errorf("unknown operation: %s", e.Commit.Operation)