class FollowRemoteAccountService
include ApplicationHelper
- def call(uri)
+ def call(uri, subscribe = true)
username, domain = uri.split('@')
account = Account.where(username: username, domain: domain).first
account.public_key = magic_key_to_pem(data.link('magic-public-key').href)
account.private_key = nil
- account.secret = SecureRandom.hex
- account.verify_token = SecureRandom.hex
-
feed = get_feed(account.remote_url)
hubs = feed.xpath('//xmlns:link[@rel="hub"]')
get_profile(feed, account)
account.save!
- subscription = account.subscription(subscription_url(account))
- subscription.subscribe
+ if subscribe
+ account.secret = SecureRandom.hex
+ account.verify_token = SecureRandom.hex
+
+ subscription = account.subscription(subscription_url(account))
+ subscription.subscribe
+
+ account.save!
+ end
return account
rescue Goldfinger::Error, HTTP::Error => e
def add_reblog!(entry, status)
status.reblog = find_original_status(entry, target_id(entry))
+ status.save! unless status.reblog.nil?
end
def add_reply!(entry, status)
status.thread = find_original_status(entry, thread_id(entry))
+ status.save! unless status.thread.nil?
end
def find_original_status(xml, id)
end
def fetch_remote_status(xml, id)
- # todo
+ url = xml.at_xpath('./link[@rel="self"]').attribute('href').value
+ nil
end
def local_id?(id)
rescue
:post
end
+
+ def follow_remote_account_service
+ FollowRemoteAccountService.new
+ end
end
account = Account.find_by(username: username, domain: domain)
if account.nil?
- account = follow_remote_account_service.("acct:#{username}@#{domain}")
+ account = follow_remote_account_service.("acct:#{username}@#{domain}", false)
return if account.nil?
end