Skip to content
Extraits de code Groupes Projets
Valider ad5ae3f6 rédigé par Eugen Rochko's avatar Eugen Rochko
Parcourir les fichiers

Update profile information and download avatar of remote accounts

parent 2825991e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -100,7 +100,7 @@ module AtomHelper ...@@ -100,7 +100,7 @@ module AtomHelper
def disambiguate_uri(target) def disambiguate_uri(target)
if target.local? if target.local?
if target.object_type == :person if target.object_type == :person
profile_url(name: target.username) profile_url(target)
else else
unique_tag(target.stream_entry.created_at, target.stream_entry.activity_id, target.stream_entry.activity_type) unique_tag(target.stream_entry.created_at, target.stream_entry.activity_id, target.stream_entry.activity_type)
end end
...@@ -112,9 +112,9 @@ module AtomHelper ...@@ -112,9 +112,9 @@ module AtomHelper
def disambiguate_url(target) def disambiguate_url(target)
if target.local? if target.local?
if target.object_type == :person if target.object_type == :person
profile_url(name: target.username) profile_url(target)
else else
status_url(name: target.stream_entry.account.username, id: target.stream_entry.id) status_url(target)
end end
else else
target.url target.url
...@@ -125,12 +125,21 @@ module AtomHelper ...@@ -125,12 +125,21 @@ module AtomHelper
xml.link(rel: 'mentioned', href: disambiguate_uri(account)) xml.link(rel: 'mentioned', href: disambiguate_uri(account))
end end
def link_avatar(xml, account)
xml.link(rel: 'avatar', type: account.avatar_content_type, href: asset_url(account.avatar.url(:large)))
end
def logo(xml, url)
xml.logo url
end
def include_author(xml, account) def include_author(xml, account)
object_type xml, :person object_type xml, :person
uri xml, profile_url(name: account.username) uri xml, profile_url(account)
name xml, account.username name xml, account.username
summary xml, account.note summary xml, account.note
link_alternate xml, profile_url(name: account.username) link_alternate xml, profile_url(account)
link_avatar xml, account
portable_contact xml, account portable_contact xml, account
end end
...@@ -160,6 +169,7 @@ module AtomHelper ...@@ -160,6 +169,7 @@ module AtomHelper
if stream_entry.target.object_type == :person if stream_entry.target.object_type == :person
summary xml, stream_entry.target.content summary xml, stream_entry.target.content
portable_contact xml, stream_entry.target portable_contact xml, stream_entry.target
link_avatar xml, stream_entry.target
end end
# Statuses have content # Statuses have content
...@@ -177,6 +187,6 @@ module AtomHelper ...@@ -177,6 +187,6 @@ module AtomHelper
private private
def root_tag(xml, tag, &block) def root_tag(xml, tag, &block)
xml.send(tag, { :xmlns => 'http://www.w3.org/2005/Atom', 'xmlns:thr' => 'http://purl.org/syndication/thread/1.0', 'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/', 'xmlns:poco' => 'http://portablecontacts.net/spec/1.0' }, &block) xml.send(tag, { :xmlns => 'http://www.w3.org/2005/Atom', 'xmlns:thr' => 'http://purl.org/syndication/thread/1.0', 'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/', 'xmlns:poco' => 'http://portablecontacts.net/spec/1.0', 'xmlns:media' => 'http://purl.org/syndication/atommedia' }, &block)
end end
end end
...@@ -58,16 +58,7 @@ class FollowRemoteAccountService < BaseService ...@@ -58,16 +58,7 @@ class FollowRemoteAccountService < BaseService
def get_profile(xml, account) def get_profile(xml, account)
author = xml.at_xpath('/xmlns:feed/xmlns:author') author = xml.at_xpath('/xmlns:feed/xmlns:author')
update_remote_profile_service.(author, account)
if author.at_xpath('./poco:displayName').nil?
account.display_name = account.username
else
account.display_name = author.at_xpath('./poco:displayName').content
end
unless author.at_xpath('./poco:note').nil?
account.note = author.at_xpath('./poco:note').content
end
end end
def magic_key_to_pem(magic_key) def magic_key_to_pem(magic_key)
...@@ -81,6 +72,10 @@ class FollowRemoteAccountService < BaseService ...@@ -81,6 +72,10 @@ class FollowRemoteAccountService < BaseService
key.to_pem key.to_pem
end end
def update_remote_profile_service
@update_remote_profile_service ||= UpdateRemoteProfileService.new
end
def http_client def http_client
HTTP HTTP
end end
......
...@@ -5,6 +5,10 @@ class ProcessFeedService < BaseService ...@@ -5,6 +5,10 @@ class ProcessFeedService < BaseService
def call(body, account) def call(body, account)
xml = Nokogiri::XML(body) xml = Nokogiri::XML(body)
unless xml.at_xpath('/xmlns:feed').nil?
update_remote_profile_service.(xml.at_xpath('/xmlns:feed/xmlns:author'), account)
end
xml.xpath('//xmlns:entry').each do |entry| xml.xpath('//xmlns:entry').each do |entry|
next unless [:note, :comment, :activity].includes? object_type(entry) next unless [:note, :comment, :activity].includes? object_type(entry)
...@@ -126,4 +130,8 @@ class ProcessFeedService < BaseService ...@@ -126,4 +130,8 @@ class ProcessFeedService < BaseService
def process_mentions_service def process_mentions_service
@process_mentions_service ||= ProcessMentionsService.new @process_mentions_service ||= ProcessMentionsService.new
end end
def update_remote_profile_service
@update_remote_profile_service ||= UpdateRemoteProfileService.new
end
end end
...@@ -19,6 +19,8 @@ class ProcessInteractionService < BaseService ...@@ -19,6 +19,8 @@ class ProcessInteractionService < BaseService
end end
if salmon.verify(envelope, account.keypair) if salmon.verify(envelope, account.keypair)
update_remote_profile_service.(xml.at_xpath('/xmlns:entry/xmlns:author'), account)
case verb(xml) case verb(xml)
when :follow when :follow
follow!(account, target_account) follow!(account, target_account)
...@@ -86,4 +88,8 @@ class ProcessInteractionService < BaseService ...@@ -86,4 +88,8 @@ class ProcessInteractionService < BaseService
def process_feed_service def process_feed_service
@process_feed_service ||= ProcessFeedService.new @process_feed_service ||= ProcessFeedService.new
end end
def update_remote_profile_service
@update_remote_profile_service ||= UpdateRemoteProfileService.new
end
end end
class UpdateRemoteProfileService < BaseService
def call(author_xml, account)
if author_xml.at_xpath('./poco:displayName').nil?
account.display_name = account.username
else
account.display_name = author_xml.at_xpath('./poco:displayName').content
end
unless author_xml.at_xpath('./poco:note').nil?
account.note = author_xml.at_xpath('./poco:note').content
end
unless author_xml.at_xpath('./xmlns:link[@rel="avatar"]').nil?
account.avatar_remote_url = author_xml.at_xpath('./xmlns:link[@rel="avatar"]').attribute('href').value
end
account.save!
end
end
...@@ -4,12 +4,13 @@ Nokogiri::XML::Builder.new do |xml| ...@@ -4,12 +4,13 @@ Nokogiri::XML::Builder.new do |xml|
title xml, @account.display_name title xml, @account.display_name
subtitle xml, @account.note subtitle xml, @account.note
updated_at xml, stream_updated_at updated_at xml, stream_updated_at
logo xml, asset_url(@account.avatar.url(:medium))
author(xml) do author(xml) do
include_author xml, @account include_author xml, @account
end end
link_alternate xml, profile_url(name: @account.username) link_alternate xml, profile_url(@account)
link_self xml, atom_user_stream_url(id: @account.id) link_self xml, atom_user_stream_url(id: @account.id)
link_hub xml, HUB_URL link_hub xml, HUB_URL
link_salmon xml, salmon_url(@account) link_salmon xml, salmon_url(@account)
......
...@@ -7,4 +7,4 @@ ...@@ -7,4 +7,4 @@
%span.num= status.favourites.count %span.num= status.favourites.count
- if status.reply? - if status.reply?
= link_to 'View conversation', status_url(status.thread), class: 'conversation-link' = link_to "In response to #{status.thread.account.acct}", status_url(status.thread), class: 'conversation-link'
...@@ -112,4 +112,12 @@ RSpec.describe AtomHelper, type: :helper do ...@@ -112,4 +112,12 @@ RSpec.describe AtomHelper, type: :helper do
describe '#include_entry' do describe '#include_entry' do
pending pending
end end
describe '#link_avatar' do
pending
end
describe '#logo' do
pending
end
end end
require 'rails_helper' require 'rails_helper'
RSpec.describe ProfileHelper, type: :helper do RSpec.describe ProfileHelper, type: :helper do
describe '#display_name' do
pending
end
describe '#profile_url' do
pending
end
describe '#status_url' do
pending
end
describe '#avatar_for_status_url' do
pending
end
describe '#entry_classes' do
pending
end
describe '#relative_time' do
pending
end
end end
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter