diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/activitypub/follows_controller.rb | 22 | ||||
-rw-r--r-- | app/lib/activitypub/activity/accept.rb | 17 | ||||
-rw-r--r-- | app/lib/activitypub/tag_manager.rb | 8 | ||||
-rw-r--r-- | app/models/follow_request.rb | 4 | ||||
-rw-r--r-- | app/serializers/activitypub/follow_serializer.rb | 9 | ||||
-rw-r--r-- | app/views/accounts/_header.html.haml | 2 |
6 files changed, 10 insertions, 52 deletions
diff --git a/app/controllers/activitypub/follows_controller.rb b/app/controllers/activitypub/follows_controller.rb deleted file mode 100644 index 038bcbabc..000000000 --- a/app/controllers/activitypub/follows_controller.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -class ActivityPub::FollowsController < Api::BaseController - include SignatureVerification - - def show - render json: follow_request, - serializer: ActivityPub::FollowSerializer, - adapter: ActivityPub::Adapter, - content_type: 'application/activity+json' - end - - private - - def follow_request - FollowRequest.includes(:account).references(:account).find_by!( - id: params.require(:id), - accounts: { domain: nil, username: params.require(:account_username) }, - target_account: signed_request_account - ) - end -end diff --git a/app/lib/activitypub/activity/accept.rb b/app/lib/activitypub/activity/accept.rb index d0082483c..bd90c9019 100644 --- a/app/lib/activitypub/activity/accept.rb +++ b/app/lib/activitypub/activity/accept.rb @@ -2,18 +2,16 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity def perform - if @object.respond_to?(:[]) && - @object['type'] == 'Follow' && @object['actor'].present? - accept_follow_from @object['actor'] - else - accept_follow_object @object + case @object['type'] + when 'Follow' + accept_follow end end private - def accept_follow_from(actor) - target_account = account_from_uri(value_or_id(actor)) + def accept_follow + target_account = account_from_uri(target_uri) return if target_account.nil? || !target_account.local? @@ -21,8 +19,7 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity follow_request&.authorize! end - def accept_follow_object(object) - follow_request = ActivityPub::TagManager.instance.uri_to_resource(value_or_id(object), FollowRequest) - follow_request&.authorize! + def target_uri + @target_uri ||= value_or_id(@object['actor']) end end diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index 1c35e1672..0708713e6 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -28,8 +28,6 @@ class ActivityPub::TagManager return target.uri if target.respond_to?(:local?) && !target.local? case target.object_type - when :follow - account_follow_url(target.account.username, target) when :person account_url(target) when :note, :comment, :activity @@ -99,12 +97,6 @@ class ActivityPub::TagManager case klass.name when 'Account' klass.find_local(uri_to_local_id(uri, :username)) - when 'FollowRequest' - params = Rails.application.routes.recognize_path(uri) - klass.joins(:account).find_by!( - accounts: { domain: nil, username: params[:account_username] }, - id: params[:id] - ) else StatusFinder.new(uri).status end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index 33e5fec12..ebf6959ce 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -21,10 +21,6 @@ class FollowRequest < ApplicationRecord validates :account_id, uniqueness: { scope: :target_account_id } - def object_type - :follow - end - def authorize! account.follow!(target_account, reblogs: show_reblogs) MergeWorker.perform_async(target_account.id, account.id) diff --git a/app/serializers/activitypub/follow_serializer.rb b/app/serializers/activitypub/follow_serializer.rb index eecd64701..86c9992fe 100644 --- a/app/serializers/activitypub/follow_serializer.rb +++ b/app/serializers/activitypub/follow_serializer.rb @@ -1,12 +1,11 @@ # frozen_string_literal: true class ActivityPub::FollowSerializer < ActiveModel::Serializer - attributes :type, :actor - attribute :id, if: :dereferencable? + attributes :id, :type, :actor attribute :virtual_object, key: :object def id - ActivityPub::TagManager.instance.uri_for(object) + [ActivityPub::TagManager.instance.uri_for(object.account), '#follows/', object.id].join end def type @@ -20,8 +19,4 @@ class ActivityPub::FollowSerializer < ActiveModel::Serializer def virtual_object ActivityPub::TagManager.instance.uri_for(object.target_account) end - - def dereferencable? - object.respond_to?(:object_type) - end end diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml index aae01c311..b0062752c 100644 --- a/app/views/accounts/_header.html.haml +++ b/app/views/accounts/_header.html.haml @@ -9,7 +9,7 @@ = fa_icon 'user-times' = t('accounts.unfollow') - else - = link_to account_follows_path(account), data: { method: :post }, class: 'icon-button' do + = link_to account_follow_path(account), data: { method: :post }, class: 'icon-button' do = fa_icon 'user-plus' = t('accounts.follow') - elsif !user_signed_in? |