aws-sessionstore-dynamodb 2.0.0 → 2.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: e17edceb1591e5e714e577d518f8c1f5f9b0b0a9c4edc6e8fbd7b275f63d33d5
4
- data.tar.gz: 78cdaebe833c199b3d11a4fa0259d53fb5f770027808c55b8b96fbdece0a8401
3
+ metadata.gz: 567a54a1d54a1c4e00d6c85e98636320e6b1dcdddadf7acbeb1240244a32555e
4
+ data.tar.gz: 299b7c0b5780a980c963fe18c7f053919c8e7157ea092f0fbdfb88b263b39f5c
5
5
  SHA512:
6
- metadata.gz: 2b69bc3462d6e224f29c58d3ef8077772c8f279b1ec5502e526639c750dddceff3ba350d73c8a7070df63b8e39a0cf46371fdd3ff47407115c137c84baf0a299
7
- data.tar.gz: 389006735c32ad4ed30dc1c95fd82bfaefd41b2849435bb8e49ca3b0ac6539d6a84824a5e6ceaf97a5c9e4e3b743407ba6da8f450f65f122401db2c88b798f48
6
+ metadata.gz: 9b244ab47e504e446d268570f0fd54d47b6d142c31f17bb30053145f13aaea3a2a34f512841767fe9b0db2b5330983545e7e1c4b8209f309f95137f39762dc3a
7
+ data.tar.gz: 36d11102937288958a31899e99b8cd7d0e84e8e252bdc901e2a7d9514e74853ecd208c63217034c791b477eb83de058e06e0b790203fc5efc8aac94aa5b1bedc
@@ -0,0 +1,32 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ pull_request:
9
+ branches:
10
+ - main
11
+
12
+ jobs:
13
+ test:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ ruby: [2.3, 2.4, 2.5, 2.6, 2.7, '3.0', 3.1, 3.2, jruby-9.1, jruby-9.2, jruby-9.3, jruby-9.4]
19
+
20
+ steps:
21
+ - name: Setup
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby }}
25
+
26
+ - uses: actions/checkout@v2
27
+
28
+ - name: Install
29
+ run: bundle install --without docs
30
+
31
+ - name: Test
32
+ run: bundle exec rake spec
data/.gitignore CHANGED
@@ -3,3 +3,4 @@ coverage
3
3
  .yardoc
4
4
  Gemfile.lock
5
5
  .release
6
+ .idea/
data/.travis.yml CHANGED
@@ -5,8 +5,6 @@ branches:
5
5
  language: ruby
6
6
 
7
7
  rvm:
8
- - 2.0
9
- - 2.1
10
8
  - 2.2
11
9
  - 2.3
12
10
  - 2.4
@@ -21,6 +19,6 @@ sudo: false
21
19
  env:
22
20
  - AWS_REGION=us-west-2
23
21
 
24
- script: bundle exec rake test:unit
22
+ script: bundle exec rake spec
25
23
 
26
24
  bundler_args: --without docs release repl
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ 2.1.0 (2023-06-02)
2
+ ------------------
3
+
4
+ * Feature - Improve User-Agent tracking and bump minimum DynamoDB version.
5
+
6
+ 2.0.1 (2020-11-16)
7
+ ------------------
8
+
9
+ * Issue - Expose `:config` in `RackMiddleware` and `:config_file` in `Configuration`.
10
+
11
+ * Issue - V2 of this release was still loading SDK V1 credential keys. This removes support for client options specified in YAML configuration (behavior change). Instead, construct `Aws::DynamoDB::Client` and use the `dynamo_db_client` option.
12
+
1
13
  2.0.0 (2020-11-11)
2
14
  ------------------
3
15
 
data/Gemfile CHANGED
@@ -13,4 +13,8 @@ group :test do
13
13
  gem 'rspec'
14
14
  gem 'simplecov', require: false
15
15
  gem 'rack-test'
16
+
17
+ if RUBY_VERSION >= '3.0'
18
+ gem 'rexml'
19
+ end
16
20
  end
data/Rakefile CHANGED
@@ -1,8 +1,9 @@
1
+ require 'rspec/core/rake_task'
2
+
1
3
  $REPO_ROOT = File.dirname(__FILE__)
2
4
  $LOAD_PATH.unshift(File.join($REPO_ROOT, 'lib'))
3
5
  $VERSION = ENV['VERSION'] || File.read(File.join($REPO_ROOT, 'VERSION')).strip
4
6
 
5
- require 'rspec/core/rake_task'
6
7
 
7
8
  Dir.glob('**/*.rake').each do |task_file|
8
9
  load task_file
