aws-sessionstore-dynamodb 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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