jwt_sessions 2.5.2 → 2.6.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: 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