]>
git.immae.eu Git - perso/Immae/Projets/Puppet.git/blob - modules/base_installation/lib/puppet/functions/generate_password.rb
4 Puppet
::Functions.create_function(:generate_password) do
5 dispatch
:generate_password do
7 param
'String', :seed_file
8 param
'String', :password_key
9 optional_param
'String', :method
10 optional_param
'Boolean', :encode
14 def generate_password(size
, seed_file
, password_key
, method
= nil, encode
= false)
15 key
= get_key(seed_file
, password_key
)
18 pass
= generate_string(size
, key
)
20 pass
= generate_string(32, key
, binary
= true)
21 pass
[0] = (pass
[0].ord
& 248).chr
22 pass
[31] = ((pass
[31].ord
& 127) | 64).chr
24 raise "Unknown method"
28 Base64
.strict_encode64(pass
).strip
34 def generate_string(size
, key
, binary
= false)
36 set
= (0 .. 255).map
{ |i
| i
.chr
}
38 set
= ('a' .. 'z').to_a +
('A' .. 'Z').to_a +
('0' .. '9').to_a
41 size
.times
.collect
do |i
|
42 set
[OpenSSL
::HMAC.hexdigest(OpenSSL
::Digest.new('sha256'), key
, i
.to_s
).to_i(16) % set
.size
]
46 def get_key(seed_file
, password_key
)
47 "#{File.open(seed_file).read}:#{password_key}"