From 08b03669c262fd7ea67c7e2e5e5448a98db4ceef Mon Sep 17 00:00:00 2001 From: elijah Date: Sun, 4 Nov 2012 11:30:16 -0800 Subject: added automatic secret generation in secrets.json --- lib/leap_cli/util/secret.rb | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 lib/leap_cli/util/secret.rb (limited to 'lib/leap_cli/util') diff --git a/lib/leap_cli/util/secret.rb b/lib/leap_cli/util/secret.rb new file mode 100644 index 0000000..4833caa --- /dev/null +++ b/lib/leap_cli/util/secret.rb @@ -0,0 +1,37 @@ +# +# A simple alphanumeric secret generator, with no ambiguous characters. +# +# It also includes symbols that are treated as word characters by most +# terminals (so you can still double click to select the entire secret). +# +# Uses OpenSSL random number generator instead of Ruby's rand function +# + +require 'openssl' + +module LeapCli; module Util + + class Secret + + CHARS = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a + "_-&@%~=+".split(//u) - "io01lO".split(//u) + + def self.generate(length = 10) + seed + OpenSSL::Random.random_bytes(length).bytes.to_a.collect { |byte| + CHARS[ byte % CHARS.length ] + }.join + end + + def self.seed + @pid ||= 0 + pid = $$ + if @pid != pid + now = Time.now + OpenSSL::Random.seed( [now.to_i, now.nsec, @pid, pid].join ) + @pid = pid + end + end + + end + +end; end -- cgit v1.2.3