@@ -12,27 +13,23 @@ task 'test:coverage:clear' do
12
13
  sh("rm -rf #{File.join($REPO_ROOT, 'coverage')}")
13
14
  end
14
15
 
15
- # Override the test task definitions
16
- # this package uses rspec tags to define integration tests
17
- Rake::Task["test:unit"].clear
18
16
  desc 'Runs unit tests'
19
- RSpec::Core::RakeTask.new('test:unit') do |t|
17
+ RSpec::Core::RakeTask.new do |t|
20
18
  t.rspec_opts = "-I #{$REPO_ROOT}/lib -I #{$REPO_ROOT}/spec --tag ~integration"
21
19
  t.pattern = "#{$REPO_ROOT}/spec"
22
20
  end
23
- task 'test:unit' => 'test:coverage:clear'
21
+ task :spec => 'test:coverage:clear'
24
22
 
25
- Rake::Task["test:integration"].clear
26
23
  desc 'Runs integration tests'
27
- RSpec::Core::RakeTask.new('test:integration') do |t|
24
+ RSpec::Core::RakeTask.new('spec:integration') do |t|
28
25
  t.rspec_opts = "-I #{$REPO_ROOT}/lib -I #{$REPO_ROOT}/spec --tag integration"
29
26
  t.pattern = "#{$REPO_ROOT}/spec"
30
27
  end
31
- task 'test:integration' => 'test:coverage:clear'
32
28
 
33
29
  desc 'Runs unit and integration tests'
34
- task 'test' => ['test:unit', 'test:integration']
30
+ task 'test' => [:spec, 'spec:integration']
35
31
 
36
- task :default => 'test:unit'
32
+ task :default => :spec
33
+ task 'release:test' => [:spec, 'spec:integration']
37
34
 
38
35
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.1.0
@@ -15,6 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
16
  spec.require_paths = ["lib"]
17
17
 
18
- spec.add_dependency 'aws-sdk-dynamodb', '~> 1'
18
+ # Require 1.85.0 for user_agent_frameworks config
19
+ spec.add_dependency 'aws-sdk-dynamodb', '~> 1', '>= 1.85.0'
19
20
  spec.add_dependency 'rack', '~> 2'
20
21
  end
@@ -4,7 +4,3 @@
4
4
  <%= YARD::VERSION %> (ruby-<%= RUBY_VERSION %>).
5
5
  <div id="awsdocs-legal-zone-copyright"></div>
6
6
  </div>
7
-
8
- <!-- Gitter chat -->
9
- <script>((window.gitter = {}).chat = {}).options = { room: 'aws/aws-sdk-ruby' };</script>
10
- <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
@@ -56,6 +56,8 @@ module Aws::SessionStore::DynamoDB
56
56
  :secret_key => nil
57
57
  }
58
58
 
59
+ ### Feature options
60
+
59
61
  # @return [String] Session table name.
60
62
  attr_reader :table_name
61
63
 
@@ -84,14 +86,6 @@ module Aws::SessionStore::DynamoDB
84
86
  # ErrorHandler is used.
85
87
  attr_reader :raise_errors
86
88
 
87
- # @return [DynamoDB Client] DynamoDB client.
88
- attr_reader :dynamo_db_client
89
-
90
- # @return [Error Handler] An error handling object that handles all exceptions
91
- # thrown during execution of the AWS DynamoDB Session Store Rack Middleware.
92
- # For more information see the Handling Errors Section.
93
- attr_reader :error_handler
94
-
95
89
  # @return [Integer] Maximum number of seconds earlier
96
90
  # from the current time that a session was created.
97
91
  attr_reader :max_age
@@ -100,9 +94,6 @@ module Aws::SessionStore::DynamoDB
100
94
  # before the current time that the session was last accessed.
101
95
  attr_reader :max_stale
102
96
 
103
- # @return [String] The secret key for HMAC encryption.
104
- attr_reader :secret_key
105
-
106
97
  # @return [true] Pessimistic locking strategy will be implemented for
107
98
  # all session accesses.
108
99
  # @return [false] No locking strategy will be implemented for
@@ -120,6 +111,21 @@ module Aws::SessionStore::DynamoDB
120
111
  # before giving up.
121
112
  attr_reader :lock_max_wait_time
122
113
 
114
+ # @return [String] The secret key for HMAC encryption.
115
+ attr_reader :secret_key
116
+
117
+ # @return [String,Pathname]
118
+ attr_reader :config_file
119
+
120
+ ### Client and Error Handling options
121
+
122
+ # @return [DynamoDB Client] DynamoDB client.
123
+ attr_reader :dynamo_db_client
124
+
125
+ # @return [Error Handler] An error handling object that handles all exceptions
126
+ # thrown during execution of the AWS DynamoDB Session Store Rack Middleware.
127
+ # For more information see the Handling Errors Section.
128
+ attr_reader :error_handler
123
129
 
