about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-09-08 02:40:51 +0200
committerEugen Rochko <eugen@zeonfederated.com>2016-09-08 02:40:51 +0200
commit509c18eb139ead0d2e2f02f580ef04b28d874f48 (patch)
treecb87396ee928a5d9bc349e15846d54179f7e2dbd
parent0f4bc567195d368de596cdeeee6bc0b6507ae95e (diff)
Fix local follows, 404 in logs
-rw-r--r--app/controllers/api/accounts_controller.rb7
-rw-r--r--app/controllers/application_controller.rb13
-rw-r--r--app/services/follow_remote_account_service.rb2
-rw-r--r--app/services/follow_service.rb8
-rw-r--r--config/environments/development.rb2
-rw-r--r--config/routes.rb2
-rw-r--r--spec/controllers/api/accounts_controller_spec.rb5
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)