class DynamoSecret::DynamoDB

Public Class Methods

new(config) click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 7
def initialize(config)
  @table_name = config[:table_name] || table_name
  @region = config.fetch(:region, region)
  @secret_data = config.fetch(:secret_data, {})
end

Public Instance Methods

create_table() click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 13
def create_table
  client.create_table(
    attribute_definitions: [{ attribute_name: 'Site', attribute_type: 'S' }],
    table_name: @table_name,
    key_schema: [{ attribute_name: 'Site', key_type: 'HASH' }],
    provisioned_throughput: {
      read_capacity_units: 25,
      write_capacity_units: 25
    }
  )
  $stdout.puts "Created new table: #{@table_name}"
rescue Aws::DynamoDB::Errors::ResourceInUseException
  $stderr.puts "Table #{@table_name} already exists"
end
delete() click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 28
def delete
  client.delete_item(
    key: {
      'Site' => @secret_data.map { |k, _v| k }.first
    },
    table_name: @table_name
  )
end
fetch_secret() click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 37
def fetch_secret
  client.get_item(
    key: {
      'Site' => @secret_data.map { |k, _v| k }.first
    },
    table_name: @table_name
  ).item
rescue Aws::DynamoDB::Errors::ResourceNotFoundException
  $stderr.puts "Table #{@table_name} not found"
  exit 1
end
list_secrets() click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 49
def list_secrets
  client.scan(table_name: @table_name).items.each { |item| $stdout.puts item['Site'] }
end
put_secret(secret_data) click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 53
def put_secret(secret_data)
  client.put_item(
    item: secret_data,
    table_name: @table_name
  )
end

Private Instance Methods

client() click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 62
def client
  @client ||= Aws::DynamoDB::Client.new(region: @region)
end
region() click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 66
def region
  ENV.fetch('AWS_REGION', 'us-west-2')
end
table_name() click to toggle source
# File lib/dynamo_secret/dynamodb.rb, line 70
def table_name
  "dynamo_secret_#{IAM.new.user_id}"
end