From 24dee67d32f51aeb6db50371df682afa8a2b108a Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 9 Feb 2021 18:12:54 +0100 Subject: [PATCH] Create instance actor if it hasn't been properly seeded (#15693) An uncommon but somewhat difficult to digagnose issue is dealing with improperly-seeded databases. In such cases, instance-signed fetches will fail with a ActiveRecord::RecordNotFound error, usually caught and handled as generic 404, leading people to think the remote resource itself has not been found, while it's the local instance actor that does not exist. This commit changes the code so that failure to find the instance actor automatically creates a new one, so that improperly-seeded databases do not cause any issue. --- app/controllers/instance_actors_controller.rb | 2 +- app/models/concerns/account_finder_concern.rb | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/instance_actors_controller.rb b/app/controllers/instance_actors_controller.rb index 4b074ca19267fc..b3b5476e2f5a18 100644 --- a/app/controllers/instance_actors_controller.rb +++ b/app/controllers/instance_actors_controller.rb @@ -13,7 +13,7 @@ def show private def set_account - @account = Account.find(-99) + @account = Account.representative end def restrict_fields_to diff --git a/app/models/concerns/account_finder_concern.rb b/app/models/concerns/account_finder_concern.rb index 04b2c981b17c4a..0dadddad12abf3 100644 --- a/app/models/concerns/account_finder_concern.rb +++ b/app/models/concerns/account_finder_concern.rb @@ -14,6 +14,8 @@ def find_remote!(username, domain) def representative Account.find(-99) + rescue ActiveRecord::RecordNotFound + Account.create!(id: -99, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain) end def find_local(username)