parent
							
								
									554f659f2a
								
							
						
					
					
						commit
						f92f1ee80a
					
				@ -27,6 +27,22 @@ class VerifyLinkService < BaseService
 | 
				
			|||||||
  def link_back_present?
 | 
					  def link_back_present?
 | 
				
			||||||
    return false if @body.empty?
 | 
					    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
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ RSpec.describe VerifyLinkService, type: :service do
 | 
				
			|||||||
  let(:field)   { Account::Field.new(account, 'name' => 'Website', 'value' => 'http://example.com') }
 | 
					  let(:field)   { Account::Field.new(account, 'name' => 'Website', 'value' => 'http://example.com') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  before do
 | 
					  before do
 | 
				
			||||||
 | 
					    stub_request(:head, 'https://redirect.me/abc').to_return(status: 301, headers: { 'Location' => ActivityPub::TagManager.instance.url_for(account) })
 | 
				
			||||||
    stub_request(:get, 'http://example.com').to_return(status: 200, body: html)
 | 
					    stub_request(:get, 'http://example.com').to_return(status: 200, body: html)
 | 
				
			||||||
    subject.call(field)
 | 
					    subject.call(field)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
@ -56,6 +57,21 @@ RSpec.describe VerifyLinkService, type: :service do
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  context 'when a link goes through a redirect back' do
 | 
				
			||||||
 | 
					    let(:html) do
 | 
				
			||||||
 | 
					      <<-HTML
 | 
				
			||||||
 | 
					        <!doctype html>
 | 
				
			||||||
 | 
					        <head>
 | 
				
			||||||
 | 
					          <link type="text/html" href="https://redirect.me/abc" rel="me" />
 | 
				
			||||||
 | 
					        </head>
 | 
				
			||||||
 | 
					      HTML
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'marks the field as verified' do
 | 
				
			||||||
 | 
					      expect(field.verified?).to be true
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  context 'when a link does not contain a link back' do
 | 
					  context 'when a link does not contain a link back' do
 | 
				
			||||||
    let(:html) { '' }
 | 
					    let(:html) { '' }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user