about summary refs log tree commit diff
path: root/app/lib/activitypub/activity/accept.rb
diff options
context:
space:
mode:
authorpuckipedia <puck@puckipedia.com>2019-10-24 20:45:43 +0000
committerEugen Rochko <eugen@zeonfederated.com>2019-10-24 22:45:43 +0200
commitd2919f7e94a22971fb368f614ecccce2b055d231 (patch)
tree4f3cf946672ce54be3ce017dc50a3308908739af /app/lib/activitypub/activity/accept.rb
parentbd684e25d9ddb77e396e28a39ff221e9db28e608 (diff)
Allow Accept/Reject with a non-embedded object (#12199)
Some ActivityPub servers refuse to embed remote objects into their own
output. This is because they are not the authoritative source for these
objects, and as such embedding them is always a waste of space. The
follow request and follow models contain a URI, so this can be used to
match them.
Diffstat (limited to 'app/lib/activitypub/activity/accept.rb')
-rw-r--r--app/lib/activitypub/activity/accept.rb9
1 files changed, 5 insertions, 4 deletions
diff --git a/app/lib/activitypub/activity/accept.rb b/app/lib/activitypub/activity/accept.rb
index 348ee0d1c..7010ff43e 100644
--- a/app/lib/activitypub/activity/accept.rb
+++ b/app/lib/activitypub/activity/accept.rb
@@ -2,17 +2,18 @@
 
 class ActivityPub::Activity::Accept < ActivityPub::Activity
   def perform
+    return accept_follow_for_relay if relay_follow?
+    return follow_request_from_object.authorize! unless follow_request_from_object.nil?
+
     case @object['type']
     when 'Follow'
-      accept_follow
+      accept_embedded_follow
     end
   end
 
   private
 
-  def accept_follow
-    return accept_follow_for_relay if relay_follow?
-
+  def accept_embedded_follow
     target_account = account_from_uri(target_uri)
 
     return if target_account.nil? || !target_account.local?