aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/public_body.rb2
-rw-r--r--db/migrate/112_add_api_key_to_public_bodies.rb47
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