Federate header images, fix open-uri http->https redirection error

This commit is contained in:
Eugen Rochko 2017-03-18 22:51:20 +01:00
parent 5cfc9c7487
commit 2816b1bf8e
6 changed files with 34 additions and 1 deletions

View file

@ -124,6 +124,10 @@ module AtomBuilderHelper
single_link_avatar(xml, account, :original, 120)
end
def link_header(xml, account)
xml.link('rel' => 'header', 'type' => account.header_content_type, 'media:width' => 700, 'media:height' => 335, 'href' => full_asset_url(account.header.url(:original)))
end
def logo(xml, url)
xml.logo url
end
@ -160,6 +164,7 @@ module AtomBuilderHelper
summary xml, account.note
link_alternate xml, TagManager.instance.url_for(account)
link_avatar xml, account
link_header xml, account
portable_contact xml, account
privacy_scope xml, account.locked? ? :private : :public
end

View file

@ -144,7 +144,9 @@ class Account < ApplicationRecord
save!
rescue ActiveRecord::RecordInvalid
self.avatar = nil
self.header = nil
self[:avatar_remote_url] = ''
self[:header_remote_url] = ''
save!
end
@ -159,6 +161,17 @@ class Account < ApplicationRecord
Rails.logger.debug "Error fetching remote avatar: #{e}"
end
def header_remote_url=(url)
parsed_url = URI.parse(url)
return if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.empty? || self[:header_remote_url] == url
self.header = parsed_url
self[:header_remote_url] = url
rescue OpenURI::HTTPError => e
Rails.logger.debug "Error fetching remote header: #{e}"
end
def object_type
:person
end

View file

@ -14,6 +14,7 @@ class UpdateRemoteProfileService < BaseService
unless account.suspended? || DomainBlock.find_by(domain: account.domain)&.reject_media?
account.avatar_remote_url = author_xml.at_xpath('./xmlns:link[@rel="avatar"]', xmlns: TagManager::XMLNS)['href'] unless author_xml.at_xpath('./xmlns:link[@rel="avatar"]', xmlns: TagManager::XMLNS).nil? || author_xml.at_xpath('./xmlns:link[@rel="avatar"]', xmlns: TagManager::XMLNS)['href'].blank?
account.header_remote_url = author_xml.at_xpath('./xmlns:link[@rel="header"]', xmlns: TagManager::XMLNS)['href'] unless author_xml.at_xpath('./xmlns:link[@rel="header"]', xmlns: TagManager::XMLNS).nil? || author_xml.at_xpath('./xmlns:link[@rel="header"]', xmlns: TagManager::XMLNS)['href'].blank?
end
end