setting to exclude rel nofollow from particular domains
This commit is contained in:
parent
80929ead4b
commit
f68f59c24f
|
@ -30,8 +30,6 @@ class SiteSetting < ActiveRecord::Base
|
||||||
client_setting(:max_topic_title_length, 255)
|
client_setting(:max_topic_title_length, 255)
|
||||||
client_setting(:flush_timings_secs, 5)
|
client_setting(:flush_timings_secs, 5)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# settings only available server side
|
# settings only available server side
|
||||||
setting(:auto_track_topics_after, 60000)
|
setting(:auto_track_topics_after, 60000)
|
||||||
setting(:long_polling_interval, 15000)
|
setting(:long_polling_interval, 15000)
|
||||||
|
@ -92,6 +90,7 @@ class SiteSetting < ActiveRecord::Base
|
||||||
setting(:allow_duplicate_topic_titles, false)
|
setting(:allow_duplicate_topic_titles, false)
|
||||||
|
|
||||||
setting(:add_rel_nofollow_to_user_content, true)
|
setting(:add_rel_nofollow_to_user_content, true)
|
||||||
|
setting(:exclude_rel_nofollow_domains, '')
|
||||||
setting(:post_excerpt_maxlength, 300)
|
setting(:post_excerpt_maxlength, 300)
|
||||||
setting(:post_onebox_maxlength, 500)
|
setting(:post_onebox_maxlength, 500)
|
||||||
setting(:best_of_score_threshold, 15)
|
setting(:best_of_score_threshold, 15)
|
||||||
|
|
|
@ -220,6 +220,7 @@ en:
|
||||||
category_featured_topics: "number of topics displayed in the category list"
|
category_featured_topics: "number of topics displayed in the category list"
|
||||||
popup_delay: "Length of time in ms before popups appear on the screen"
|
popup_delay: "Length of time in ms before popups appear on the screen"
|
||||||
add_rel_nofollow_to_user_content: "Add rel nofollow to all submitted user content, except for internal links (including parent domains) changing this requires you update all your baked markdown"
|
add_rel_nofollow_to_user_content: "Add rel nofollow to all submitted user content, except for internal links (including parent domains) changing this requires you update all your baked markdown"
|
||||||
|
exclude_rel_nofollow_domains: "A comma delimited list of domains where nofollow is not added (tld.com will automatically allow sub.tld.com as well)"
|
||||||
post_excerpt_maxlength: "Maximum length in chars of a post's excerpt."
|
post_excerpt_maxlength: "Maximum length in chars of a post's excerpt."
|
||||||
post_onebox_maxlength: "Maximum length of a oneboxed discourse post."
|
post_onebox_maxlength: "Maximum length of a oneboxed discourse post."
|
||||||
category_post_template: "The post template that appears once you create a category"
|
category_post_template: "The post template that appears once you create a category"
|
||||||
|
|
|
@ -180,6 +180,11 @@ module PrettyText
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.add_rel_nofollow_to_user_content(html)
|
def self.add_rel_nofollow_to_user_content(html)
|
||||||
|
whitelist = []
|
||||||
|
l = SiteSetting.exclude_rel_nofollow_domains
|
||||||
|
if l.present?
|
||||||
|
whitelist = l.split(",")
|
||||||
|
end
|
||||||
site_uri = nil
|
site_uri = nil
|
||||||
doc = Nokogiri::HTML.fragment(html)
|
doc = Nokogiri::HTML.fragment(html)
|
||||||
doc.css("a").each do |l|
|
doc.css("a").each do |l|
|
||||||
|
@ -188,7 +193,7 @@ module PrettyText
|
||||||
uri = URI(href)
|
uri = URI(href)
|
||||||
site_uri ||= URI(Discourse.base_url)
|
site_uri ||= URI(Discourse.base_url)
|
||||||
|
|
||||||
if !uri.host.present? || uri.host.ends_with?(site_uri.host)
|
if !uri.host.present? || uri.host.ends_with?(site_uri.host) || whitelist.any?{|u| uri.host.ends_with?(u)}
|
||||||
# we are good no need for nofollow
|
# we are good no need for nofollow
|
||||||
else
|
else
|
||||||
l["rel"] = "nofollow"
|
l["rel"] = "nofollow"
|
||||||
|
|
|
@ -79,6 +79,7 @@ test
|
||||||
describe "rel nofollow" do
|
describe "rel nofollow" do
|
||||||
before do
|
before do
|
||||||
SiteSetting.stubs(:add_rel_nofollow_to_user_content).returns(true)
|
SiteSetting.stubs(:add_rel_nofollow_to_user_content).returns(true)
|
||||||
|
SiteSetting.stubs(:exclude_rel_nofollow_domains).returns("foo.com,bar.com")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should inject nofollow in all user provided links" do
|
it "should inject nofollow in all user provided links" do
|
||||||
|
@ -92,6 +93,14 @@ test
|
||||||
it "should not inject nofollow in all subdomain links" do
|
it "should not inject nofollow in all subdomain links" do
|
||||||
(PrettyText.cook("<a href='#{Discourse.base_url.sub('http://', 'http://bla.')}/test.html'>cnn</a>") !~ /nofollow/).should be_true
|
(PrettyText.cook("<a href='#{Discourse.base_url.sub('http://', 'http://bla.')}/test.html'>cnn</a>") !~ /nofollow/).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should not inject nofollow for foo.com" do
|
||||||
|
(PrettyText.cook("<a href='http://foo.com/test.html'>cnn</a>") !~ /nofollow/).should be_true
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should not inject nofollow for bar.foo.com" do
|
||||||
|
(PrettyText.cook("<a href='http://bar.foo.com/test.html'>cnn</a>") !~ /nofollow/).should be_true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Excerpt" do
|
describe "Excerpt" do
|
||||||
|
|
Loading…
Reference in New Issue