diff options
-rw-r--r-- | app/models/public_body.rb | 2 | ||||
-rw-r--r-- | db/migrate/112_add_api_key_to_public_bodies.rb | 47 |
2 files changed, 45 insertions, 4 deletions
diff --git a/app/models/public_body.rb b/app/models/public_body.rb index a372de435..bc8f084bb 100644 --- a/app/models/public_body.rb +++ b/app/models/public_body.rb @@ -95,7 +95,7 @@ class PublicBody < ActiveRecord::Base self.publication_scheme = "" if self.publication_scheme.nil? # Set an API key if there isn’t one - self.api_key = SecureRandom.base64(32) if self.api_key.nil? + self.api_key = SecureRandom.base64(33) if self.api_key.nil? end # like find_by_url_name but also search historic url_name if none found diff --git a/db/migrate/112_add_api_key_to_public_bodies.rb b/db/migrate/112_add_api_key_to_public_bodies.rb index 24961612d..43dccb198 100644 --- a/db/migrate/112_add_api_key_to_public_bodies.rb +++ b/db/migrate/112_add_api_key_to_public_bodies.rb @@ -4,9 +4,50 @@ class AddApiKeyToPublicBodies < ActiveRecord::Migration def self.up add_column :public_bodies, :api_key, :string - PublicBody.find_each do |pb| - pb.api_key = SecureRandom.base64(32) - pb.save! + if ActiveRecord::Base.connection.adapter_name == "PostgreSQL" + execute <<-SQL + update public_bodies + set api_key = encode(decode( + lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + ||lpad(to_hex(floor(random()*256) :: integer), 2, '0') + , 'hex'), 'base64') + SQL + else + PublicBody.find_each do |pb| + pb.api_key = SecureRandom.base64(33) + pb.save! + end end change_column_null :public_bodies, :api_key, false |