senseobservationsystems/commonsense-ruby-lib

View on GitHub
bin/cs-password

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby

# (C) Ahmy Yulrizka (ahmy@sense-os.nl)

require 'optparse'
require 'io/console'
require 'digest/md5'

options = {password: '', double: false}
OptionParser.new do |opts|
  opts.banner = "Usage: cs password [options]"

  opts.on("-p", "--password password", "pass password as command line") do |v|
    options[:password] = v
  end

  opts.on("-d", "--double-md5", "Hash the password twice") do
    options[:double] = true
  end

  opts.separator ""
  opts.on_tail("-h", "--help", "Show this message") do

    puts opts
    exit
  end
end.parse!

def hash(plaintext)
  Digest::MD5.hexdigest(plaintext)
end

if options[:password].nil? || options[:password].empty?
  print "password:"
  v = STDIN.noecho(&:gets).chomp
  options[:password] = v
end

retval = hash(options[:password])

retval = hash(retval) if options[:double]

puts
puts retval