tiddle 1.7.1 → 1.8.1

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: a348d248985933eddf79f194679aa3c1ee6724006f3386a88d143efff7080b0d
4
- data.tar.gz: 36f11c54b9cb1829fbbe07e200f404bb8958265582854dd71583a4f90565ef4b
3
+ metadata.gz: 2f2ed0612bc75fa65d51698a55ee988a5c490a4d3effb5427dd4d1a28e6245dd
4
+ data.tar.gz: 427329473b539b834b336fa06b1d7ec2112a1518eee77ade08b82bbd7aefb2a8
5
5
  SHA512:
6
- metadata.gz: b2001e1d59b7fe3596dd7727477e3315f7bc91d4725653ace774bdce0804dd11dceded3908d8be15bf05f8bbcb30e29b90ea8e99366069e693e2eb1ed7526960
7
- data.tar.gz: 34064918737c1c9d1da935488fee01b711823cedc9c5b7ccfd411b30a94390b241ca7a9f6106ecb8c9acb7a6847a475ad2f9930a431d39417a495e7a9a4df812
6
+ metadata.gz: 4dc7f6abcdccab03224a92f2d7086afa8efa1b20f9fda55289028ccb5530ed930d0e0ed3ca56954fc25f376edad07d3bc0483dbeb69c0675ee7d7698f9786876
7
+ data.tar.gz: 2c061b3ecf31c7b75481f973ea947c1d722f8bb052b22b20cab86fc45417227d35deede8b91afd585935a4371ab44dfefbc72d3d3f3f872c6a2709c54fd8b722
@@ -12,26 +12,17 @@ jobs:
12
12
  fail-fast: false
13
13
  matrix:
14
14
  gemfile:
15
- - rails5.2
16
- - rails6.0
17
15
  - rails6.1
18
16
  - rails7.0
17
+ - rails7.1
19
18
  ruby:
20
- - "2.7"
21
19
  - "3.0"
22
20
  - "3.1"
21
+ - "3.2"
22
+ - "3.3"
23
23
  backend:
24
24
  - active_record
25
25
  - mongoid
26
- exclude:
27
- - gemfile: rails5.2
28
- ruby: "3.0"
29
- - gemfile: rails5.2
30
- ruby: "3.1"
31
- - gemfile: rails6.0
32
- ruby: "3.1"
33
- - gemfile: rails6.1
34
- ruby: "3.1"
35
26
  name: ${{ matrix.gemfile }}, ruby ${{ matrix.ruby }}, ${{ matrix.backend }}
36
27
  runs-on: ubuntu-latest
37
28
  env:
data/.rubocop.yml CHANGED
@@ -8,6 +8,7 @@ AllCops:
8
8
  - 'spec/spec_helper.rb'
9
9
  - 'vendor/bundle/**/*'
10
10
  SuggestExtensions: false
11
+ NewCops: enable
11
12
  Style/StringLiterals:
12
13
  Enabled: false
13
14
  Style/Documentation:
@@ -25,64 +26,3 @@ Metrics/BlockLength:
25
26
  - 'spec/**/*'
26
27
  Metrics/MethodLength:
27
28
  Max: 15
