Sha256: 7d5dcbfc1ef8e20e6332087da26b224cd09de1a6cb833708b3df9f24807e7588

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

require 'keychain'
require 'userinput'

module Keylime
  ##
  # Easy wrapper around getting and setting secrets
  class Credential
    def initialize(params = {})
      @options = params
    end

    def get
      keychain_segment.where(@options).first
    end

    def get!(message)
      get || prompt(message)
    end

    def set(value)
      delete!
      keychain_segment.create(@options.merge(password: value))
    end

    def delete!
      get && keychain_segment.where(@options).first.delete
      nil
    end

    private

    def prompt(message)
      set UserInput.new(
        message: message,
        secret: true,
        attempts: 3,
        validation: /.+/
      ).ask
    end

    def keychain
      @keychain ||= if @options[:keychain]
                      Keychain.open(@options[:keychain])
                    else
                      Keychain
                    end
    end

    def key_type
      @options[:server] ? :internet_passwords : :generic_passwords
    end

    def keychain_segment
      @keychain_segment ||= keychain.send(key_type)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
keylime-0.0.2-x86_64-darwin-15 lib/keylime/credential.rb