class Trustworthy::Prompt
Public Class Methods
new(config_file, terminal = HighLine.new)
click to toggle source
# File lib/trustworthy/prompt.rb, line 5 def initialize(config_file, terminal = HighLine.new) @config_file = config_file @terminal = terminal end
Public Instance Methods
_ask(question)
click to toggle source
# File lib/trustworthy/prompt.rb, line 97 def _ask(question) @terminal.ask(question).to_s end
_ask_password(question)
click to toggle source
# File lib/trustworthy/prompt.rb, line 101 def _ask_password(question) @terminal.ask(question) { |q| q.echo = false }.to_s end
_ask_password_with_strength_requirements(question)
click to toggle source
# File lib/trustworthy/prompt.rb, line 105 def _ask_password_with_strength_requirements(question) loop do password = @terminal.ask(question) { |q| q.echo = false }.to_s return password if _strong_password?(password) _error('Password is too weak') end end
_error(message)
click to toggle source
# File lib/trustworthy/prompt.rb, line 125 def _error(message) colored_message = @terminal.color(message, :error) _say(colored_message) end
_say(message)
click to toggle source
# File lib/trustworthy/prompt.rb, line 113 def _say(message) @terminal.say(message) end
_strong_password?(password)
click to toggle source
# File lib/trustworthy/prompt.rb, line 117 def _strong_password?(password) return false unless password =~ /.{8,}/ return false unless password =~ /[0-9]/ return false unless password =~ /[A-Za-z]/ return false unless password =~ /\W/ true end
_unlock_key(settings, usernames_in_use)
click to toggle source
# File lib/trustworthy/prompt.rb, line 70 def _unlock_key(settings, usernames_in_use) # rubocop:disable Metrics/MethodLength username = nil loop do username = _ask('Username: ') if usernames_in_use.include?(username) _error("Key #{username} is already in use") elsif settings.find_key(username).nil? _error("Key #{username} does not exist") else break end end key = nil begin password = _ask_password('Password: ') key = settings.unlock_key(username, password) rescue ArgumentError _error("Password incorrect for #{username}") retry end _say("Unlocked #{username}") [username, key] end
add_user_key(key)
click to toggle source
# File lib/trustworthy/prompt.rb, line 10 def add_user_key(key) Trustworthy::Settings.open(@config_file) do |settings| username = nil loop do username = _ask('Username: ') break unless settings.key?(username) _error("Key #{username} is already in use") end loop do password = _ask_password_with_strength_requirements('Password: ') password_confirm = _ask_password('Password (again): ') if password == password_confirm settings.add_key(key, username, password) break else _error('Passwords do not match.') end end username end end
change_user_password()
click to toggle source
# File lib/trustworthy/prompt.rb, line 34 def change_user_password Trustworthy::Settings.open(@config_file) do |settings| username, key = _unlock_key(settings, []) loop do password = _ask_password_with_strength_requirements('Password: ') password_confirm = _ask_password('Password (again): ') if password == password_confirm settings.add_key(key, username, password) break else _error('Passwords do not match.') end end username end end
unlock_master_key()
click to toggle source
# File lib/trustworthy/prompt.rb, line 53 def unlock_master_key usernames_in_use = [] Trustworthy::Settings.open(@config_file) do |settings| raise 'must have two keys to unlock master key' unless settings.recoverable? username1, key1 = _unlock_key(settings, usernames_in_use) usernames_in_use << username1 _, key2 = _unlock_key(settings, usernames_in_use) master_key = Trustworthy::MasterKey.create_from_keys(key1, key2) _say('Reconstructed master key') master_key end end