hydra-keycloak-client 0.1.17 → 0.1.19
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/Gemfile.lock +1 -1
- data/lib/hydra/keycloak/client.rb +8 -9
- data/lib/hydra/keycloak/store/memcached_client.rb +9 -6
- data/lib/hydra/keycloak/store/redis_client.rb +9 -6
- data/lib/hydra/keycloak/tokens/gateway.rb +36 -9
- data/lib/hydra/keycloak/tokens/repo.rb +9 -12
- data/lib/hydra/keycloak/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53ac1a0505551350a5f1374aa7bd3fb390c68047b8be65e87ec00f6f36e6394a
|
4
|
+
data.tar.gz: 050da3e0481a21c09aa00410dcaf19b514bf23d6dfc868261d8205120898cd2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4ae1d7d6ce9deb7c39c7a4b82d3e3a2caf8fd9a05d9d4a089929e62a98081020699808c21745045461c30a70fa690a6706232126fa100137fe9e37a2bd183d5
|
7
|
+
data.tar.gz: e7761077fd40bb285b57136fa6b800c5f393746a9e02aab44969f81bd19a9eb5ca3fd4aaefe31718680e987999688e217ec7f36fc14d2dd7c9f839f374522b83
|
data/Gemfile.lock
CHANGED
@@ -176,17 +176,13 @@ module Hydra
|
|
176
176
|
end
|
177
177
|
|
178
178
|
def access_token(session_state)
|
179
|
-
return Failure(status: 400, code: :not_authenticated) unless authenticated?(session_state)
|
180
|
-
|
181
179
|
fetch_token(session_state, 'access_token')
|
182
180
|
end
|
183
181
|
|
184
182
|
def authorize!(session_state)
|
185
|
-
return Failure(status: 400, code: :not_authenticated) unless authenticated?(session_state)
|
186
|
-
|
187
183
|
access_token = yield fetch_token(session_state, 'access_token')
|
188
184
|
if token_expired?(access_token)
|
189
|
-
refresh_tokens(session_state)
|
185
|
+
yield refresh_tokens(session_state)
|
190
186
|
|
191
187
|
access_token = yield fetch_token(session_state, 'access_token')
|
192
188
|
end
|
@@ -195,9 +191,7 @@ module Hydra
|
|
195
191
|
end
|
196
192
|
|
197
193
|
def access_token_jti(session_state)
|
198
|
-
|
199
|
-
|
200
|
-
fetch_token(session_state, 'access_token').fmap(&:jti)
|
194
|
+
fetch_token(session_state, 'access_token').fmap { |token| token[:jti] }
|
201
195
|
end
|
202
196
|
|
203
197
|
def logout!(session_state)
|
@@ -223,7 +217,10 @@ module Hydra
|
|
223
217
|
if value
|
224
218
|
Success(::Hydra::Keycloak::Token.new(value))
|
225
219
|
else
|
226
|
-
Failure(
|
220
|
+
Failure(code: :token_not_found,
|
221
|
+
context: { args: { session_state: session_state,
|
222
|
+
token_name: token_name },
|
223
|
+
caller: caller })
|
227
224
|
end
|
228
225
|
end
|
229
226
|
end
|
@@ -250,6 +247,8 @@ module Hydra
|
|
250
247
|
yield save_token(session_state, 'access_token', new_tokens[:access_token])
|
251
248
|
yield save_token(session_state, 'id_token', new_tokens[:id_token])
|
252
249
|
yield save_token(session_state, 'refresh_token', new_tokens[:refresh_token])
|
250
|
+
|
251
|
+
Success()
|
253
252
|
end
|
254
253
|
end
|
255
254
|
end
|
@@ -15,22 +15,25 @@ module Hydra
|
|
15
15
|
dalli.set(key, value)
|
16
16
|
|
17
17
|
Success(:ok)
|
18
|
-
rescue Dalli::DalliError
|
19
|
-
Failure(
|
18
|
+
rescue Dalli::DalliError => e
|
19
|
+
Failure(code: :memcached_unavailable,
|
20
|
+
context: { args: { key: key }, action: :set, error: e.message, caller: caller })
|
20
21
|
end
|
21
22
|
|
22
23
|
def get(key)
|
23
24
|
Success(dalli.get(key))
|
24
|
-
rescue Dalli::DalliError
|
25
|
-
Failure(
|
25
|
+
rescue Dalli::DalliError => e
|
26
|
+
Failure(code: :memcached_unavailable,
|
27
|
+
context: { args: { key: key }, action: :get, error: e.message, caller: caller })
|
26
28
|
end
|
27
29
|
|
28
30
|
def delete(key)
|
29
31
|
dalli.delete(key)
|
30
32
|
|
31
33
|
Success(:ok)
|
32
|
-
rescue Dalli::DalliError
|
33
|
-
Failure(
|
34
|
+
rescue Dalli::DalliError => e
|
35
|
+
Failure(code: :memcached_unavailable,
|
36
|
+
context: { args: { key: key }, action: :delete, error: e.message, caller: caller })
|
34
37
|
end
|
35
38
|
end
|
36
39
|
end
|
@@ -15,22 +15,25 @@ module Hydra
|
|
15
15
|
redis.set(key, value)
|
16
16
|
|
17
17
|
Success(:ok)
|
18
|
-
rescue Redis::BaseError
|
19
|
-
Failure(
|
18
|
+
rescue Redis::BaseError => e
|
19
|
+
Failure(code: :redis_unavailable,
|
20
|
+
context: { args: { key: key }, action: :set, error: e.message, caller: caller })
|
20
21
|
end
|
21
22
|
|
22
23
|
def get(key)
|
23
24
|
Success(redis.get(key))
|
24
|
-
rescue Redis::BaseError
|
25
|
-
Failure(
|
25
|
+
rescue Redis::BaseError => e
|
26
|
+
Failure(code: :redis_unavailable,
|
27
|
+
context: { args: { key: key }, action: :get, error: e.message, caller: caller })
|
26
28
|
end
|
27
29
|
|
28
30
|
def delete(key)
|
29
31
|
redis.del(key)
|
30
32
|
|
31
33
|
Success(:ok)
|
32
|
-
rescue Redis::BaseError
|
33
|
-
Failure(
|
34
|
+
rescue Redis::BaseError => e
|
35
|
+
Failure(code: :redis_unavailable,
|
36
|
+
context: { args: { key: key }, action: :delete, error: e.message, caller: caller })
|
34
37
|
end
|
35
38
|
end
|
36
39
|
end
|
@@ -25,19 +25,46 @@ module Hydra
|
|
25
25
|
Net::ProtocolError].freeze
|
26
26
|
|
27
27
|
def post(path, body)
|
28
|
-
|
28
|
+
_post(URI(path), body)
|
29
|
+
.bind { |resp| parse_response(resp.body) }
|
30
|
+
end
|
29
31
|
|
30
|
-
|
31
|
-
json = JSON.parse(response.body)
|
32
|
+
private
|
32
33
|
|
33
|
-
|
34
|
+
def _post(path, body)
|
35
|
+
response = http.post_form(URI(path), body)
|
36
|
+
|
37
|
+
if %w[200 201].include?(response.code)
|
38
|
+
Success(response)
|
34
39
|
else
|
35
|
-
Failure(
|
40
|
+
Failure(code: :bad_keycloak_response,
|
41
|
+
context: { args: { path: path,
|
42
|
+
body: hide_secrets(body) },
|
43
|
+
caller: caller,
|
44
|
+
method: :post,
|
45
|
+
response: { code: response.code,
|
46
|
+
body: response.body } })
|
36
47
|
end
|
37
|
-
rescue *NETWORK_ERRORS
|
38
|
-
Failure(
|
39
|
-
|
40
|
-
|
48
|
+
rescue *NETWORK_ERRORS => e
|
49
|
+
Failure(code: :keycloak_unavailable, context: { error: e.message, caller: caller })
|
50
|
+
end
|
51
|
+
|
52
|
+
def parse_response(body)
|
53
|
+
Success(JSON.parse(body))
|
54
|
+
rescue JSON::ParserError => e
|
55
|
+
Failure(code: :json_parser_error, context: { args: { body: body }, error: e.message, caller: caller })
|
56
|
+
end
|
57
|
+
|
58
|
+
def hide_secrets(body)
|
59
|
+
secret_fields = %i[client_secret]
|
60
|
+
|
61
|
+
body.map do |k, v|
|
62
|
+
if secret_fields.include?(k)
|
63
|
+
[k, '**hidden**']
|
64
|
+
else
|
65
|
+
[k, v]
|
66
|
+
end
|
67
|
+
end.to_h
|
41
68
|
end
|
42
69
|
end
|
43
70
|
end
|
@@ -14,7 +14,7 @@ module Hydra
|
|
14
14
|
inject['tokens_gateway', 'urls']
|
15
15
|
|
16
16
|
def get_tokens(auth_code, code_verifier)
|
17
|
-
return Failure(
|
17
|
+
return Failure(code: :auth_code_was_not_received, context: { caller: caller }) unless auth_code
|
18
18
|
|
19
19
|
result = tokens_gateway.post(
|
20
20
|
urls.token_endpoint,
|
@@ -31,7 +31,10 @@ module Hydra
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def get_tokens_by_password(username, password)
|
34
|
-
|
34
|
+
if username.nil? || password.nil?
|
35
|
+
return Failure(code: :username_or_password_is_empty,
|
36
|
+
context: { caller: caller })
|
37
|
+
end
|
35
38
|
|
36
39
|
result = tokens_gateway.post(
|
37
40
|
urls.token_endpoint,
|
@@ -55,7 +58,7 @@ module Hydra
|
|
55
58
|
if result['active']
|
56
59
|
Success(result)
|
57
60
|
else
|
58
|
-
Failure(
|
61
|
+
Failure(code: :token_not_active, caller: caller)
|
59
62
|
end
|
60
63
|
end
|
61
64
|
end
|
@@ -65,15 +68,9 @@ module Hydra
|
|
65
68
|
urls.token_endpoint,
|
66
69
|
urls.refresh_request_body(refresh_token)
|
67
70
|
).bind do |result|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
Success({
|
72
|
-
access_token: ::Hydra::Keycloak::Token.new(result['access_token']),
|
73
|
-
id_token: ::Hydra::Keycloak::Token.new(result['id_token']),
|
74
|
-
refresh_token: ::Hydra::Keycloak::Token.new(result['refresh_token'])
|
75
|
-
})
|
76
|
-
end
|
71
|
+
Success({ access_token: ::Hydra::Keycloak::Token.new(result['access_token']),
|
72
|
+
id_token: ::Hydra::Keycloak::Token.new(result['id_token']),
|
73
|
+
refresh_token: ::Hydra::Keycloak::Token.new(result['refresh_token']) })
|
77
74
|
end
|
78
75
|
end
|
79
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydra-keycloak-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fedor Kosolapov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jwt
|