tiddle 1.7.1 → 1.8.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: 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