28
-
29
- Gemspec/DateAssignment:
30
- Enabled: true
31
- Layout/SpaceBeforeBrackets:
32
- Enabled: true
33
- Lint/AmbiguousAssignment:
34
- Enabled: true
35
- Lint/DeprecatedConstants:
36
- Enabled: true
37
- Lint/DuplicateBranch:
38
- Enabled: true
39
- Lint/DuplicateRegexpCharacterClassElement:
40
- Enabled: true
41
- Lint/EmptyBlock:
42
- Enabled: true
43
- Lint/EmptyClass:
44
- Enabled: true
45
- Lint/LambdaWithoutLiteralBlock:
46
- Enabled: true
47
- Lint/NoReturnInBeginEndBlocks:
48
- Enabled: true
49
- Lint/NumberedParameterAssignment:
50
- Enabled: true
51
- Lint/OrAssignmentToConstant:
52
- Enabled: true
53
- Lint/RedundantDirGlobSort:
54
- Enabled: true
55
- Lint/SymbolConversion:
56
- Enabled: true
57
- Lint/ToEnumArguments:
58
- Enabled: true
59
- Lint/TripleQuotes:
60
- Enabled: true
61
- Lint/UnexpectedBlockArity:
62
- Enabled: true
63
- Lint/UnmodifiedReduceAccumulator:
64
- Enabled: true
65
- Style/ArgumentsForwarding:
66
- Enabled: true
67
- Style/CollectionCompact:
68
- Enabled: true
69
- Style/DocumentDynamicEvalDefinition:
70
- Enabled: true
71
- Style/EndlessMethod:
72
- Enabled: true
73
- Style/HashConversion:
74
- Enabled: true
75
- Style/HashExcept:
76
- Enabled: true
77
- Style/IfWithBooleanLiteralBranches:
78
- Enabled: true
79
- Style/NegatedIfElseCondition:
80
- Enabled: true
81
- Style/NilLambda:
82
- Enabled: true
83
- Style/RedundantArgument:
84
- Enabled: true
85
- Style/StringChars:
86
- Enabled: true
87
- Style/SwapValues:
88
- Enabled: true
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ### 1.8.1
2
+
3
+ Remove Rails 5.2 and 6.0 support
4
+
5
+ Remove Ruby 2.7 support
6
+
7
+ Add Rails 7.1 support
8
+
9
+ Add Ruby 3.2 and 3.3 support
10
+
11
+ ### 1.8.0
12
+
13
+ Support different touch interval based on expiration time (Daniel André da Silva)
14
+
1
15
  ### 1.7.1
2
16
 
3
17
  Fix invalid headers generated when model is namespaced (Ariel Agne da Silveira)
data/CONTRIBUTING.md CHANGED
@@ -9,3 +9,25 @@
9
9
  3. Introduce your change. If it's a new feature then write a test for it as well.
10
10
  4. Make sure that tests are passing.
11
11
  5. Push to your fork and submit a pull request.
12
+
13
+ #### Docker for development
14
+
15
+ Alternatively you can use Docker for the development setup. This requires Docker
16
+ and Docker Compose installed.
17
+
18
+ ```
19
+ make build
20
+ make bundle
21
+ ```
22
+
23
+ And in order to run the tests and linter checks:
24
+
25
+ ```
26
+ make test
27
+ ```
28
+
29
+ After you're done, cleanup leftover containers:
30
+
31
+ ```
32
+ make cleanup
33
+ ```
data/Dockerfile ADDED
@@ -0,0 +1,12 @@
1
+ FROM ruby:3.3-alpine
2
+
3
+ RUN apk add build-base sqlite-dev tzdata git bash
4
+ RUN gem update --system && gem install bundler
5
+
6
+ WORKDIR /library
7
+
8
+ ENV BUNDLE_PATH=/vendor/bundle \
9
+ BUNDLE_BIN=/vendor/bundle/bin \
10
+ GEM_HOME=/vendor/bundle
11
+
12
+ ENV PATH="${BUNDLE_BIN}:${PATH}"
data/Makefile ADDED
@@ -0,0 +1,16 @@
1
+ .PHONY: build bundle test bash cleanup
2
+
3
+ build:
4
+ docker-compose build
5
+
6
+ bundle:
7
+ docker-compose run --rm library bundle install
8
+
9
+ test:
10
+ docker-compose run --rm library bundle exec rake
11
+
12
+ bash:
13
+ docker-compose run --rm library bash
14
+
15
+ cleanup:
16
+ docker-compose down
@@ -0,0 +1,24 @@
1
+ version: "3.9"
2
+ services:
3
+ library:
4
+ platform: linux/x86_64
5
+ build:
6
+ context: .
7
+ stdin_open: true
8
+ tty: true
9
+ volumes:
10
+ - ".:/library"
11
+ - vendor:/vendor
12
+ depends_on:
13
+ - redis
14
+ environment:
15
+ - REDIS_URL=redis://redis:6379/1
16
+ - BUNDLE_GEMFILE=gemfiles/rails7.1.gemfile
17
+ redis:
18
+ image: "redis:6-alpine"
19
+ command: redis-server
20
+ volumes:
21
+ - "redis:/data"
22
+ volumes:
23
+ vendor:
24
+ redis:
@@ -2,6 +2,6 @@ source "https://rubygems.org"
2
2
 
3
3
  gem "rails", "~> 6.1.0"
4
4
  gem "mongoid"
5
- gem "sqlite3"
5
+ gem "sqlite3", "~> 1.4"
6
6
 
7
7
  gemspec path: "../"
@@ -2,6 +2,6 @@ source "https://rubygems.org"
2
2
 
3
3
  gem "rails", "~> 7.0.2"
