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 +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +16 -0
- data/lib/jwt_sessions.rb +2 -2
- data/lib/jwt_sessions/store_adapters/redis_store_adapter.rb +18 -4
- data/lib/jwt_sessions/version.rb +1 -1
- data/test/units/jwt_sessions/store_adapters/test_redis_store_adapter.rb +12 -7
- metadata +4 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a485796c7aa19c00c79992111ed0135c0ec93af6e88aff80b233be779bb2301
|
4
|
+
data.tar.gz: d0b89a924589aa8450cfcaefb2061674db4d61cb32ed5ace92f1cab021db1fb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
159
|
-
algos.map { |algo|
|
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 =
|
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
|
-
(
|
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
|
data/lib/jwt_sessions/version.rb
CHANGED
@@ -20,13 +20,18 @@ class TestRedisStoreAdapter < Minitest::Test
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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.
|
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:
|
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.
|
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.
|
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
|