tiddle 1.7.1 → 1.8.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: a348d248985933eddf79f194679aa3c1ee6724006f3386a88d143efff7080b0d
4
- data.tar.gz: 36f11c54b9cb1829fbbe07e200f404bb8958265582854dd71583a4f90565ef4b
3
+ metadata.gz: 30c0de8dba83157b465e1455956272549e210830cc8fe296aec744b0d046ca1c
4
+ data.tar.gz: 53652aefc5c51511b5f43df0c598ae6754e596e78a4be02aa01fa7e3dd40b95b
5
5
  SHA512:
6
- metadata.gz: b2001e1d59b7fe3596dd7727477e3315f7bc91d4725653ace774bdce0804dd11dceded3908d8be15bf05f8bbcb30e29b90ea8e99366069e693e2eb1ed7526960
7
- data.tar.gz: 34064918737c1c9d1da935488fee01b711823cedc9c5b7ccfd411b30a94390b241ca7a9f6106ecb8c9acb7a6847a475ad2f9930a431d39417a495e7a9a4df812
6
+ metadata.gz: 1ac88d0e37967ad77c5f6b7ffa96646910c90be6cc8fc2d6adead616e73673b8601b2664a0851eec3fbc0eaa2e968a7b5cce7b5ffb89187ca4c77bb12ae6d875
7
+ data.tar.gz: 55ceda21948c6ca6c872b863e22da925d00014625075a77e195f877f154b00ce31fe0a4e63c18a7e0c43b015a023617b4a33c6d4c23da95bee6f6652cc371a88
data/.rubocop.yml CHANGED
@@ -26,7 +26,7 @@ Metrics/BlockLength:
26
26
  Metrics/MethodLength:
27
27
  Max: 15
28
28
 
29
- Gemspec/DateAssignment:
29
+ Gemspec/DeprecatedAttributeAssignment:
30
30
  Enabled: true
31
31
  Layout/SpaceBeforeBrackets:
32
32
  Enabled: true
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 1.8.0
2
+
3
+ Support different touch interval based on expiration time (Daniel André da Silva)
4
+
1
5
  ### 1.7.1
2
6
 
3
7
  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.1-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,23 @@
1
+ version: "3.9"
2
+ services:
3
+ library:
4
+ build:
5
+ context: .
6
+ stdin_open: true
7
+ tty: true
8
+ volumes:
9
+ - ".:/library"
10
+ - vendor:/vendor
11
+ depends_on:
12
+ - redis
13
+ environment:
14
+ - REDIS_URL=redis://redis:6379/1
15
+ - BUNDLE_GEMFILE=gemfiles/rails7.0.gemfile
16
+ redis:
17
+ image: "redis:6-alpine"
18
+ command: redis-server
19
+ volumes:
20
+ - "redis:/data"
21
+ volumes:
22
+ vendor:
23
+ redis:
@@ -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.0".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
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.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Niedzielski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-20 00:00:00.000000000 Z
11
+ date: 2023-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
@@ -141,10 +141,13 @@ 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
150
+ - docker-compose.yml
148
151
  - gemfiles/rails5.2.gemfile
149
152
  - gemfiles/rails6.0.gemfile
150
153
  - gemfiles/rails6.1.gemfile