4
4
  gem "mongoid"
5
- gem "sqlite3"
5
+ gem "sqlite3", "~> 1.4"
6
6
 
7
7
  gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "rails", "~> 7.1.3"
4
+ gem "mongoid"
5
+ gem "sqlite3", "~> 1.4"
6
+
7
+ gemspec path: "../"
@@ -57,15 +57,30 @@ module Devise
57
57
  end
58
58
 
59
59
  def touch_token(token)
60
- token.update_attribute(:last_used_at, Time.current) if token.last_used_at < 1.hour.ago
60
+ return unless token.last_used_at < touch_token_interval(token).ago
61
+
62
+ token.update_attribute(:last_used_at, Time.current)
61
63
  end
62
64
 
63
65
  def unexpired?(token)
64
- return true unless token.respond_to?(:expires_in)
65
- return true if token.expires_in.blank? || token.expires_in.zero?
66
+ return true if expiration_disabled?(token)
66
67
 
67
68
  Time.current <= token.last_used_at + token.expires_in
68
69
  end
70
+
71
+ def touch_token_interval(token)
72
+ return 1.hour if expiration_disabled?(token) || token.expires_in >= 24.hours
73
+
74
+ return 5.minutes if token.expires_in >= 1.hour
75
+
76
+ 1.minute
77
+ end
78
+
79
+ def expiration_disabled?(token)
80
+ !token.respond_to?(:expires_in) ||
81
+ token.expires_in.blank? ||
82
+ token.expires_in.zero?
83
+ end
69
84
  end
70
85
  end
71
86
  end
@@ -1,3 +1,3 @@
1
1
  module Tiddle
2
- VERSION = "1.7.1".freeze
2
+ VERSION = "1.8.1".freeze
3
3
  end
@@ -217,5 +217,89 @@ describe "Authentication using Tiddle strategy", type: :request do
217
217
  expect(response.status).to eq 401
218
218
  end
219
219
  end
220
+
221
+ context "with value lower than 24 hours" do
222
+ before do
223
+ @token = Tiddle.create_and_return_token(@user, FakeRequest.new, expires_in: 1.hour)
224
+ end
225
+
226
+ context "and token was last used a minute ago" do
227
+ before do
228
+ @user.authentication_tokens.last.update_attribute(:last_used_at, 1.minute.ago)
229
+ end
230
+
231
+ it "does not update last_used_at field" do
232
+ expect do
233
+ get(
234
+ secrets_path,
235
+ headers: {
236
+ "X-USER-EMAIL" => "test@example.com",
237
+ "X-USER-TOKEN" => @token
238
+ }
239
+ )
240
+ end.not_to(change { @user.authentication_tokens.last.reload.last_used_at })
241
+ end
242
+ end
243
+
244
+ context "and token was last used 5 minutes ago" do
245
+ before do
246
+ @user.authentication_tokens.last.update_attribute(:last_used_at, 5.minute.ago)
247
+ end
248
+
249
+ it "updates last_used_at field" do
250
+ expect do
251
+ get(
252
+ secrets_path,
253
+ headers: {
254
+ "X-USER-EMAIL" => "test@example.com",
255
+ "X-USER-TOKEN" => @token
256
+ }
257
+ )
258
+ end.to(change { @user.authentication_tokens.last.reload.last_used_at })
259
+ end
260
+ end
261
+ end
262
+
263
+ context "with value lower than 1 hour" do
264
+ before do
265
+ @token = Tiddle.create_and_return_token(@user, FakeRequest.new, expires_in: 30.minutes)
266
+ end
267
+
268
+ context "and token was last used less than a minute ago" do
269
+ before do
270
+ @user.authentication_tokens.last.update_attribute(:last_used_at, 30.seconds.ago)
271
+ end
272
+
273
+ it "does not update last_used_at field" do
274
+ expect do
275
+ get(
276
+ secrets_path,
277
+ headers: {
278
+ "X-USER-EMAIL" => "test@example.com",
279
+ "X-USER-TOKEN" => @token
280
+ }
281
+ )
282
+ end.not_to(change { @user.authentication_tokens.last.reload.last_used_at })
283
+ end
284
+ end
285
+
286
+ context "and token was last used a minute ago" do
287
+ before do
288
+ @user.authentication_tokens.last.update_attribute(:last_used_at, 1.minute.ago)
289
+ end
290
+
291
+ it "updates last_used_at field" do
292
+ expect do
293
+ get(
294
+ secrets_path,
295
+ headers: {
296
+ "X-USER-EMAIL" => "test@example.com",
297
+ "X-USER-TOKEN" => @token
298
+ }
299
+ )
300
+ end.to(change { @user.authentication_tokens.last.reload.last_used_at })
301
+ end
302
+ end
303
+ end
220
304
  end
