Sha256: f52b926de5c89db1f8a4cb5444efef8f37d514bdbe9ad99d1f4491a33cf80ecd

Contents?: true

Size: 1.57 KB

Versions: 3

Compression:

Stored size: 1.57 KB

Contents

require 'yaml'
require 'openssl'

module Keystorage
  def list(group=nil)
    Manager.new.list(group)
  end

  def set(group,key,value)
    Manager.new.set(group,key,value)
  end

  def get(group,name)
    Manager.new.get(group,name)
  end

  class Manager

    def initialize(file)
      @file = file
    end

    def list(group=nil)
      data = Hash.new
      if File::exist?(@file)
        File.open(@file,'r') do |f|
          data = YAML.load(f)
          return data.keys unless group
          return data[group].keys
        end
      end
      Hash.new
    end

    def get(group,name)
      raise "missing group" unless group
      raise "missing name" unless name

      File.open(@file,'r') do |f|
        data=YAML.load(f)
        raise "missing key" unless data[group][name]
        return decode(data[group][name])
      end
      false
    end

    def all
      return YAML.load_file(@file) if File.exist?(@file)
      Hash.new
    end

    def set(group,key,value)
      data=all
      data = Hash.new unless data
      data[group] = Hash.new unless data.has_key?(group)
      data[group][key] = encode(value)

      File.open(@file,'w',0600) do |f|
        YAML.dump(data,f)
      end
    end

    def encode(str,salt="3Qw9EtWE")
      enc = OpenSSL::Cipher::Cipher.new('aes256')
      enc.encrypt.pkcs5_keyivgen(salt)
      ((enc.update(str) + enc.final).unpack("H*")).to_s
    end

    def decode(str,salt="3Qw9EtWE")
      dec = OpenSSL::Cipher::Cipher.new('aes256')
      dec.decrypt.pkcs5_keyivgen(salt)
      (dec.update(Array.new([str]).pack("H*")) + dec.final)
    end
  end


end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
keystorage-0.3.0 lib/keystorage/manager.rb
keystorage-0.2.0 lib/keystorage/manager.rb
keystorage-0.1.1 lib/keystorage/manager.rb