From 509c18eb139ead0d2e2f02f580ef04b28d874f48 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 8 Sep 2016 02:40:51 +0200 Subject: [PATCH] Fix local follows, 404 in logs --- app/controllers/api/accounts_controller.rb | 7 +------ app/controllers/application_controller.rb | 13 +++++++++++++ app/services/follow_remote_account_service.rb | 2 +- app/services/follow_service.rb | 8 +++++++- config/environments/development.rb | 2 +- config/routes.rb | 2 ++ spec/controllers/api/accounts_controller_spec.rb | 5 +++-- 7 files changed, 28 insertions(+), 11 deletions(-) diff --git a/app/controllers/api/accounts_controller.rb b/app/controllers/api/accounts_controller.rb index 8c4da5270..4a4431b2d 100644 --- a/app/controllers/api/accounts_controller.rb +++ b/app/controllers/api/accounts_controller.rb @@ -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 diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 73de1838c..90e923951 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -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 diff --git a/app/services/follow_remote_account_service.rb b/app/services/follow_remote_account_service.rb index f05668420..c4330d7cf 100644 --- a/app/services/follow_remote_account_service.rb +++ b/app/services/follow_remote_account_service.rb @@ -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) diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb index 06bbfa8f0..e4a4bfcd3 100644 --- a/app/services/follow_service.rb +++ b/app/services/follow_service.rb @@ -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 diff --git a/config/environments/development.rb b/config/environments/development.rb index 288256dcf..d0ff03754 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -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? diff --git a/config/routes.rb b/config/routes.rb index 9ad7a32e1..6201a4ee7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -72,4 +72,6 @@ Rails.application.routes.draw do end root 'home#index' + + match '*unmatched_route', via: :all, to: 'application#raise_not_found' end diff --git a/spec/controllers/api/accounts_controller_spec.rb b/spec/controllers/api/accounts_controller_spec.rb index d8b26f815..91e62837c 100644 --- a/spec/controllers/api/accounts_controller_spec.rb +++ b/spec/controllers/api/accounts_controller_spec.rb @@ -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)