2016-11-15 15:56:29 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-09-09 18:04:34 +00:00
|
|
|
require 'singleton'
|
|
|
|
|
|
|
|
class TagManager
|
|
|
|
include Singleton
|
|
|
|
include RoutingHelper
|
|
|
|
|
2017-04-15 00:15:46 +00:00
|
|
|
def web_domain?(domain)
|
|
|
|
domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.web_domain).zero?
|
|
|
|
end
|
|
|
|
|
2016-10-06 14:36:16 +00:00
|
|
|
def local_domain?(domain)
|
2016-11-15 15:56:29 +00:00
|
|
|
domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.local_domain).zero?
|
2016-10-06 14:36:16 +00:00
|
|
|
end
|
|
|
|
|
2017-04-25 00:47:31 +00:00
|
|
|
def normalize_domain(domain)
|
2017-05-05 00:23:01 +00:00
|
|
|
return if domain.nil?
|
|
|
|
|
2017-04-25 00:47:31 +00:00
|
|
|
uri = Addressable::URI.new
|
2017-05-05 00:23:01 +00:00
|
|
|
uri.host = domain.gsub(/[\/]/, '')
|
2017-07-15 15:24:35 +00:00
|
|
|
uri.normalized_host
|
2017-04-25 00:47:31 +00:00
|
|
|
end
|
|
|
|
|
2017-03-28 12:16:08 +00:00
|
|
|
def same_acct?(canonical, needle)
|
|
|
|
return true if canonical.casecmp(needle).zero?
|
|
|
|
username, domain = needle.split('@')
|
|
|
|
local_domain?(domain) && canonical.casecmp(username).zero?
|
|
|
|
end
|
|
|
|
|
2017-01-27 15:55:06 +00:00
|
|
|
def local_url?(url)
|
2017-04-25 00:47:31 +00:00
|
|
|
uri = Addressable::URI.parse(url).normalize
|
2017-01-27 15:55:06 +00:00
|
|
|
domain = uri.host + (uri.port ? ":#{uri.port}" : '')
|
2017-09-13 12:22:16 +00:00
|
|
|
TagManager.instance.web_domain?(domain)
|
2017-01-27 15:55:06 +00:00
|
|
|
end
|
|
|
|
|
2016-09-09 18:04:34 +00:00
|
|
|
def url_for(target)
|
|
|
|
return target.url if target.respond_to?(:local?) && !target.local?
|
|
|
|
|
|
|
|
case target.object_type
|
|
|
|
when :person
|
2017-03-22 18:26:22 +00:00
|
|
|
short_account_url(target)
|
|
|
|
when :note, :comment, :activity
|
|
|
|
short_account_status_url(target.account, target)
|
2016-09-09 18:04:34 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|