about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/api_controller.rb4
-rw-r--r--app/controllers/application_controller.rb6
-rw-r--r--app/controllers/stream_entries_controller.rb15
-rw-r--r--app/services/fetch_atom_service.rb3
-rw-r--r--app/services/fetch_remote_account_service.rb2
-rw-r--r--app/services/fetch_remote_status_service.rb3
-rw-r--r--config/environments/production.rb2
7 files changed, 29 insertions, 6 deletions
diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb
index c550b38e8..4ccf20bc9 100644
--- a/app/controllers/api_controller.rb
+++ b/app/controllers/api_controller.rb
@@ -18,6 +18,10 @@ class ApiController < ApplicationController
     render json: { error: 'Remote data could not be fetched' }, status: 503
   end
 
+  rescue_from OpenSSL::SSL::SSLError do
+    render json: { error: 'Remote SSL certificate could not be verified' }, status: 503
+  end
+
   protected
 
   def current_resource_owner
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index c8d7e2084..1f991cf67 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -30,6 +30,12 @@ class ApplicationController < ActionController::Base
     end
   end
 
+  def gone
+    respond_to do |format|
+      format.any { head 410 }
+    end
+  end
+
   def current_account
     current_user.try(:account)
   end
diff --git a/app/controllers/stream_entries_controller.rb b/app/controllers/stream_entries_controller.rb
index e1b664b08..a364fa01c 100644
--- a/app/controllers/stream_entries_controller.rb
+++ b/app/controllers/stream_entries_controller.rb
@@ -8,13 +8,16 @@ class StreamEntriesController < ApplicationController
   def show
     @type = @stream_entry.activity_type.downcase
 
-    if @stream_entry.activity_type == 'Status'
-      @ancestors   = @stream_entry.activity.ancestors
-      @descendants = @stream_entry.activity.descendants
-    end
-
     respond_to do |format|
-      format.html
+      format.html do
+        return gone if @stream_entry.activity.nil?
+
+        if @stream_entry.activity_type == 'Status'
+          @ancestors   = @stream_entry.activity.ancestors
+          @descendants = @stream_entry.activity.descendants
+        end
+      end
+
       format.atom
     end
   end
diff --git a/app/services/fetch_atom_service.rb b/app/services/fetch_atom_service.rb
index 4be7f6355..f2625dcaa 100644
--- a/app/services/fetch_atom_service.rb
+++ b/app/services/fetch_atom_service.rb
@@ -12,6 +12,9 @@ class FetchAtomService < BaseService
     else
       return process_html(fetch(url))
     end
+
+  rescue OpenSSL::SSL::SSLError => e
+    Rails.logger.debug "SSL error: #{e}"
   end
 
   private
diff --git a/app/services/fetch_remote_account_service.rb b/app/services/fetch_remote_account_service.rb
index 5f45f9b28..83a81a61b 100644
--- a/app/services/fetch_remote_account_service.rb
+++ b/app/services/fetch_remote_account_service.rb
@@ -19,5 +19,7 @@ class FetchRemoteAccountService < BaseService
     Rails.logger.debug "Going to webfinger #{username}@#{domain}"
 
     return FollowRemoteAccountService.new.call("#{username}@#{domain}")
+  rescue Nokogiri::XML::XPath::SyntaxError
+    Rails.logger.debug "Invalid XML or missing namespace"
   end
 end
diff --git a/app/services/fetch_remote_status_service.rb b/app/services/fetch_remote_status_service.rb
index 24a63e841..a507fbeed 100644
--- a/app/services/fetch_remote_status_service.rb
+++ b/app/services/fetch_remote_status_service.rb
@@ -31,5 +31,8 @@ class FetchRemoteStatusService < BaseService
     Rails.logger.debug "Going to webfinger #{username}@#{domain}"
 
     return FollowRemoteAccountService.new.call("#{username}@#{domain}")
+  rescue Nokogiri::XML::XPath::SyntaxError
+    Rails.logger.debug "Invalid XML or missing namespace"
+  end
   end
 end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index ee7598c4c..5e010b206 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -85,4 +85,6 @@ Rails.application.configure do
   config.action_mailer.delivery_method = :smtp
 
   config.react.variant = :production
+
+  config.active_record.logger = nil
 end