about summary refs log tree commit diff
path: root/app/lib/activitypub/activity
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2018-08-12 18:16:26 +0200
committerGitHub <noreply@github.com>2018-08-12 18:16:26 +0200
commit39e361a56d849a027ed12df69122a369bc6ff39d (patch)
treecf178ca2ebfda1c101bba438b42e472926647067 /app/lib/activitypub/activity
parent2aeeffc3ec421111f751cab61a15642cbddd9f0d (diff)
Expect relays to answer with accept/reject (#8179)
Diffstat (limited to 'app/lib/activitypub/activity')
-rw-r--r--app/lib/activitypub/activity/accept.rb14
-rw-r--r--app/lib/activitypub/activity/reject.rb14
2 files changed, 28 insertions, 0 deletions
diff --git a/app/lib/activitypub/activity/accept.rb b/app/lib/activitypub/activity/accept.rb
index bd90c9019..7e60b2c00 100644
--- a/app/lib/activitypub/activity/accept.rb
+++ b/app/lib/activitypub/activity/accept.rb
@@ -11,6 +11,8 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity
   private
 
   def accept_follow
+    return accept_follow_for_relay if relay_follow?
+
     target_account = account_from_uri(target_uri)
 
     return if target_account.nil? || !target_account.local?
@@ -19,6 +21,18 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity
     follow_request&.authorize!
   end
 
+  def accept_follow_for_relay
+    relay.update!(state: :accepted)
+  end
+
+  def relay
+    @relay ||= Relay.find_by(follow_activity_id: object_uri)
+  end
+
+  def relay_follow?
+    relay.present?
+  end
+
   def target_uri
     @target_uri ||= value_or_id(@object['actor'])
   end
diff --git a/app/lib/activitypub/activity/reject.rb b/app/lib/activitypub/activity/reject.rb
index 28d472883..d81b157de 100644
--- a/app/lib/activitypub/activity/reject.rb
+++ b/app/lib/activitypub/activity/reject.rb
@@ -11,6 +11,8 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity
   private
 
   def reject_follow
+    return reject_follow_for_relay if relay_follow?
+
     target_account = account_from_uri(target_uri)
 
     return if target_account.nil? || !target_account.local?
@@ -21,6 +23,18 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity
     UnfollowService.new.call(target_account, @account) if target_account.following?(@account)
   end
 
+  def reject_follow_for_relay
+    relay.update!(state: :rejected)
+  end
+
+  def relay
+    @relay ||= Relay.find_by(follow_activity_id: object_uri)
+  end
+
+  def relay_follow?
+    relay.present?
+  end
+
   def target_uri
     @target_uri ||= value_or_id(@object['actor'])
   end