221
305
  end
@@ -23,14 +23,10 @@ module Backend
23
23
  # Do initial migration
24
24
  path = File.expand_path("../rails_app_active_record/db/migrate/", File.dirname(__FILE__))
25
25
 
26
- if Gem::Requirement.new(">= 6.0.0") =~ Rails.gem_version
27
- ActiveRecord::MigrationContext.new(
28
- path,
29
- ActiveRecord::SchemaMigration
30
- ).migrate
31
- else
32
- ActiveRecord::MigrationContext.new(path).migrate
33
- end
26
+ ActiveRecord::MigrationContext.new(
27
+ path,
28
+ ActiveRecord::SchemaMigration
29
+ ).migrate
34
30
  end
35
31
  end
36
32
 
data/tiddle.gemspec CHANGED
@@ -16,10 +16,10 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ["lib"]
18
18
 
19
- spec.required_ruby_version = '>= 2.7.0'
19
+ spec.required_ruby_version = '>= 3.0.0'
20
20
 
21
21
  spec.add_dependency "devise", ">= 4.0.0.rc1", "< 5"
22
- spec.add_dependency "activerecord", ">= 5.2.0"
22
+ spec.add_dependency "activerecord", ">= 6.1.0"
23
23
  spec.add_development_dependency "rake"
24
24
  spec.add_development_dependency "rspec-rails"
25
25
  spec.add_development_dependency "simplecov"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiddle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Niedzielski
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-20 00:00:00.000000000 Z
11
+ date: 2024-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 5.2.0
39
+ version: 6.1.0
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 5.2.0
46
+ version: 6.1.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +128,7 @@ dependencies:
128
128
  - - ">="
129
129
  - !ruby/object:Gem::Version
130
130
  version: '0'
131
- description:
131
+ description:
132
132
  email:
133
133
  - adamsunday@gmail.com
134
134
  executables: []
@@ -141,14 +141,16 @@ files:
141
141
  - ".rubocop.yml"
142
142
  - CHANGELOG.md
143
143
  - CONTRIBUTING.md
144
+ - Dockerfile
144
145
  - LICENSE.txt
146
+ - Makefile
145
147
  - README.md
146
148
  - Rakefile
147
149
  - config/locales/en.yml
148
- - gemfiles/rails5.2.gemfile
149
- - gemfiles/rails6.0.gemfile
150
+ - docker-compose.yml
150
151
  - gemfiles/rails6.1.gemfile
151
152
  - gemfiles/rails7.0.gemfile
153
+ - gemfiles/rails7.1.gemfile
152
154
  - lib/tiddle.rb
153
155
  - lib/tiddle/model.rb
154
156
  - lib/tiddle/model_name.rb
@@ -194,7 +196,7 @@ homepage: ''
194
196
  licenses:
195
197
  - MIT
196
198
  metadata: {}
197
- post_install_message:
199
+ post_install_message:
198
200
  rdoc_options: []
199
201
  require_paths:
200
202
  - lib
@@ -202,15 +204,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
204
  requirements:
203
205
  - - ">="
204
206
  - !ruby/object:Gem::Version
205
- version: 2.7.0
207
+ version: 3.0.0
206
208
  required_rubygems_version: !ruby/object:Gem::Requirement
207
209
  requirements:
208
210
  - - ">="
209
211
  - !ruby/object:Gem::Version
210
212
  version: '0'
211
213
  requirements: []
212
- rubygems_version: 3.1.6
213
- signing_key:
214
+ rubygems_version: 3.5.12
215
+ signing_key:
214
216
  specification_version: 4
215
217
  summary: Token authentication for Devise which supports multiple tokens per model
216
218
  test_files:
@@ -1,7 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "rails", "~> 5.2.1"
4
- gem "mongoid", "~> 6"
5
- gem "sqlite3", "~> 1.3.13"
6
-
7
- gemspec path: "../"
@@ -1,7 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "rails", "~> 6.0.0"
4
- gem "mongoid", "~> 7"
5
- gem "sqlite3"
6
-
7
- gemspec path: "../"