rcredstash 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87738b964c912763c179803996897c9e52d431026ad9973e26891d302a0ee7d6
4
- data.tar.gz: e7eee30911e02377b7bcb904d99afa57364d5406c8b38b96f3e4861c70fed636
3
+ metadata.gz: 67d409c186f9c7006ef72dca4f1f60aa350fb868dfd1057c98be393d8f2c37cb
4
+ data.tar.gz: 0af15c57f304ae9ad1227b3a014f3f966880b7b688d749fb26dcf858153794c0
5
5
  SHA512:
6
- metadata.gz: 215d2946ea3197dee17ff033642de2958b4628c6f5d56f496ced7cec6be0917c8f5d3611fc3bbd6a590141fcaec75c321a95b8fa15cb002fc936d589202399a3
7
- data.tar.gz: d6cc7e2228276f47193f25ece54fddbaaaebc2aea7b8b7cef8bb7c512a13f243e581d74b56da343e8bd06a330e4cf681af89ce1b6e6fc20fc43c3ca2c9034dbe
6
+ metadata.gz: 0a54e33b123c10b28858e73705a6dafe3fca7e47f7c74d74c171cf5ae49763ebddd620c2ac550b095bd08bdcc7938bdf68940c7e3e1eb34b4398dcc233b889b9
7
+ data.tar.gz: 89a073eaa083fa4b000d422a9b9887c23ceffc5b1a7ba59662633f482597e896bcd28d25b5f7cc4429c011955ac4eea095055bb75516977f1c3be5e8c1d26027
@@ -3,8 +3,9 @@ require 'thor'
3
3
  module CredStash
4
4
  class CLI < Thor
5
5
  desc "get [key name]", "Show a value for key name"
6
+ option :version, type: :string, aliases: '-v', desc: 'Show a value for key name with their versions'
6
7
  def get(name)
7
- puts CredStash.get(name)
8
+ puts CredStash.get(name, version: options[:version])
8
9
  end
9
10
 
10
11
  desc "put [key name]", "Put a value for key name"
@@ -17,13 +18,21 @@ module CredStash
17
18
  end
18
19
 
19
20
  desc "list", "Show all stored keys"
20
- def list
21
- puts CredStash.list.keys
21
+ option :version, type: :boolean, aliases: '-v', desc: 'Show all stored keys with their versions'
22
+ def list()
23
+ if options[:version]
24
+ CredStash.list_with_version.each do |hash|
25
+ puts "#{hash["name"]} --version: #{hash["version"]}"
26
+ end
27
+ else
28
+ puts CredStash.list.keys
29
+ end
22
30
  end
23
31
 
24
32
  desc "delete [key name]", "Delete a key"
33
+ option :version, type: :string, aliases: '-v', desc: 'Specify version'
25
34
  def delete(name)
26
- CredStash.delete(name)
35
+ CredStash.delete(name, version: options[:version])
27
36
  puts "#{name} has deleted."
28
37
  end
29
38
 
@@ -4,31 +4,20 @@ module CredStash::Repository
4
4
  @client = client || Aws::DynamoDB::Client.new
5
5
  end
6
6
 
7
- def get(name)
8
- select(name, limit: 1).first.tap do |item|
7
+ def get(name, version: nil)
8
+ select(name, limit: 1, version: version).first.tap do |item|
9
9
  unless item
10
- raise CredStash::ItemNotFound, "#{name} is not found"
10
+ if version
11
+ raise CredStash::ItemNotFound, "#{name} --version: #{version} is not found"
12
+ else
13
+ raise CredStash::ItemNotFound, "#{name} is not found"
14
+ end
11
15
  end
12
16
  end
13
17
  end
14
18
 
15
- def select(name, pluck: nil, limit: nil)
16
- params = {
17
- table_name: CredStash.config.table_name,
18
- consistent_read: true,
19
- key_condition_expression: "#name = :name",
20
- expression_attribute_names: { "#name" => "name"},
21
- expression_attribute_values: { ":name" => name }
22
- }
23
-
24
- if pluck
25
- params[:projection_expression] = pluck
26
- end
27
-
28
- if limit
29
- params[:limit] = limit
30
- params[:scan_index_forward] = false
31
- end
19
+ def select(name, pluck: nil, limit: nil, version: nil)
20
+ params = set_params(name, pluck: pluck, limit: limit, version: version)
32
21
 
