about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorThibG <thib@sitedethib.com>2017-04-15 02:15:46 +0200
committerEugen <eugen@zeonfederated.com>2017-04-15 02:15:46 +0200
commita9529d3b4b057eeb3b47943b271ad6605e22732d (patch)
treece574918a357859d321f146b3c7bf0f34acad0cd /app
parent0d2910478a6b1659f4c40e64cf28cf2e64dfb01e (diff)
Allow running mastodon on a different domain as the one used for identifying users (#1267)
* Allow running mastodon on a different domain as the one used for identifying users

* Alter documentation of WEB_DOMAIN to make clear it shouldn't be used unless the admin knows what they are doing

* Compare to web_domain instead of local_domain when dealing with feeds/API

* Correctly identify mentions to local accounts

Mentions URLs point to the person's web profile, i.e., the user page served on WEB_DOMAIN.
Diffstat (limited to 'app')
-rw-r--r--app/controllers/api/push_controller.rb2
-rw-r--r--app/lib/tag_manager.rb4
-rw-r--r--app/services/process_feed_service.rb2
3 files changed, 6 insertions, 2 deletions
diff --git a/app/controllers/api/push_controller.rb b/app/controllers/api/push_controller.rb
index 78d4e36e6..f2ddfd969 100644
--- a/app/controllers/api/push_controller.rb
+++ b/app/controllers/api/push_controller.rb
@@ -30,7 +30,7 @@ class Api::PushController < ApiController
     params = Rails.application.routes.recognize_path(uri.path)
     domain = uri.host + (uri.port ? ":#{uri.port}" : '')
 
-    return unless TagManager.instance.local_domain?(domain) && params[:controller] == 'accounts' && params[:action] == 'show' && params[:format] == 'atom'
+    return unless TagManager.instance.web_domain?(domain) && params[:controller] == 'accounts' && params[:action] == 'show' && params[:format] == 'atom'
 
     Account.find_local(params[:username])
   end
diff --git a/app/lib/tag_manager.rb b/app/lib/tag_manager.rb
index 07b2fb91e..f26c943d2 100644
--- a/app/lib/tag_manager.rb
+++ b/app/lib/tag_manager.rb
@@ -56,6 +56,10 @@ class TagManager
     id.start_with?("tag:#{Rails.configuration.x.local_domain}")
   end
 
+  def web_domain?(domain)
+    domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.web_domain).zero?
+  end
+
   def local_domain?(domain)
     domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.local_domain).zero?
   end
diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb
index a2def4535..321f53f22 100644
--- a/app/services/process_feed_service.rb
+++ b/app/services/process_feed_service.rb
@@ -163,7 +163,7 @@ class ProcessFeedService < BaseService
 
         url = Addressable::URI.parse(link['href'])
 
-        mentioned_account = if TagManager.instance.local_domain?(url.host)
+        mentioned_account = if TagManager.instance.web_domain?(url.host)
                               Account.find_local(url.path.gsub('/users/', ''))
                             else
                               Account.find_by(url: link['href']) || FetchRemoteAccountService.new.call(link['href'])