Sha256: 05246e8b02e4a615760c22e3f661b468a34053c06e30d37e848a254d3fc68dee

Contents?: true

Size: 971 Bytes

Versions: 1

Compression:

Stored size: 971 Bytes

Contents

module Keyrack
  class Database
    def initialize(key, iv, store)
      @key = key
      @iv = iv
      @store = store
      @data = decrypt
      @dirty = false
    end

    def add(site, username, password)
      @data[site] = { :username => username, :password => password }
      @dirty = true
    end

    def get(site)
      @data[site]
    end

    def sites
      @data.keys
    end

    def dirty?
      @dirty
    end

    def save
      cipher = OpenSSL::Cipher::Cipher.new("AES-128-CBC")
      cipher.encrypt; cipher.key = @key; cipher.iv = @iv
      @store.write(cipher.update(Marshal.dump(@data)) + cipher.final)
      @dirty = false
    end

    private
      def decrypt
        data = @store.read
        if data
          cipher = OpenSSL::Cipher::Cipher.new("AES-128-CBC")
          cipher.decrypt; cipher.key = @key; cipher.iv = @iv
          Marshal.load(cipher.update(data) + cipher.final)
        else
          {}
        end
      end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
keyrack-0.2.0 lib/keyrack/database.rb