124
130
  # Provides configuration object that allows access to options defined
125
131
  # during Runtime, in a YAML file, in the ENV and by default.
@@ -163,18 +169,16 @@ module Aws::SessionStore::DynamoDB
163
169
  # @option options [Integer] :lock_retry_delay (500) Time in milleseconds to
164
170
  # wait before retrying to obtain lock once an attempt to obtain lock
165
171
  # has been made and has failed.
166
- # @option options [Integer] :lock_max_wait_time (500) Maximum time in seconds
167
- # to wait to acquire lock before giving up.
172
+ # @option options [Integer] :lock_max_wait_time (500) Maximum time
173
+ # in seconds to wait to acquire lock before giving up.
168
174
  # @option options [String] :secret_key (SecureRandom.hex(64))
169
175
  # Secret key for HMAC encription.
170
176
  def initialize(options = {})
171
177
  @options = default_options.merge(
172
- env_options.merge(
173
- file_options(options).merge(
174
- symbolize_keys(options)
175
- )
176
- )
177
- )
178
+ env_options.merge(
179
+ file_options(options).merge(symbolize_keys(options))
180
+ )
181
+ )
178
182
  @options = client_error.merge(@options)
179
183
  set_attributes(@options)
180
184
  end
@@ -188,10 +192,9 @@ module Aws::SessionStore::DynamoDB
188
192
 
189
193
  # @return [Hash] DDB client.
190
194
  def gen_dynamo_db_client
191
- client_opts = client_subset(@options)
192
- client_opts[:user_agent_suffix] = _user_agent(@options.delete(:user_agent_suffix))
193
- client = Aws::DynamoDB::Client
194
- dynamo_db_client = @options[:dynamo_db_client] || client.new(client_opts)
195
+ dynamo_db_client = @options[:dynamo_db_client] || Aws::DynamoDB::Client.new
196
+ # this used to be aws-sessionstore/version on user_agent_suffix
197
+ dynamo_db_client.config.user_agent_frameworks << "aws-sessionstore-dynamodb"
195
198
  {:dynamo_db_client => dynamo_db_client}
196
199
  end
197
200
 
@@ -258,22 +261,5 @@ module Aws::SessionStore::DynamoDB
258
261
  opts
259
262
  end
260
263
  end
261
-
262
- # @return [Hash] Client subset options hash.
263
- def client_subset(options = {})
264
- client_keys = [:aws_secret_key, :aws_region, :aws_access_key, :api_version]
265
- options.inject({}) do |opts, (opt_name, opt_value)|
266
- opts[opt_name.to_sym] = opt_value if client_keys.include?(opt_name.to_sym)
267
- opts
268
- end
269
- end
270
-
271
- def _user_agent(custom)
272
- if custom
273
- custom
274
- else
275
- " aws-sessionstore/#{VERSION}"
276
- end
277
- end
278
264
  end
279
265
  end
@@ -14,7 +14,7 @@ module Aws::SessionStore::DynamoDB::Locking
14
14
  packed_session = pack_data(session)
15
15
  handle_error(env) do
16
16
  save_opts = update_opts(env, sid, packed_session, options)
17
- result = @config.dynamo_db_client.update_item(save_opts)
17
+ @config.dynamo_db_client.update_item(save_opts)
18
18
  sid
19
19
  end
20
20
  end
@@ -6,6 +6,9 @@ module Aws::SessionStore::DynamoDB
6
6
  # This class is an ID based Session Store Rack Middleware
7
7
  # that uses a DynamoDB backend for session storage.
8
8
  class RackMiddleware < Rack::Session::Abstract::Persisted
9
+ # @return [Configuration] An instance of Configuration that is used for
10
+ # this middleware.
11
+ attr_reader :config
9
12
 
10
13
  # Initializes SessionStore middleware.
11
14
  #
@@ -14,6 +14,3 @@
14
14
  table_name: NewTable
15
15
  table_key: Somekey
16
16
  consistent_read: true
17
- AWS_ACCESS_KEY_ID: FakeKey
18
- AWS_SECRET_ACCESS_KEY: Secret
19
- AWS_REGION: New York
@@ -30,14 +30,13 @@ describe Aws::SessionStore::DynamoDB::Configuration do
30
30
  let(:expected_file_opts) do
