summaryrefslogtreecommitdiff
path: root/internal/processing/workers/federate.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing/workers/federate.go')
-rw-r--r--internal/processing/workers/federate.go92
1 files changed, 82 insertions, 10 deletions
diff --git a/internal/processing/workers/federate.go b/internal/processing/workers/federate.go
index 6e8b558c8..d14f38902 100644
--- a/internal/processing/workers/federate.go
+++ b/internal/processing/workers/federate.go
@@ -1127,17 +1127,17 @@ func (f *federate) MoveAccount(ctx context.Context, account *gtsmodel.Account) e
func (f *federate) AcceptInteraction(
ctx context.Context,
- approval *gtsmodel.InteractionApproval,
+ req *gtsmodel.InteractionRequest,
) error {
// Populate model.
- if err := f.state.DB.PopulateInteractionApproval(ctx, approval); err != nil {
- return gtserror.Newf("error populating approval: %w", err)
+ if err := f.state.DB.PopulateInteractionRequest(ctx, req); err != nil {
+ return gtserror.Newf("error populating request: %w", err)
}
// Bail if interacting account is ours:
// we've already accepted internally and
// shouldn't send an Accept to ourselves.
- if approval.InteractingAccount.IsLocal() {
+ if req.InteractingAccount.IsLocal() {
return nil
}
@@ -1145,27 +1145,27 @@ func (f *federate) AcceptInteraction(
// we can't Accept on another
// instance's behalf. (This
// should never happen but...)
- if approval.Account.IsRemote() {
+ if req.TargetAccount.IsRemote() {
return nil
}
// Parse relevant URI(s).
- outboxIRI, err := parseURI(approval.Account.OutboxURI)
+ outboxIRI, err := parseURI(req.TargetAccount.OutboxURI)
if err != nil {
return err
}
- acceptingAcctIRI, err := parseURI(approval.Account.URI)
+ acceptingAcctIRI, err := parseURI(req.TargetAccount.URI)
if err != nil {
return err
}
- interactingAcctURI, err := parseURI(approval.InteractingAccount.URI)
+ interactingAcctURI, err := parseURI(req.InteractingAccount.URI)
if err != nil {
return err
}
- interactionURI, err := parseURI(approval.InteractionURI)
+ interactionURI, err := parseURI(req.InteractionURI)
if err != nil {
return err
}
@@ -1190,7 +1190,79 @@ func (f *federate) AcceptInteraction(
); err != nil {
return gtserror.Newf(
"error sending activity %T for %v via outbox %s: %w",
- accept, approval.InteractionType, outboxIRI, err,
+ accept, req.InteractionType, outboxIRI, err,
+ )
+ }
+
+ return nil
+}
+
+func (f *federate) RejectInteraction(
+ ctx context.Context,
+ req *gtsmodel.InteractionRequest,
+) error {
+ // Populate model.
+ if err := f.state.DB.PopulateInteractionRequest(ctx, req); err != nil {
+ return gtserror.Newf("error populating request: %w", err)
+ }
+
+ // Bail if interacting account is ours:
+ // we've already rejected internally and
+ // shouldn't send an Reject to ourselves.
+ if req.InteractingAccount.IsLocal() {
+ return nil
+ }
+
+ // Bail if account isn't ours:
+ // we can't Reject on another
+ // instance's behalf. (This
+ // should never happen but...)
+ if req.TargetAccount.IsRemote() {
+ return nil
+ }
+
+ // Parse relevant URI(s).
+ outboxIRI, err := parseURI(req.TargetAccount.OutboxURI)
+ if err != nil {
+ return err
+ }
+
+ rejectingAcctIRI, err := parseURI(req.TargetAccount.URI)
+ if err != nil {
+ return err
+ }
+
+ interactingAcctURI, err := parseURI(req.InteractingAccount.URI)
+ if err != nil {
+ return err
+ }
+
+ interactionURI, err := parseURI(req.InteractionURI)
+ if err != nil {
+ return err
+ }
+
+ // Create a new Reject.
+ reject := streams.NewActivityStreamsReject()
+
+ // Set interacted-with account
+ // as Actor of the Reject.
+ ap.AppendActorIRIs(reject, rejectingAcctIRI)
+
+ // Set the interacted-with object
+ // as Object of the Reject.
+ ap.AppendObjectIRIs(reject, interactionURI)
+
+ // Address the Reject To the interacting acct.
+ ap.AppendTo(reject, interactingAcctURI)
+
+ // Send the Reject via the Actor's outbox.
+ if _, err := f.FederatingActor().Send(
+ ctx, outboxIRI, reject,
+ ); err != nil {
+ return gtserror.Newf(
+ "error sending activity %T for %v via outbox %s: %w",
+ reject, req.InteractionType, outboxIRI, err,
)
}