class Hiera::Backend::Eyaml::Subcommands::Encrypt

Public Class Methods

description() click to toggle source
# File lib/hiera/backend/eyaml/subcommands/encrypt.rb, line 41
def self.description
  'encrypt some data'
end
execute() click to toggle source
# File lib/hiera/backend/eyaml/subcommands/encrypt.rb, line 67
def self.execute
  case Eyaml::Options[:source]
  when :eyaml
    parser = Parser::ParserFactory.decrypted_parser
    tokens = parser.parse(Eyaml::Options[:input_data])
    encrypted = tokens.map { |token| token.to_encrypted }
    encrypted.join
  else
    encryptor = Encryptor.find
    ciphertext = encryptor.encode(encryptor.encrypt(Eyaml::Options[:input_data]))
    token = Parser::EncToken.new(:block, Eyaml::Options[:input_data], encryptor, ciphertext, nil, '  ')
    case Eyaml::Options[:output]
    when 'block'
      token.to_encrypted label: Eyaml::Options[:label], use_chevron: !Eyaml::Options[:label].nil?,
                         format: :block
    when 'string'
      token.to_encrypted label: Eyaml::Options[:label], format: :string
    when 'examples'
      string = token.to_encrypted label: Eyaml::Options[:label] || 'string', format: :string
      block = token.to_encrypted label: Eyaml::Options[:label] || 'block', format: :block
      "#{string}\n\nOR\n\n#{block}"
    else
      token.to_encrypted format: :string
    end
  end
end
options() click to toggle source
# File lib/hiera/backend/eyaml/subcommands/encrypt.rb, line 11
def self.options
  [{ name: :password,
     description: 'Source input is a password entered on the terminal',
     short: 'p', },
   { name: :string,
     description: 'Source input is a string provided as an argument',
     short: 's',
     type: :string, },
   { name: :file,
     description: 'Source input is a regular file',
     short: 'f',
     type: :string, },
   { name: :stdin,
     description: 'Source input is taken from stdin',
     short: :none, },
   { name: :eyaml,
     description: 'Source input is an eyaml file',
     short: 'e',
     type: :string, },
   { name: :output,
     description: 'Output format of final result (examples, block, string)',
     type: :string,
     short: 'o',
     default: 'examples', },
   { name: :label,
     description: 'Apply a label to the encrypted result',
     short: 'l',
     type: :string, },]
end
validate(options) click to toggle source
# File lib/hiera/backend/eyaml/subcommands/encrypt.rb, line 45
def self.validate(options)
  sources = %i[password string file stdin eyaml].collect { |x| x if options[x] }.compact
  Optimist.die 'You must specify a source' if sources.count.zero?
  Optimist.die "You can only specify one of (#{sources.join(', ')})" if sources.count > 1
  options[:source] = sources.first

  options[:input_data] = case options[:source]
                         when :password
                           require 'hiera/backend/eyaml/highlinehelper'
                           HighlineHelper.read_password
                         when :string
                           options[:string]
                         when :file
                           File.read options[:file]
                         when :stdin
                           STDIN.read
                         when :eyaml
                           File.read options[:eyaml]
                         end
  options
end