33
22
  @client.query(params).items.map do |item|
34
23
  Item.new(
@@ -109,5 +98,31 @@ module CredStash::Repository
109
98
  end
110
99
  all_items
111
100
  end
101
+
102
+ def set_params(name, pluck: nil, limit: nil, version: nil)
103
+ params = {
104
+ table_name: CredStash.config.table_name,
105
+ consistent_read: true,
106
+ key_condition_expression: "#name = :name",
107
+ expression_attribute_names: { "#name" => "name" },
108
+ expression_attribute_values: { ":name" => name }
109
+ }
110
+ if pluck
111
+ params[:projection_expression] = pluck
112
+ end
113
+
114
+ if limit
115
+ params[:limit] = limit
116
+ params[:scan_index_forward] = false
117
+ end
118
+
119
+ if version
120
+ params[:key_condition_expression] = "#name = :name AND #version = :version"
121
+ params[:expression_attribute_names]["#version"] = "version"
122
+ params[:expression_attribute_values][":version"] = version
123
+ end
124
+
125
+ params
126
+ end
112
127
  end
113
128
  end
@@ -29,8 +29,8 @@ class CredStash::Secret
29
29
  end
30
30
 
31
31
  class << self
32
- def find(name, context: {})
33
- item = repository.get(name)
32
+ def find(name, context: {}, version: nil)
33
+ item = repository.get(name, version: version)
34
34
  new(
35
35
  name: name,
36
36
  key: CredStash::CipherKey.decrypt(Base64.decode64(item.key), context: context),
@@ -1,3 +1,3 @@
1
1
  module CredStash
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/cred_stash.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module CredStash
2
2
  class << self
3
- def get(name, context: {}, raise_if_missing: false)
4
- secret = Secret.find(name, context: context)
3
+ def get(name, context: {}, raise_if_missing: false, version: nil)
4
+ secret = Secret.find(name, context: context, version: version)
5
5
 
6
6
  if secret.falsified?
7
7
  raise "Invalid secret. #{name} has falsified"
@@ -24,10 +24,18 @@ module CredStash
24
24
  Repository.instance.list.inject({}) {|h, item| h[item.name] = item.version; h }
25
25
  end
26
26
 
27
- def delete(name)
28
- # TODO needs delete target version option
27
+ def list_with_version
28
+ Repository.instance.list.inject([]) do |h, item|
29
+ h.push({
30
+ "name" => item.name,
31
+ "version" => item.version
32
+ })
33
+ end
34
+ end
35
+
36
+ def delete(name, version: nil)
29
37
  repository = Repository.instance
30
- item = repository.select(name).first
38
+ item = repository.select(name, version: version).first
31
39
  repository.delete(item)
32
40
  end
33
41
 
data/rcredstash.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'aws-sdk-dynamodb'
24
24
  spec.add_dependency 'thor'
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.12"
26
+ spec.add_development_dependency "bundler", "~> 2.4"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rcredstash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - adorechic
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-17 00:00:00.000000000 Z
11
+ date: 2023-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-kms
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.12'
61
+ version: '2.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.12'
68
+ version: '2.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +128,7 @@ homepage: https://github.com/adorechic/rcredstash
128
128
  licenses:
129
129
  - MIT
130
130
  metadata: {}
131
- post_install_message:
131
+ post_install_message:
132
132
  rdoc_options: []
133
133
  require_paths:
134
134
  - lib
@@ -143,8 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
145
  requirements: []
146
- rubygems_version: 3.0.3
147
- signing_key:
146
+ rubygems_version: 3.4.9
147
+ signing_key:
148
148
  specification_version: 4
149
149
  summary: A Ruby port of CredStash
150
150
  test_files: []