summaryrefslogtreecommitdiffstats
path: root/app/services
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-02-28 14:26:26 +0100
committerEugen Rochko <eugen@zeonfederated.com>2016-02-28 14:26:26 +0100
commitad5ae3f60e5e0745912bfbc0926f6cf8bc6e9eb4 (patch)
tree628535474e7f446869cab55f8cdcde56798229be /app/services
parent2825991e09272d6e7227da9d9b8dc387614a83df (diff)
Update profile information and download avatar of remote accounts
Diffstat (limited to 'app/services')
-rw-r--r--app/services/follow_remote_account_service.rb15
-rw-r--r--app/services/process_feed_service.rb8
-rw-r--r--app/services/process_interaction_service.rb6
-rw-r--r--app/services/update_remote_profile_service.rb19
4 files changed, 38 insertions, 10 deletions
diff --git a/app/services/follow_remote_account_service.rb b/app/services/follow_remote_account_service.rb
index 8e01991347c..f52a3a222fd 100644
--- a/app/services/follow_remote_account_service.rb
+++ b/app/services/follow_remote_account_service.rb
@@ -58,16 +58,7 @@ class FollowRemoteAccountService < BaseService
def get_profile(xml, account)
author = xml.at_xpath('/xmlns:feed/xmlns:author')
-
- 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
+ update_remote_profile_service.(author, account)
end
def magic_key_to_pem(magic_key)
@@ -81,6 +72,10 @@ class FollowRemoteAccountService < BaseService
key.to_pem
end
+ def update_remote_profile_service
+ @update_remote_profile_service ||= UpdateRemoteProfileService.new
+ end
+
def http_client
HTTP
end
diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb
index 6ce74e32d72..1c85942f39e 100644
--- a/app/services/process_feed_service.rb
+++ b/app/services/process_feed_service.rb
@@ -5,6 +5,10 @@ class ProcessFeedService < BaseService
def call(body, account)
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|
next unless [:note, :comment, :activity].includes? object_type(entry)
@@ -126,4 +130,8 @@ class ProcessFeedService < BaseService
def process_mentions_service
@process_mentions_service ||= ProcessMentionsService.new
end
+
+ def update_remote_profile_service
+ @update_remote_profile_service ||= UpdateRemoteProfileService.new
+ end
end
diff --git a/app/services/process_interaction_service.rb b/app/services/process_interaction_service.rb
index 7bd813c0e1d..b5ceaac06c0 100644
--- a/app/services/process_interaction_service.rb
+++ b/app/services/process_interaction_service.rb
@@ -19,6 +19,8 @@ class ProcessInteractionService < BaseService
end
if salmon.verify(envelope, account.keypair)
+ update_remote_profile_service.(xml.at_xpath('/xmlns:entry/xmlns:author'), account)
+
case verb(xml)
when :follow
follow!(account, target_account)
@@ -86,4 +88,8 @@ class ProcessInteractionService < BaseService
def process_feed_service
@process_feed_service ||= ProcessFeedService.new
end
+
+ def update_remote_profile_service
+ @update_remote_profile_service ||= UpdateRemoteProfileService.new
+ end
end
diff --git a/app/services/update_remote_profile_service.rb b/app/services/update_remote_profile_service.rb
new file mode 100644
index 00000000000..5f1d3caebf7
--- /dev/null
+++ b/app/services/update_remote_profile_service.rb
@@ -0,0 +1,19 @@
+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