Fix instance actor being incorrectly created when running migrations (#18109)
* Add migration test about instance actor key * Fix old migration * Work around incorrect database state
This commit is contained in:
parent
f47a9ddc9f
commit
33cd80d69c
4 changed files with 20 additions and 1 deletions
|
@ -559,6 +559,12 @@ class Account < ApplicationRecord
|
|||
before_validation :prepare_username, on: :create
|
||||
before_destroy :clean_feed_manager
|
||||
|
||||
def ensure_keys!
|
||||
return unless local? && private_key.blank? && public_key.blank?
|
||||
generate_keys
|
||||
save!
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def prepare_contents
|
||||
|
|
|
@ -13,7 +13,7 @@ module AccountFinderConcern
|
|||
end
|
||||
|
||||
def representative
|
||||
Account.find(-99)
|
||||
Account.find(-99).tap(&:ensure_keys!)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
Account.create!(id: -99, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain)
|
||||
end
|
||||
|
|
|
@ -2,6 +2,14 @@ class AddInstanceActor < ActiveRecord::Migration[5.2]
|
|||
class Account < ApplicationRecord
|
||||
# Dummy class, to make migration possible across version changes
|
||||
validates :username, uniqueness: { scope: :domain, case_sensitive: false }
|
||||
|
||||
before_create :generate_keys
|
||||
|
||||
def generate_keys
|
||||
keypair = OpenSSL::PKey::RSA.new(2048)
|
||||
self.private_key = keypair.to_pem
|
||||
self.public_key = keypair.public_key.to_pem
|
||||
end
|
||||
end
|
||||
|
||||
def up
|
||||
|
|
|
@ -33,6 +33,11 @@ namespace :tests do
|
|||
puts 'AccountConversation records not created as expected'
|
||||
exit(1)
|
||||
end
|
||||
|
||||
if Account.find(-99).private_key.blank?
|
||||
puts 'Instance actor does not have a private key'
|
||||
exit(1)
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Populate the database with test data for 2.4.0'
|
||||
|
|
Loading…
Reference in a new issue