class DynamoSecret::CLI
Public Class Methods
new(args)
click to toggle source
# File lib/dynamo_secret/cli.rb, line 10 def initialize(args) @args = args end
Public Instance Methods
run()
click to toggle source
# File lib/dynamo_secret/cli.rb, line 14 def run load_config parse_args(@args) perform_action end
Private Instance Methods
ask_key_pairs(keys, values)
click to toggle source
# File lib/dynamo_secret/cli.rb, line 22 def ask_key_pairs(keys, values) keys = keys.to_s.split(',') values = values.to_s.split(',') if keys.empty? loop do key = ask('Key [ENTER to quit]: ') break if key == '' keys << key end end keys.map.with_index do |key, index| { key => values[index].nil? || values[index] == '-' ? ask("Value for #{key}: ") : values[index] } end end
ask_secret_data()
click to toggle source
# File lib/dynamo_secret/cli.rb, line 37 def ask_secret_data if @args.count > 3 $stderr.puts usage exit 1 else @config[:secret_data][site] = ask_key_pairs(@args.shift, @args.shift) end end
load_config()
click to toggle source
# File lib/dynamo_secret/cli.rb, line 46 def load_config config_file = "#{ENV['HOME']}/.dynamo_secret.yml" @config = File.exist?(config_file) ? YAML.load_file(config_file) : {} @config[:secret_data] = {} end
parse_args(args)
click to toggle source
# File lib/dynamo_secret/cli.rb, line 52 def parse_args(args) OptionParser.new do |opts| opts.banner = usage opts.version = VERSION opts.on('-l', '--list', 'List all sites stored in table') { |_l| @action = 'list' } opts.on('-i', '--init', 'Set up DynamoDB and KMS') { |_i| @action = 'init' } opts.on('-g', '--get', 'Get a secret') { |_g| @action = 'get' } opts.on('-a', '--add', 'Add a new secret') { |_a| @action = 'put' } opts.on('-u', '--update', 'Update an existing secret') { |_u| @action = 'update' } opts.on('-d', '--delete', 'Remove site from table') { |_d| @action = 'delete' } opts.on('-k', '--kms', 'Enable KMS key creation (init only)') { |k| @config[:enable_kms] = k } end.parse!(args) @args = args end
perform_action()
click to toggle source
# File lib/dynamo_secret/cli.rb, line 67 def perform_action case @action when 'init' Secret.new(@config).setup when 'get' @config[:secret_data][site] = [] Secret.new(@config).get(@args.shift) when 'put' ask_secret_data Secret.new(@config).put when 'update' ask_secret_data Secret.new(@config).update when 'delete' @config[:secret_data][site] = [] Secret.new(@config).delete when 'list' DynamoDB.new(@config).list_secrets else $stderr.puts usage exit 1 end end
site()
click to toggle source
# File lib/dynamo_secret/cli.rb, line 91 def site @site ||= @args.any? ? @args.shift : ask('Site: ') end
usage()
click to toggle source
# File lib/dynamo_secret/cli.rb, line 95 def usage 'Usage: dynamo_secret -l|--list dynamo_secret -i|--init [-k|--kms] dynamo_secret -g|--get [site] [key1,key2,...] dynamo_secret -a|--add [site] [key1,key2,...] [val1,val2,...] dynamo_secret -u|--update [site] [key1,key2,...] [val1,val2,...] dynamo_secret -d|--delete [site]' end