31
31
  {
32
32
  consistent_read: true,
33
- AWS_ACCESS_KEY_ID: 'FakeKey',
34
- AWS_REGION: 'New York',
35
33
  table_name: 'NewTable',
36
34
  table_key: 'Somekey',
37
- AWS_SECRET_ACCESS_KEY: 'Secret'
38
35
  }
39
36
  end
40
37
 
38
+ let(:client) { Aws::DynamoDB::Client.new(stub_responses: true) }
39
+
41
40
  let(:runtime_options) do
42
41
  {
43
42
  table_name: 'SessionTable',
@@ -51,6 +50,10 @@ describe Aws::SessionStore::DynamoDB::Configuration do
51
50
  expect(cfg.to_hash).to include(expected_opts)
52
51
  end
53
52
 
53
+ before do
54
+ allow(Aws::DynamoDB::Client).to receive(:new).and_return(client)
55
+ end
56
+
54
57
  context 'Configuration Tests' do
55
58
  it 'configures option with out runtime,YAML or ENV options' do
56
59
  cfg = Aws::SessionStore::DynamoDB::Configuration.new
@@ -26,7 +26,7 @@ describe Aws::SessionStore::DynamoDB do
26
26
 
27
27
  let(:base_app) { MultiplierApplication.new }
28
28
  let(:app) { Aws::SessionStore::DynamoDB::RackMiddleware.new(base_app, @options) }
29
- let(:client) { double('Aws::DynamoDB::Client') }
29
+ let(:client) { double('Aws::DynamoDB::Client', config: double(user_agent_frameworks: [])) }
30
30
 
31
31
  context 'Error handling for Rack Middleware with default error handler' do
32
32
  it 'raises error for missing secret key' do
@@ -98,7 +98,7 @@ describe Aws::SessionStore::DynamoDB::GarbageCollection do
98
98
  }
99
99
  end
100
100
 
101
- let(:dynamo_db_client) {Aws::DynamoDB::Client.new}
101
+ let(:dynamo_db_client) {Aws::DynamoDB::Client.new(stub_responses: true)}
102
102
 
103
103
  context 'Mock DynamoDB client with garbage collection' do
104
104
  it 'processes scan result greater than 25 and deletes in batches of 25' do
@@ -124,9 +124,9 @@ describe Aws::SessionStore::DynamoDB::GarbageCollection do
124
124
  expect(dynamo_db_client).to receive(:scan).
125
125
  exactly(1).times.and_return(scan_resp3)
126
126
  expect(dynamo_db_client).to receive(:batch_write_item).ordered.
127
- with(request_items: { 'sessions' => format_scan_result }).
127
+ with({request_items: { 'sessions' => format_scan_result }}).
128
128
  and_return(write_resp2)
129
- expect(dynamo_db_client).to receive(:batch_write_item).ordered.with(
129
+ expect(dynamo_db_client).to receive(:batch_write_item).ordered.with({
130
130
  request_items: {
131
131
  'sessions' => [
132
132
  {
@@ -151,7 +151,7 @@ describe Aws::SessionStore::DynamoDB::GarbageCollection do
151
151
  }
152
152
  ]
153
153
  }
154
- ).and_return(write_resp1)
154
+ }).and_return(write_resp1)
155
155
  collect_garbage
156
156
  end
157
157
  end
@@ -53,7 +53,8 @@ module Aws
53
53
  delete_item: 'Deleted',
54
54
  list_tables: { table_names: ['Sessions'] },
55
55
  get_item: { item: { 'data' => sample_packed_data } },
56
- update_item: { attributes: { created_at: 'now' } }
56
+ update_item: { attributes: { created_at: 'now' } },
57
+ config: double(user_agent_frameworks: [])
57
58
  )
58
59
  end
59
60
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sessionstore-dynamodb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-11 00:00:00.000000000 Z
11
+ date: 2023-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-dynamodb
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.85.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.85.0
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rack
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -47,6 +53,7 @@ extensions: []
47
53
  extra_rdoc_files: []
48
54
  files:
49
55
  - ".github/PULL_REQUEST_TEMPLATE.md"
56
+ - ".github/workflows/ci.yml"
50
57
  - ".gitignore"
51
58
  - ".gitmodules"
52
59
  - ".travis.yml"
@@ -104,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
111
  - !ruby/object:Gem::Version
105
112
  version: '0'
106
113
  requirements: []
107
- rubygems_version: 3.0.3
114
+ rubygems_version: 3.4.10
108
115
  signing_key:
109
116
  specification_version: 4
110
117
  summary: The Amazon DynamoDB Session Store handles sessions for Ruby web applications