From 3731230c6d25f248afa8a17b62b3db70fdfe1e03 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 3 Nov 2016 16:57:44 +0100 Subject: Allow @username@domain/@username in follow form, prevent duplicate accounts created via remote look-up when domains differ but point to the same resource --- app/services/follow_remote_account_service.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'app/services') diff --git a/app/services/follow_remote_account_service.rb b/app/services/follow_remote_account_service.rb index 0a95badb2..b309425a8 100644 --- a/app/services/follow_remote_account_service.rb +++ b/app/services/follow_remote_account_service.rb @@ -15,16 +15,25 @@ class FollowRemoteAccountService < BaseService return nil if DomainBlock.blocked?(domain) account = Account.find_remote(username, domain) - return account unless account.nil? - Rails.logger.debug "Creating new remote account for #{uri}" + Rails.logger.debug "Looking up webfinger for #{uri}" + account = Account.new(username: username, domain: domain) data = Goldfinger.finger("acct:#{uri}") raise Goldfinger::Error, 'Missing resource links' if data.link('http://schemas.google.com/g/2010#updates-from').nil? || data.link('salmon').nil? || data.link('http://webfinger.net/rel/profile-page').nil? || data.link('magic-public-key').nil? + confirmed_username, confirmed_domain = data.subject.gsub(/\Aacct:/, '').split('@') + + return Account.find_local(confirmed_username) if TagManager.instance.local_domain?(confirmed_domain) + + confirmed_account = Account.find_remote(confirmed_username, confirmed_domain) + return confirmed_account unless confirmed_account.nil? + + Rails.logger.debug "Creating new remote account for #{uri}" + account.remote_url = data.link('http://schemas.google.com/g/2010#updates-from').href account.salmon_url = data.link('salmon').href account.url = data.link('http://webfinger.net/rel/profile-page').href -- cgit