gh/stable
parent
947887f261
commit
51b2f789bd
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
module AuthorExtractor
|
module AuthorExtractor
|
||||||
def author_from_xml(xml)
|
def author_from_xml(xml, update_profile = true)
|
||||||
return nil if xml.nil?
|
return nil if xml.nil?
|
||||||
|
|
||||||
# Try <email> for acct
|
# Try <email> for acct
|
||||||
|
@ -18,6 +18,6 @@ module AuthorExtractor
|
||||||
acct = "#{username}@#{domain}"
|
acct = "#{username}@#{domain}"
|
||||||
end
|
end
|
||||||
|
|
||||||
FollowRemoteAccountService.new.call(acct)
|
FollowRemoteAccountService.new.call(acct, update_profile)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ class FetchRemoteAccountService < BaseService
|
||||||
xml = Nokogiri::XML(body)
|
xml = Nokogiri::XML(body)
|
||||||
xml.encoding = 'utf-8'
|
xml.encoding = 'utf-8'
|
||||||
|
|
||||||
account = author_from_xml(xml.at_xpath('/xmlns:feed', xmlns: TagManager::XMLNS))
|
account = author_from_xml(xml.at_xpath('/xmlns:feed', xmlns: TagManager::XMLNS), false)
|
||||||
|
|
||||||
UpdateRemoteProfileService.new.call(xml, account) unless account.nil?
|
UpdateRemoteProfileService.new.call(xml, account) unless account.nil?
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ class FollowRemoteAccountService < BaseService
|
||||||
# important information from their feed
|
# important information from their feed
|
||||||
# @param [String] uri User URI in the form of username@domain
|
# @param [String] uri User URI in the form of username@domain
|
||||||
# @return [Account]
|
# @return [Account]
|
||||||
def call(uri, redirected = nil)
|
def call(uri, update_profile = true, redirected = nil)
|
||||||
username, domain = uri.split('@')
|
username, domain = uri.split('@')
|
||||||
|
|
||||||
return Account.find_local(username) if TagManager.instance.local_domain?(domain)
|
return Account.find_local(username) if TagManager.instance.local_domain?(domain)
|
||||||
|
@ -29,7 +29,7 @@ class FollowRemoteAccountService < BaseService
|
||||||
confirmed_username, confirmed_domain = data.subject.gsub(/\Aacct:/, '').split('@')
|
confirmed_username, confirmed_domain = data.subject.gsub(/\Aacct:/, '').split('@')
|
||||||
|
|
||||||
unless confirmed_username.casecmp(username).zero? && confirmed_domain.casecmp(domain).zero?
|
unless confirmed_username.casecmp(username).zero? && confirmed_domain.casecmp(domain).zero?
|
||||||
return call("#{confirmed_username}@#{confirmed_domain}", true) if redirected.nil?
|
return call("#{confirmed_username}@#{confirmed_domain}", update_profile, true) if redirected.nil?
|
||||||
raise Goldfinger::Error, 'Requested and returned acct URI do not match'
|
raise Goldfinger::Error, 'Requested and returned acct URI do not match'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ class FollowRemoteAccountService < BaseService
|
||||||
|
|
||||||
begin
|
begin
|
||||||
account.save!
|
account.save!
|
||||||
get_profile(body, account)
|
get_profile(body, account) if update_profile
|
||||||
rescue ActiveRecord::RecordNotUnique
|
rescue ActiveRecord::RecordNotUnique
|
||||||
# The account has been added by another worker!
|
# The account has been added by another worker!
|
||||||
return Account.find_remote(confirmed_username, confirmed_domain)
|
return Account.find_remote(confirmed_username, confirmed_domain)
|
||||||
|
|
Reference in New Issue