]> cat aescling's git repositories - mastodon.git/commitdiff
Add locality check to ActivityPub::FetchRemoteAccountService (#9109)
authorEugen Rochko <eugen@zeonfederated.com>
Fri, 26 Oct 2018 21:08:34 +0000 (23:08 +0200)
committerGitHub <noreply@github.com>
Fri, 26 Oct 2018 21:08:34 +0000 (23:08 +0200)
* Add locality check to ActivityPub::FetchRemoteAccountService

Fix #8643

Because there are a few places where it is called, it is difficult
to confirm if they all previously checked it for locality. It's better
to make sure within the service.

* Remove faux-remote duplicates of local accounts

app/services/activitypub/fetch_remote_account_service.rb
db/migrate/20181026034033_remove_faux_remote_account_duplicates.rb [new file with mode: 0644]
db/schema.rb

index 1ec9ee5dd6358feb12da0122637126e14b875094..8430d12d5450f9179e0fa7315cea9344c7020592 100644 (file)
@@ -5,9 +5,10 @@ class ActivityPub::FetchRemoteAccountService < BaseService
 
   SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze
 
-  # Should be called when uri has already been checked for locality
   # Does a WebFinger roundtrip on each call
   def call(uri, id: true, prefetched_body: nil, break_on_redirect: false)
+    return ActivityPub::TagManager.instance.uri_to_resource(uri, Account) if ActivityPub::TagManager.instance.local_uri?(uri)
+
     @json = if prefetched_body.nil?
               fetch_resource(uri, id)
             else
diff --git a/db/migrate/20181026034033_remove_faux_remote_account_duplicates.rb b/db/migrate/20181026034033_remove_faux_remote_account_duplicates.rb
new file mode 100644 (file)
index 0000000..bd4f4c2
--- /dev/null
@@ -0,0 +1,16 @@
+class RemoveFauxRemoteAccountDuplicates < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    local_domain = Rails.configuration.x.local_domain
+
+    # Just a safety measure to ensure that under no circumstance
+    # we will query `domain IS NULL` because that would return
+    # actually local accounts, the originals
+    return if local_domain.nil?
+
+    Account.where(domain: local_domain).in_batches.destroy_all
+  end
+
+  def down; end
+end
index 3c4f41648e1a2336d2f5cea647fcbde399ff0d8a..731a84521e01c448a3d3cb2effa2d70a8a6933b6 100644 (file)
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 2018_10_24_224956) do
+ActiveRecord::Schema.define(version: 2018_10_26_034033) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"