class OnePass::Password
Fork out to `pinentry` for password
Constants
- DEFAULT
- DESCRIPTION
Public Class Methods
new(opts = {})
click to toggle source
# File lib/OnePass/password.rb, line 12 def initialize(opts = {}) @config = OpenStruct.new DEFAULT.merge(opts) if @config.vault_path @config.description ||= "#{DESCRIPTION}%0a#{@config.vault_path}" end end
Public Instance Methods
done()
click to toggle source
# File lib/OnePass/password.rb, line 28 def done send 'BYE' @pipe.close end
prompt(error_message = nil)
click to toggle source
# File lib/OnePass/password.rb, line 19 def prompt(error_message = nil) @config.error = error_message @pipe = IO.popen 'pinentry', 'r+' check send_settings fetch_password @password end
Private Instance Methods
check()
click to toggle source
# File lib/OnePass/password.rb, line 75 def check response = @pipe.gets raise 'bad response' unless response.start_with? 'OK' end
command(command, option = nil)
click to toggle source
# File lib/OnePass/password.rb, line 62 def command(command, option = nil) send command, option check end
fetch_password()
click to toggle source
# File lib/OnePass/password.rb, line 46 def fetch_password @password = '' send 'GETPIN' loop do case response = @pipe.gets when /^D .*/ then @password = response[2..-1].chomp when /^OK/ then break else @password = nil break end end rescue Interrupt @password = nil end
option(name, value)
click to toggle source
# File lib/OnePass/password.rb, line 67 def option(name, value) command 'OPTION', "#{name}=#{value}" end
send(command, option = nil)
click to toggle source
# File lib/OnePass/password.rb, line 71 def send(command, option = nil) @pipe.puts "#{command}#{option ? ' ' + option : ''}" end
send_settings()
click to toggle source
# File lib/OnePass/password.rb, line 35 def send_settings command 'SETTITLE', @config.title command 'SETPROMPT', @config.prompt command 'SETERROR', @config.error if @config.error command 'SETDESC', @config.description option 'ttytype', ENV['TERM'] option 'ttyname', $stdin.ttyname option 'display', ENV['DISPLAY'] end