class Itamae::Secrets::Cli

Public Instance Methods

get(name) click to toggle source
# File lib/itamae/secrets/cli.rb, line 50
def get(name)
  value = store[name]
  if value
    puts value
  else
    exit 1
  end
end
newkey(name='default') click to toggle source
# File lib/itamae/secrets/cli.rb, line 18
def newkey(name='default')
  if keychain.exist?(name)
    raise ArgumentError, "key #{name} already exists"
  end

  key = case options[:method] || config['generate_method']
  when 'aes-random'
    AesKey.generate_random(name)
  when 'aes-passphrase'
    passphrase = ask_noecho('Passphrase:', $stdin.tty?)
    AesKey.generate_pkcs5(name, passphrase)
  else
    raise ArgumentError, "Unknown method: #{options[:method] || config['generate_method']}"
  end

  keychain.save(key)
end
set(name, value = nil) click to toggle source
# File lib/itamae/secrets/cli.rb, line 39
def set(name, value = nil)
  value ||= if options[:noecho]
              ask_noecho("#{name}:", false)
            else
              $stdin.read.chomp
            end

  store.store(name, value, options[:key])
end

Private Instance Methods

ask_noecho(prompt, confirm = true) click to toggle source
# File lib/itamae/secrets/cli.rb, line 90
def ask_noecho(prompt, confirm = true)
  io_console = false
  begin
    require 'io/console'
    io_console = true
  rescue LoadError
  end

  get = -> do
    if $stdin.tty?
      $stdin.noecho { $stdin.gets.chomp }
    else
      $stdin.gets.chomp
    end
  end

  loop do
    $stdout.print "#{prompt} "
    value = get.call

    break value unless confirm

    $stdout.print "(confirm) #{prompt} "
    break value if value  == get.call

    $stderr.puts "Confirmation didn't match..."
  end
end
base_dir() click to toggle source
# File lib/itamae/secrets/cli.rb, line 69
def base_dir
  unless config['base']
    raise ArgumentError, 'Missing --base'
  end
  Pathname.new config['base']
end
config() click to toggle source
# File lib/itamae/secrets/cli.rb, line 76
def config
  @config ||= config_file.merge(
    'base' => config_file['base'] || options[:base],
  )
end
config_file() click to toggle source
# File lib/itamae/secrets/cli.rb, line 82
def config_file
  @config_file ||= if File.exist?('./.itamae-secrets.yml')
    YAML.load_file('./.itamae-secrets.yml')
  else
    {}
  end
end
keychain() click to toggle source
# File lib/itamae/secrets/cli.rb, line 65
def keychain
  store.keychain
end
store() click to toggle source
# File lib/itamae/secrets/cli.rb, line 61
def store
  @store ||= Store.new base_dir
end