jwt_sessions 2.5.2 → 2.6.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: 1ec082d39caff5259e52ca85c48a281d0673e7bb64c04d9033b241f99113c726
4
- data.tar.gz: 6c8a90de8b2814bfe148d168706efee94f34e84b01412515d172b9807c7883cd
3
+ metadata.gz: 8a485796c7aa19c00c79992111ed0135c0ec93af6e88aff80b233be779bb2301
4
+ data.tar.gz: d0b89a924589aa8450cfcaefb2061674db4d61cb32ed5ace92f1cab021db1fb1
5
5
  SHA512:
6
- metadata.gz: 433a7a5c8495505bc568641c9d733efaac8d626236ed3fa5484b3465800fcc1deac65fdb02c4d5c2261d725660fb176baf53d710952a9616296821b6852b1a7c
7
- data.tar.gz: 4a5fdfbe4d0e20868544280c5245d8dfbb5a2eafa80940ff30f6572f88afcfd38383123b067e5adf5e9b1e199dd8d908b4660f4521637c789d6a1e06de2b3f1a
6
+ metadata.gz: e0bef3934719502d51f1299b210fad2df87360ef91cc3471384c3840870f3d548f43c5c5c1ff89a33e9e8847b706f9b7e1d2c240f288a21a16533369d8b0fce5
7
+ data.tar.gz: cd8b450b1a09e13290e3ac6ec5bcd17cf52c7314f01044ca1c2888321816585ff27eb7ae7b3935f5aa388fec3c11d9b8ebb0fe2c5fdde5a99cbc390932c4a646
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ ## 2.6.0 (June 01, 2021)
2
+
3
+ Features:
4
+
5
+ - added support for all Redis settings
6
+
7
+ Support:
8
+
9
+ - updated jwt to '>= 2.2.3'
10
+ - switched to redis scan when looking for keys
11
+ - removed extra gems from gemspec deps
12
+ - updated gems in dummy apps
13
+
1
14
  ## 2.5.2 (July 06, 2020)
2
15
 
3
16
  Bugfixes:
data/README.md CHANGED
@@ -369,6 +369,15 @@ JWTSessions.token_store = :redis, { redis_url: "redis://localhost:6397" }
369
369
 
370
370
  **NOTE:** if `REDIS_URL` environment variable is set it is used automatically.
371
371
 
372
+ SSL, timeout, reconnect, etc. redis settings are supported:
373
+ ```ruby
374
+ JWTSessions.token_store = :redis, {
375
+ read_timeout: 1.5,
376
+ reconnect_attempts: 10,
377
+ ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE }
378
+ }
379
+ ```
380
+
372
381
  ##### JWT signature
373
382
 
374
383
  ```ruby
@@ -592,6 +601,13 @@ session = JWTSessions::Session.new(namespace: "ie-sessions")
592
601
  session.flush_namespaced # will flush all sessions which belong to the same namespace
593
602
  ```
594
603
 
604
+ Selectively flush one single session inside a namespace by its access token:
605
+
606
+ ```ruby
607
+ session = JWTSessions::Session.new(namespace: "ie-sessions", payload: payload)
608
+ session.flush_by_access_payload # will flush a specific session which belongs to an existing namespace
609
+ ```
610
+
595
611
  Flush access tokens only:
596
612
 
