Fix local follows, 404 in logs
This commit is contained in:
		| @@ -19,12 +19,7 @@ class Api::AccountsController < ApiController | ||||
|   end | ||||
|  | ||||
|   def follow | ||||
|     if @account.local? | ||||
|       @follow = current_user.account.follow!(@account) | ||||
|     else | ||||
|       @follow = FollowService.new.(current_user.account, @account.acct) | ||||
|     end | ||||
|  | ||||
|     @follow = FollowService.new.(current_user.account, @account.acct) | ||||
|     render action: :show | ||||
|   end | ||||
|  | ||||
|   | ||||
| @@ -7,8 +7,21 @@ class ApplicationController < ActionController::Base | ||||
|  | ||||
|   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 | ||||
|  | ||||
|   def not_found | ||||
|     respond_to do |format| | ||||
|       format.any { head 404 } | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def current_account | ||||
|     current_user.try(:account) | ||||
|   end | ||||
|   | ||||
| @@ -8,7 +8,7 @@ class FollowRemoteAccountService < BaseService | ||||
|   def call(uri, subscribe = true) | ||||
|     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) | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,13 @@ class FollowService < BaseService | ||||
|     return nil if target_account.nil? | ||||
|  | ||||
|     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]) | ||||
|     follow | ||||
|   end | ||||
|   | ||||
| @@ -10,7 +10,7 @@ Rails.application.configure do | ||||
|   config.eager_load = false | ||||
|  | ||||
|   # Show full error reports. | ||||
|   config.consider_all_requests_local= true | ||||
|   config.consider_all_requests_local = true | ||||
|  | ||||
|   # Enable/disable caching. By default caching is disabled. | ||||
|   if Rails.root.join('tmp/caching-dev.txt').exist? | ||||
|   | ||||
| @@ -72,4 +72,6 @@ Rails.application.routes.draw do | ||||
|   end | ||||
|  | ||||
|   root 'home#index' | ||||
|  | ||||
|   match '*unmatched_route', via: :all, to: 'application#raise_not_found' | ||||
| end | ||||
|   | ||||
| @@ -7,6 +7,7 @@ RSpec.describe Api::AccountsController, type: :controller do | ||||
|   let(:token) { double acceptable?: true, resource_owner_id: user.id } | ||||
|  | ||||
|   before do | ||||
|     stub_request(:post, "https://pubsubhubbub.superfeedr.com/").to_return(:status => 200, :body => "", :headers => {}) | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|   end | ||||
|  | ||||
| @@ -39,7 +40,7 @@ RSpec.describe Api::AccountsController, type: :controller do | ||||
|   end | ||||
|  | ||||
|   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 | ||||
|       post :follow, params: { id: other_account.id } | ||||
| @@ -55,7 +56,7 @@ RSpec.describe Api::AccountsController, type: :controller do | ||||
|   end | ||||
|  | ||||
|   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 | ||||
|       user.account.follow!(other_account) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user