class Cript::CriptCommand

Attributes

options[R]

Public Class Methods

new(argv) click to toggle source
# File lib/cript/cript_command.rb, line 9
def initialize(argv)
  @argv = argv.dup

  @options = {
    mode:    nil,
    infile:  '-',
    outfile: '-',
    public:  File.join(ENV['HOME'], '.ssh/id_rsa.pub'),
    private: File.join(ENV['HOME'], '.ssh/id_rsa'),
    force:   false,
    debug:   false
  }

  parse!
end

Public Instance Methods

run!() click to toggle source
# File lib/cript/cript_command.rb, line 25
def run!
  cripter = build_cripter
  data = read_data
  get_writer do |writer|
    if @options[:mode] == 'encrypt'
      writer.print cripter.encrypt(data)
    else
      writer.print cripter.decrypt(data)
    end
  end
end

Private Instance Methods

build_cripter() click to toggle source

run methods

# File lib/cript/cript_command.rb, line 74
def build_cripter
  if @options[:mode] == 'encrypt'
    Cript::Simple.new(public_key_path: @options[:public])
  elsif @options[:mode] == 'decrypt'
    Cript::Simple.new(private_key_path: @options[:private])
  else
    STDERR.puts "Mode is required (encrypt or decrypt)"
    exit 1
  end
end
get_writer() { |writer| ... } click to toggle source
# File lib/cript/cript_command.rb, line 97
def get_writer
  begin
    if @options[:outfile] == '-'
      writer = STDOUT
    elsif File.file?(@options[:outfile])
      if @options[:force]
        writer = File.open(@options[:outfile], 'wb')
      else
        STDERR.puts "Not overwriting file without force"
        exit 1
      end
    else
      writer = File.open(@options[:outfile], 'wb')
    end

    yield(writer)
  rescue => e
    STDERR.puts "Error writing data: #{e}"
    exit 1
  ensure
    # clean-up
    if writer && @options[:outfile] != '-'
      writer.close
    end
  end
end
parse!() click to toggle source
# File lib/cript/cript_command.rb, line 68
def parse!
  parser.parse!(@argv)
end
parser() click to toggle source
# File lib/cript/cript_command.rb, line 39
def parser
  @parser ||= OptionParser.new do |opts|
    opts.banner = "Usage: cript [options]"

    opts.separator ""
    opts.separator "Mode:"
    opts.on("-e", "--encrypt", "encrypt mode") { @options[:mode] = 'encrypt' }
    opts.on("-d", "--decrypt", "decrypt mode") { @options[:mode] = 'decrypt' }

    opts.separator ""
    opts.separator "Keys:"
    opts.on("--private PRIVATE", "private key path (default: #{@options[:private]})") { |priv| @options[:private] = priv }
    opts.on("--public PUBLIC", "public key path (default: #{@options[:public]})") { |pub| @options[:public] = pub }

    opts.separator ""
    opts.separator "Files:"
    opts.on("-i", "--infile FILE", "infile (default: '#{@options[:infile]}')") { |file| @options[:infile] = file }
    opts.on("-o", "--outfile FILE", "outfile (default: '#{@options[:outfile]}')") { |file| @options[:outfile] = file }
    opts.on("-f", "--force", "force overwrite outfile (default: #{@options[:force]})") { @options[:force] = true }

    opts.separator ""
    opts.separator "Common options:"

    opts.on_tail("-D", "--debug", "Set debugging on") { @options[:debug] = true }
    opts.on_tail("-h", "--help", "Show this message") { puts opts; exit }
    opts.on_tail('-v', '--version', "Show version") { puts Cript::VERSION; exit }
  end
end
read_data() click to toggle source
# File lib/cript/cript_command.rb, line 85
def read_data
  if @options[:infile] == '-'
    # requires ARGV clear
    STDIN.read
  elsif File.file?(@options[:infile])
    File.read(@options[:infile])
  else
    STDERR.puts "Invalid infile: #{@options[:infile]}"
    exit 1
  end
end