1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
require "securerandom"
class AddApiKeyToPublicBodies < ActiveRecord::Migration
def self.up
add_column :public_bodies, :api_key, :string
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
end
def self.down
remove_column :public_bodies, :api_key
end
end
|