597
613
  ```ruby
data/lib/jwt_sessions.rb CHANGED
@@ -155,7 +155,7 @@ module JWTSessions
155
155
  private
156
156
 
157
157
  def supported_algos
158
- algos = JWT::Algos.constants - [:Unsupported]
159
- algos.map { |algo| JWT::Algos.const_get(algo)::SUPPORTED }.flatten + [NONE]
158
+ algos = JWT::Algos::ALGOS - [JWT::Algos::Unsupported]
159
+ algos.map { |algo| algo::SUPPORTED }.flatten + [NONE]
160
160
  end
161
161
  end
@@ -62,7 +62,7 @@ module JWTSessions
62
62
  end
63
63
 
64
64
  def all_refresh_tokens(namespace)
65
- keys_in_namespace = storage.keys(refresh_key("*", namespace))
65
+ keys_in_namespace = scan_keys(refresh_key("*", namespace))
66
66
  (keys_in_namespace || []).each_with_object({}) do |key, acc|
67
67
  uid = uid_from_key(key)
68
68
  acc[uid] = fetch_refresh(uid, namespace)
@@ -80,7 +80,7 @@ module JWTSessions
80
80
 
81
81
  private
82
82
 
83
- def configure_redis_client(redis_url: nil, redis_host: nil, redis_port: nil, redis_db_name: nil)
83
+ def configure_redis_client(redis_url: nil, redis_host: nil, redis_port: nil, redis_db_name: nil, **options)
84
84
  if redis_url && (redis_host || redis_port || redis_db_name)
85
85
  raise ArgumentError, "redis_url cannot be passed along with redis_host, redis_port or redis_db_name options"
86
86
  end
@@ -91,7 +91,7 @@ module JWTSessions
91
91
  redis_db_name: redis_db_name
92
92
  )
93
93
 
94
- Redis.new(url: redis_url)
94
+ Redis.new(options.merge(url: redis_url))
95
95
  end
96
96
 
97
97
  def build_redis_url(redis_host: nil, redis_port: nil, redis_db_name: nil)
@@ -111,7 +111,7 @@ module JWTSessions
111
111
 
112
112
  def first_refresh_key(uid)
113
113
  key = full_refresh_key(uid, "*")
114
- (storage.keys(key) || []).first
114
+ (scan_keys(key) || []).first
115
115
  end
116
116
 
117
117
  def refresh_key(uid, namespace)
@@ -126,6 +126,20 @@ module JWTSessions
126
126
  def uid_from_key(key)
127
127
  key.split("_").last
128
128
  end
129
+
130
+ def scan_keys(key_pattern)
131
+ cursor = 0
132
+ all_keys = []
133
+
134
+ loop do
135
+ cursor, keys = storage.scan(cursor, match: key_pattern, count: 1000)
136
+ all_keys |= keys
137
+
138
+ break if cursor == "0"
139
+ end
140
+
141
+ all_keys
142
+ end
129
143
  end
130
144
  end
131
145
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JWTSessions
4
- VERSION = "2.5.2"
4
+ VERSION = "2.6.0"
5
5
  end
@@ -20,13 +20,18 @@ class TestRedisStoreAdapter < Minitest::Test
20
20
  end
21
21
  end
22
22
 
23
- def test_error_on_unknown_option
24
- assert_raises ArgumentError do
25
- JWTSessions::StoreAdapters::RedisStoreAdapter.new(
26
- redis_url: "redis://127.0.0.1:6379/0",
27
- something: "something"
28
- )
29
- end
23
+ def test_support_of_extra_options
24
+ adapter = JWTSessions::StoreAdapters::RedisStoreAdapter.new(
25
+ redis_url: "redis://127.0.0.1:6379",
26
+ ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE },
27
+ reconnect_delay: 2,
28
+ timeout: 8
29
+ )
30
+ options = adapter.storage.instance_variable_get(:@options)
31
+
32
+ assert_equal 8, options[:timeout]
33
+ assert_equal 2, options[:reconnect_delay]
34
+ assert_equal 0, options[:ssl_params][:verify_mode]
30
35
  end
31
36
 
32
37
  def test_default_url
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jwt_sessions
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.2
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yulia Oletskaya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-06 00:00:00.000000000 Z
11
+ date: 2021-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jwt
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.1.1
19
+ version: 2.2.3
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '3'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 2.1.1
29
+ version: 2.2.3
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '3'
@@ -44,34 +44,6 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '1.16'
47
- - !ruby/object:Gem::Dependency
48
- name: minitest
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '5.11'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '5.11'
61
- - !ruby/object:Gem::Dependency
62
- name: pry
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '0.11'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '0.11'
75
47
  - !ruby/object:Gem::Dependency
76
48
  name: rake
77
49
  requirement: !ruby/object:Gem::Requirement