class HamburgerStore

Data store for pipeline instance metadata. Nothing to do with hamburgers. Sorry.

Public Class Methods

new(options = {}) click to toggle source
# File lib/hamburgerstore.rb, line 38
def initialize(options = {})
  check_kms(options)
  check_dynamo(options)

  fail 'need to specify table_name parameter' if options[:table_name].nil?
  @table = @ddb.table(options[:table_name])
end

Public Instance Methods

check_dynamo(options) click to toggle source
# File lib/hamburgerstore.rb, line 29
def check_dynamo(options)
  if options[:dynamo].nil?
    fail 'need to specify region' if options[:region].nil?
    @ddb = Aws::DynamoDB::Resource.new region: options[:region]
  else
    @ddb = options[:dynamo]
  end
end
check_kms(options) click to toggle source
# File lib/hamburgerstore.rb, line 18
def check_kms(options)
  # fail 'need to specify kms key_id parameter' if options[:key_id].nil?
  @key_id = options[:key_id]
  if options[:kms].nil?
    fail 'need to specify region' if options[:region].nil?
    @kms = Aws::KMS::Client.new region: options[:region]
  else
    @kms = options[:kms]
  end
end
ddb_get_item(identifier) click to toggle source
# File lib/hamburgerstore.rb, line 54
def ddb_get_item(identifier)
  item = @table.get_item(key: { 'hamburger' => identifier }).item
  if item.nil?
    fail HamburgerNoItemInTableError, "No values for '#{identifier}' found in table."
  end
  item
end
decrypt(value) click to toggle source
# File lib/hamburgerstore.rb, line 12
def decrypt(value)
  fail HamburgerKeyNotFoundInItemError, 'The key' if value.nil?
  encrypted_value = Base64.decode64(value)
  @kms.decrypt(ciphertext_blob: encrypted_value).plaintext.strip
end
encrypt(value) click to toggle source
# File lib/hamburgerstore.rb, line 6
def encrypt(value)
  value = ' ' if value.length < 1
  encrypted_value = @kms.encrypt(key_id: @key_id, plaintext: value).ciphertext_blob
  Base64.encode64(encrypted_value)
end
retrieve(identifier, key) click to toggle source
# File lib/hamburgerstore.rb, line 62
def retrieve(identifier, key)
  error = nil
  begin
    item = ddb_get_item(identifier)
  rescue StandardError => e
    error = e
  end
  if !error.nil? || item.nil? || item[key].nil?
    fail HamburgerKeyNotFoundInItemError, "The key '#{key}' was not found in '#{identifier}' hamburger store."
  end
  decrypt(item[key])
end
retrieve_all(identifier) click to toggle source
# File lib/hamburgerstore.rb, line 75
def retrieve_all(identifier)
  encrypted_items = ddb_get_item(identifier)
  hamburger = encrypted_items.delete('hamburger')
  result = { 'hamburger' => hamburger }
  encrypted_items.each_pair do |key, value|
    result[key] = decrypt(value)
  end
  result
end
store(identifer, key, value) click to toggle source
# File lib/hamburgerstore.rb, line 46
def store(identifer, key, value)
  fail 'need to specify kms key_id parameter' if @key_id.nil?
  item = @table.get_item(key: { 'hamburger' => identifer }).item
  item = { 'hamburger' => identifer } if item.nil?
  item[key] = encrypt(value)
  @table.put_item(item: item, return_values: :ALL_OLD)
end