Fix local follows, 404 in logs
This commit is contained in:
		
							parent
							
								
									0f4bc56719
								
							
						
					
					
						commit
						509c18eb13
					
				
					 7 changed files with 28 additions and 11 deletions
				
			
		| 
						 | 
					@ -19,12 +19,7 @@ class Api::AccountsController < ApiController
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def follow
 | 
					  def follow
 | 
				
			||||||
    if @account.local?
 | 
					    @follow = FollowService.new.(current_user.account, @account.acct)
 | 
				
			||||||
      @follow = current_user.account.follow!(@account)
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      @follow = FollowService.new.(current_user.account, @account.acct)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    render action: :show
 | 
					    render action: :show
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,8 +7,21 @@ class ApplicationController < ActionController::Base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  helper_method :current_account
 | 
					  helper_method :current_account
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  rescue_from ActionController::RoutingError, with: :not_found
 | 
				
			||||||
 | 
					  rescue_from ActiveRecord::RecordNotFound, with: :not_found
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def raise_not_found
 | 
				
			||||||
 | 
					    raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}")
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected
 | 
					  protected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def not_found
 | 
				
			||||||
 | 
					    respond_to do |format|
 | 
				
			||||||
 | 
					      format.any { head 404 }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def current_account
 | 
					  def current_account
 | 
				
			||||||
    current_user.try(:account)
 | 
					    current_user.try(:account)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ class FollowRemoteAccountService < BaseService
 | 
				
			||||||
  def call(uri, subscribe = true)
 | 
					  def call(uri, subscribe = true)
 | 
				
			||||||
    username, domain = uri.split('@')
 | 
					    username, domain = uri.split('@')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return Account.find_local(username) if domain == Rails.configuration.x.local_domain
 | 
					    return Account.find_local(username) if domain == Rails.configuration.x.local_domain || domain.nil?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    account = Account.find_remote(username, domain)
 | 
					    account = Account.find_remote(username, domain)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,13 @@ class FollowService < BaseService
 | 
				
			||||||
    return nil if target_account.nil?
 | 
					    return nil if target_account.nil?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    follow = source_account.follow!(target_account)
 | 
					    follow = source_account.follow!(target_account)
 | 
				
			||||||
    NotificationWorker.perform_async(follow.stream_entry.id, target_account.id)
 | 
					
 | 
				
			||||||
 | 
					    if target_account.local?
 | 
				
			||||||
 | 
					      NotificationMailer.follow(target_account, source_account).deliver_later
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      NotificationWorker.perform_async(follow.stream_entry.id, target_account.id)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    source_account.ping!(account_url(source_account, format: 'atom'), [Rails.configuration.x.hub_url])
 | 
					    source_account.ping!(account_url(source_account, format: 'atom'), [Rails.configuration.x.hub_url])
 | 
				
			||||||
    follow
 | 
					    follow
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ Rails.application.configure do
 | 
				
			||||||
  config.eager_load = false
 | 
					  config.eager_load = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Show full error reports.
 | 
					  # Show full error reports.
 | 
				
			||||||
  config.consider_all_requests_local= true
 | 
					  config.consider_all_requests_local = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Enable/disable caching. By default caching is disabled.
 | 
					  # Enable/disable caching. By default caching is disabled.
 | 
				
			||||||
  if Rails.root.join('tmp/caching-dev.txt').exist?
 | 
					  if Rails.root.join('tmp/caching-dev.txt').exist?
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,4 +72,6 @@ Rails.application.routes.draw do
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  root 'home#index'
 | 
					  root 'home#index'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  match '*unmatched_route', via: :all, to: 'application#raise_not_found'
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ RSpec.describe Api::AccountsController, type: :controller do
 | 
				
			||||||
  let(:token) { double acceptable?: true, resource_owner_id: user.id }
 | 
					  let(:token) { double acceptable?: true, resource_owner_id: user.id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  before do
 | 
					  before do
 | 
				
			||||||
 | 
					    stub_request(:post, "https://pubsubhubbub.superfeedr.com/").to_return(:status => 200, :body => "", :headers => {})
 | 
				
			||||||
    allow(controller).to receive(:doorkeeper_token) { token }
 | 
					    allow(controller).to receive(:doorkeeper_token) { token }
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +40,7 @@ RSpec.describe Api::AccountsController, type: :controller do
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'POST #follow' do
 | 
					  describe 'POST #follow' do
 | 
				
			||||||
    let(:other_account) { Fabricate(:account, username: 'bob') }
 | 
					    let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    before do
 | 
					    before do
 | 
				
			||||||
      post :follow, params: { id: other_account.id }
 | 
					      post :follow, params: { id: other_account.id }
 | 
				
			||||||
| 
						 | 
					@ -55,7 +56,7 @@ RSpec.describe Api::AccountsController, type: :controller do
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'POST #unfollow' do
 | 
					  describe 'POST #unfollow' do
 | 
				
			||||||
    let(:other_account) { Fabricate(:account, username: 'bob') }
 | 
					    let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    before do
 | 
					    before do
 | 
				
			||||||
      user.account.follow!(other_account)
 | 
					      user.account.follow!(other_account)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue