about summary refs log tree commit diff
path: root/app/services
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2018-09-20 00:10:35 +0200
committerGitHub <noreply@github.com>2018-09-20 00:10:35 +0200
commitf92f1ee80a90fcc88afc4519c0b70f369fef6f62 (patch)
tree56bba13d3b9e81adefd71c6ff5e298a1c13605d4 /app/services
parent554f659f2aa1eb9c0ca64ec1c9c177538434826c (diff)
Support link verification with redirects (#8735)
(e.g. URL shortener)
Diffstat (limited to 'app/services')
-rw-r--r--app/services/verify_link_service.rb18
1 files changed, 17 insertions, 1 deletions
diff --git a/app/services/verify_link_service.rb b/app/services/verify_link_service.rb
index 846751cd5..7d53bc255 100644
--- a/app/services/verify_link_service.rb
+++ b/app/services/verify_link_service.rb
@@ -27,6 +27,22 @@ class VerifyLinkService < BaseService
   def link_back_present?
     return false if @body.empty?
 
-    Nokogiri::HTML(@body).xpath('//a[contains(concat(" ", normalize-space(@rel), " "), " me ")]|//link[contains(concat(" ", normalize-space(@rel), " "), " me ")]').any? { |link| link['href'] == @link_back }
+    links = Nokogiri::HTML(@body).xpath('//a[contains(concat(" ", normalize-space(@rel), " "), " me ")]|//link[contains(concat(" ", normalize-space(@rel), " "), " me ")]')
+
+    if links.any? { |link| link['href'] == @link_back }
+      true
+    elsif links.empty?
+      false
+    else
+      link_redirects_back?(links.first['href'])
+    end
+  end
+
+  def link_redirects_back?(test_url)
+    redirect_to_url = Request.new(:head, test_url, follow: false).perform do |res|
+      res.headers['Location']
+    end
+
+    redirect_to_url == @link_back
   end
 end