about summary refs log tree commit diff
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 8e0199134..f52a3a222 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 6ce74e32d..1c85942f3 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 7bd813c0e..b5ceaac06 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 000000000..5f1d3caeb
--- /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