summaryrefslogtreecommitdiffstats
path: root/app/services/activitypub/process_account_service.rb
diff options
context:
space:
mode:
authorThibG <thib@sitedethib.com>2020-02-24 21:15:53 +0100
committerGitHub <noreply@github.com>2020-02-24 21:15:53 +0100
commit3704402dcce6775c32350d09cd3dc7d2ba95105a (patch)
tree2c88f3a73e25614fecea66158cd7cd7de9a78a29 /app/services/activitypub/process_account_service.rb
parent5158dbeb25f64fd6fad44deb454ce354c95bd1ce (diff)
Fix duplicate accounts being created when fetching an account for its key only (#13147)
Fixes #13136 When a user's canonical acct domain is different from its id's domain (WEB_DOMAIN ≠ LOCAL_DOMAIN), two webfinger queries are required to find the canonical domain from the URI. However, we skip webfinger queries when updating only the key of a remote user, which led to the creation of a duplicate account, using the URI's domain instead of the canonical acct: one.
Diffstat (limited to 'app/services/activitypub/process_account_service.rb')
-rw-r--r--app/services/activitypub/process_account_service.rb7
1 files changed, 4 insertions, 3 deletions
diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb
index cef658e191e..d5ede03886a 100644
--- a/app/services/activitypub/process_account_service.rb
+++ b/app/services/activitypub/process_account_service.rb
@@ -18,9 +18,10 @@ class ActivityPub::ProcessAccountService < BaseService
RedisLock.acquire(lock_options) do |lock|
if lock.acquired?
- @account = Account.find_remote(@username, @domain)
- @old_public_key = @account&.public_key
- @old_protocol = @account&.protocol
+ @account = Account.remote.find_by(uri: @uri) if @options[:only_key]
+ @account ||= Account.find_remote(@username, @domain)
+ @old_public_key = @account&.public_key
+ @old_protocol = @account&.protocol
create_account if @account.nil?
update_account