parent
							
								
									554f659f2a
								
							
						
					
					
						commit
						f92f1ee80a
					
				| @ -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 | ||||
|  | ||||
| @ -7,6 +7,7 @@ RSpec.describe VerifyLinkService, type: :service do | ||||
|   let(:field)   { Account::Field.new(account, 'name' => 'Website', 'value' => 'http://example.com') } | ||||
| 
 | ||||
|   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) | ||||
|     subject.call(field) | ||||
|   end | ||||
| @ -56,6 +57,21 @@ RSpec.describe VerifyLinkService, type: :service do | ||||
|     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 | ||||
|     let(:html) { '' } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user