Class: HamburgerStore

Inherits:
Object
  • Object
show all
Defined in:
lib/hamburgerstore.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ HamburgerStore

Returns a new instance of HamburgerStore.



36
37
38
39
40
41
42
# File 'lib/hamburgerstore.rb', line 36

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

Instance Method Details

#check_dynamo(options) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/hamburgerstore.rb', line 27

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) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/hamburgerstore.rb', line 16

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

#decrypt(value) ⇒ Object



11
12
13
14
# File 'lib/hamburgerstore.rb', line 11

def decrypt(value)
  encrypted_value = Base64.decode64(value)
  @kms.decrypt(ciphertext_blob: encrypted_value).plaintext
end

#encrypt(value) ⇒ Object



6
7
8
9
# File 'lib/hamburgerstore.rb', line 6

def encrypt(value)
  encrypted_value = @kms.encrypt(key_id: @key_id, plaintext: value).ciphertext_blob
  Base64.encode64(encrypted_value)
end

#retrieve(identifier, key) ⇒ Object



52
53
54
55
56
# File 'lib/hamburgerstore.rb', line 52

def retrieve(identifier, key)
  item = @table.get_item(key: { 'hamburger' => identifier }).item
  fail "no values for #{identifier}" if item.nil?
  decrypt(item[key])
end

#retrieve_all(identifier) ⇒ Object



58
59
60
61
62
63
64
65
66
# File 'lib/hamburgerstore.rb', line 58

def retrieve_all(identifier)
  encrypted_items = @table.get_item(key: { 'hamburger' => identifier }).item
  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) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/hamburgerstore.rb', line 44

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