Merge branch 'master' into glitch-soc/merge-upstream

signup-info-prompt
Thibaut Girka 2018-09-20 18:36:00 +02:00
commit 343acd96cc
3 changed files with 34 additions and 2 deletions

View File

@ -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

View File

@ -47,7 +47,7 @@ es:
one: Seguidor
other: Seguidores
following: Siguiendo
joined: Se unió el %{fecha}
joined: Se unió el %{date}
media: Media
moved_html: "%{name} se ha trasladado a %{new_profile_link}:"
network_hidden: Esta información no está disponible

View File

@ -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) { '' }