keycloak_rack 1.0.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.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/main.yml +68 -0
  3. data/.gitignore +8 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +220 -0
  6. data/.ruby-version +1 -0
  7. data/.yardopts +7 -0
  8. data/Appraisals +16 -0
  9. data/CHANGELOG.md +10 -0
  10. data/CODE_OF_CONDUCT.md +132 -0
  11. data/Gemfile +5 -0
  12. data/LICENSE +19 -0
  13. data/README.md +288 -0
  14. data/Rakefile +10 -0
  15. data/bin/appraisal +29 -0
  16. data/bin/console +6 -0
  17. data/bin/fix-appraisals +14 -0
  18. data/bin/rake +29 -0
  19. data/bin/rspec +29 -0
  20. data/bin/rubocop +29 -0
  21. data/bin/yard +29 -0
  22. data/bin/yardoc +29 -0
  23. data/bin/yri +29 -0
  24. data/gemfiles/rack_only.gemfile +5 -0
  25. data/gemfiles/rack_only.gemfile.lock +204 -0
  26. data/gemfiles/rails_6_0.gemfile +9 -0
  27. data/gemfiles/rails_6_0.gemfile.lock +323 -0
  28. data/gemfiles/rails_6_1.gemfile +9 -0
  29. data/gemfiles/rails_6_1.gemfile.lock +326 -0
  30. data/keycloak_rack.gemspec +56 -0
  31. data/lib/keycloak_rack.rb +59 -0
  32. data/lib/keycloak_rack/authenticate.rb +115 -0
  33. data/lib/keycloak_rack/authorize_realm.rb +53 -0
  34. data/lib/keycloak_rack/authorize_resource.rb +54 -0
  35. data/lib/keycloak_rack/config.rb +84 -0
  36. data/lib/keycloak_rack/container.rb +53 -0
  37. data/lib/keycloak_rack/decoded_token.rb +191 -0
  38. data/lib/keycloak_rack/flexible_struct.rb +20 -0
  39. data/lib/keycloak_rack/http_client.rb +86 -0
  40. data/lib/keycloak_rack/import.rb +9 -0
  41. data/lib/keycloak_rack/key_fetcher.rb +20 -0
  42. data/lib/keycloak_rack/key_resolver.rb +64 -0
  43. data/lib/keycloak_rack/middleware.rb +132 -0
  44. data/lib/keycloak_rack/railtie.rb +14 -0
  45. data/lib/keycloak_rack/read_token.rb +40 -0
  46. data/lib/keycloak_rack/resource_role_map.rb +8 -0
  47. data/lib/keycloak_rack/role_map.rb +15 -0
  48. data/lib/keycloak_rack/session.rb +44 -0
  49. data/lib/keycloak_rack/skip_authentication.rb +44 -0
  50. data/lib/keycloak_rack/types.rb +42 -0
  51. data/lib/keycloak_rack/version.rb +6 -0
  52. data/lib/keycloak_rack/with_config.rb +15 -0
  53. data/spec/dummy/.ruby-version +1 -0
  54. data/spec/dummy/README.md +24 -0
  55. data/spec/dummy/Rakefile +8 -0
  56. data/spec/dummy/app/controllers/application_controller.rb +22 -0
  57. data/spec/dummy/app/controllers/test_controller.rb +9 -0
  58. data/spec/dummy/config.ru +8 -0
  59. data/spec/dummy/config/application.rb +52 -0
  60. data/spec/dummy/config/boot.rb +3 -0
  61. data/spec/dummy/config/environment.rb +7 -0
  62. data/spec/dummy/config/environments/development.rb +51 -0
  63. data/spec/dummy/config/environments/test.rb +51 -0
  64. data/spec/dummy/config/initializers/application_controller_renderer.rb +9 -0
  65. data/spec/dummy/config/initializers/backtrace_silencers.rb +10 -0
  66. data/spec/dummy/config/initializers/cors.rb +17 -0
  67. data/spec/dummy/config/initializers/filter_parameter_logging.rb +8 -0
  68. data/spec/dummy/config/initializers/inflections.rb +17 -0
  69. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  70. data/spec/dummy/config/initializers/wrap_parameters.rb +11 -0
  71. data/spec/dummy/config/keycloak.yml +12 -0
  72. data/spec/dummy/config/locales/en.yml +33 -0
  73. data/spec/dummy/config/routes.rb +5 -0
  74. data/spec/dummy/public/robots.txt +1 -0
  75. data/spec/dummy/tmp/development_secret.txt +1 -0
  76. data/spec/factories/decoded_token.rb +18 -0
  77. data/spec/factories/session.rb +21 -0
  78. data/spec/factories/token_payload.rb +40 -0
  79. data/spec/keycloak_rack/authorize_realm_spec.rb +15 -0
  80. data/spec/keycloak_rack/authorize_resource_spec.rb +19 -0
  81. data/spec/keycloak_rack/decoded_token_spec.rb +31 -0
  82. data/spec/keycloak_rack/key_resolver_spec.rb +95 -0
  83. data/spec/keycloak_rack/middleware_spec.rb +172 -0
  84. data/spec/keycloak_rack/rails_integration_spec.rb +43 -0
  85. data/spec/keycloak_rack/session_spec.rb +37 -0
  86. data/spec/keycloak_rack/skip_authentication_spec.rb +55 -0
  87. data/spec/spec_helper.rb +101 -0
  88. data/spec/support/contexts/mocked_keycloak.rb +63 -0
  89. data/spec/support/contexts/mocked_rack_application.rb +41 -0
  90. data/spec/support/test_key.pem +27 -0
  91. data/spec/support/token_helper.rb +76 -0
  92. metadata +616 -0
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "nokogiri", platforms: [:ruby]
6
+ gem "rails", ">= 6.1.0", "< 6.2.0"
7
+ gem "rspec-rails", "5.0.1"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,326 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ keycloak_rack (1.0.0)
5
+ activesupport (>= 4.2)
6
+ anyway_config (>= 2.1.0, < 3)
7
+ dry-auto_inject
8
+ dry-container
9
+ dry-effects (>= 0.0.1)
10
+ dry-initializer
11
+ dry-matcher
12
+ dry-monads (>= 1.3.5, < 2)
13
+ dry-struct (>= 1, < 2)
14
+ dry-types (>= 1, < 2)
15
+ dry-validation
16
+ jwt (>= 2.2.0, < 3)
17
+ rack (>= 2.0.0, < 3)
18
+ zeitwerk (>= 2.0.0, < 3)
19
+
20
+ GEM
21
+ remote: https://rubygems.org/
22
+ specs:
23
+ actioncable (6.1.3.1)
24
+ actionpack (= 6.1.3.1)
25
+ activesupport (= 6.1.3.1)
26
+ nio4r (~> 2.0)
27
+ websocket-driver (>= 0.6.1)
28
+ actionmailbox (6.1.3.1)
29
+ actionpack (= 6.1.3.1)
30
+ activejob (= 6.1.3.1)
31
+ activerecord (= 6.1.3.1)
32
+ activestorage (= 6.1.3.1)
33
+ activesupport (= 6.1.3.1)
34
+ mail (>= 2.7.1)
35
+ actionmailer (6.1.3.1)
36
+ actionpack (= 6.1.3.1)
37
+ actionview (= 6.1.3.1)
38
+ activejob (= 6.1.3.1)
39
+ activesupport (= 6.1.3.1)
40
+ mail (~> 2.5, >= 2.5.4)
41
+ rails-dom-testing (~> 2.0)
42
+ actionpack (6.1.3.1)
43
+ actionview (= 6.1.3.1)
44
+ activesupport (= 6.1.3.1)
45
+ rack (~> 2.0, >= 2.0.9)
46
+ rack-test (>= 0.6.3)
47
+ rails-dom-testing (~> 2.0)
48
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
49
+ actiontext (6.1.3.1)
50
+ actionpack (= 6.1.3.1)
51
+ activerecord (= 6.1.3.1)
52
+ activestorage (= 6.1.3.1)
53
+ activesupport (= 6.1.3.1)
54
+ nokogiri (>= 1.8.5)
55
+ actionview (6.1.3.1)
56
+ activesupport (= 6.1.3.1)
57
+ builder (~> 3.1)
58
+ erubi (~> 1.4)
59
+ rails-dom-testing (~> 2.0)
60
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
61
+ activejob (6.1.3.1)
62
+ activesupport (= 6.1.3.1)
63
+ globalid (>= 0.3.6)
64
+ activemodel (6.1.3.1)
65
+ activesupport (= 6.1.3.1)
66
+ activerecord (6.1.3.1)
67
+ activemodel (= 6.1.3.1)
68
+ activesupport (= 6.1.3.1)
69
+ activestorage (6.1.3.1)
70
+ actionpack (= 6.1.3.1)
71
+ activejob (= 6.1.3.1)
72
+ activerecord (= 6.1.3.1)
73
+ activesupport (= 6.1.3.1)
74
+ marcel (~> 1.0.0)
75
+ mini_mime (~> 1.0.2)
76
+ activesupport (6.1.3.1)
77
+ concurrent-ruby (~> 1.0, >= 1.0.2)
78
+ i18n (>= 1.6, < 2)
79
+ minitest (>= 5.1)
80
+ tzinfo (~> 2.0)
81
+ zeitwerk (~> 2.3)
82
+ addressable (2.7.0)
83
+ public_suffix (>= 2.0.2, < 5.0)
84
+ anyway_config (2.1.0)
85
+ ruby-next-core (>= 0.11.0)
86
+ appraisal (2.4.0)
87
+ bundler
88
+ rake
89
+ thor (>= 0.14.0)
90
+ ast (2.4.2)
91
+ backports (3.21.0)
92
+ builder (3.2.4)
93
+ coderay (1.1.3)
94
+ concurrent-ruby (1.1.8)
95
+ crack (0.4.5)
96
+ rexml
97
+ crass (1.0.6)
98
+ diff-lcs (1.4.4)
99
+ docile (1.3.5)
100
+ dry-auto_inject (0.7.0)
101
+ dry-container (>= 0.3.4)
102
+ dry-configurable (0.12.1)
103
+ concurrent-ruby (~> 1.0)
104
+ dry-core (~> 0.5, >= 0.5.0)
105
+ dry-container (0.7.2)
106
+ concurrent-ruby (~> 1.0)
107
+ dry-configurable (~> 0.1, >= 0.1.3)
108
+ dry-core (0.5.0)
109
+ concurrent-ruby (~> 1.0)
110
+ dry-effects (0.1.5)
111
+ concurrent-ruby (~> 1.0)
112
+ dry-container (~> 0.7, >= 0.7.2)
113
+ dry-core (~> 0.4, >= 0.4.7)
114
+ dry-equalizer (~> 0.2, >= 0.2.2)
115
+ dry-inflector (~> 0.1, >= 0.1.2)
116
+ dry-initializer (~> 3.0)
117
+ dry-equalizer (0.3.0)
118
+ dry-inflector (0.2.0)
119
+ dry-initializer (3.0.4)
120
+ dry-logic (1.2.0)
121
+ concurrent-ruby (~> 1.0)
122
+ dry-core (~> 0.5, >= 0.5)
123
+ dry-matcher (0.9.0)
124
+ dry-core (~> 0.4, >= 0.4.8)
125
+ dry-monads (1.3.5)
126
+ concurrent-ruby (~> 1.0)
127
+ dry-core (~> 0.4, >= 0.4.4)
128
+ dry-equalizer
129
+ dry-schema (1.6.2)
130
+ concurrent-ruby (~> 1.0)
131
+ dry-configurable (~> 0.8, >= 0.8.3)
132
+ dry-core (~> 0.5, >= 0.5)
133
+ dry-initializer (~> 3.0)
134
+ dry-logic (~> 1.0)
135
+ dry-types (~> 1.5)
136
+ dry-struct (1.4.0)
137
+ dry-core (~> 0.5, >= 0.5)
138
+ dry-types (~> 1.5)
139
+ ice_nine (~> 0.11)
140
+ dry-types (1.5.1)
141
+ concurrent-ruby (~> 1.0)
142
+ dry-container (~> 0.3)
143
+ dry-core (~> 0.5, >= 0.5)
144
+ dry-inflector (~> 0.1, >= 0.1.2)
145
+ dry-logic (~> 1.0, >= 1.0.2)
146
+ dry-validation (1.6.0)
147
+ concurrent-ruby (~> 1.0)
148
+ dry-container (~> 0.7, >= 0.7.1)
149
+ dry-core (~> 0.4)
150
+ dry-equalizer (~> 0.2)
151
+ dry-initializer (~> 3.0)
152
+ dry-schema (~> 1.5, >= 1.5.2)
153
+ erubi (1.10.0)
154
+ factory_bot (6.1.0)
155
+ activesupport (>= 5.0.0)
156
+ faker (2.17.0)
157
+ i18n (>= 1.6, < 2)
158
+ globalid (0.4.2)
159
+ activesupport (>= 4.2.0)
160
+ hashdiff (1.0.1)
161
+ i18n (1.8.10)
162
+ concurrent-ruby (~> 1.0)
163
+ ice_nine (0.11.2)
164
+ jwt (2.2.3)
165
+ loofah (2.9.1)
166
+ crass (~> 1.0.2)
167
+ nokogiri (>= 1.5.9)
168
+ mail (2.7.1)
169
+ mini_mime (>= 0.1.1)
170
+ marcel (1.0.1)
171
+ method_source (1.0.0)
172
+ mini_mime (1.0.3)
173
+ mini_portile2 (2.5.1)
174
+ minitest (5.14.4)
175
+ nio4r (2.5.7)
176
+ nokogiri (1.11.3)
177
+ mini_portile2 (~> 2.5.0)
178
+ racc (~> 1.4)
179
+ nokogiri (1.11.3-x86_64-darwin)
180
+ racc (~> 1.4)
181
+ nokogiri (1.11.3-x86_64-linux)
182
+ racc (~> 1.4)
183
+ parallel (1.20.1)
184
+ parser (3.0.1.1)
185
+ ast (~> 2.4.1)
186
+ pry (0.14.1)
187
+ coderay (~> 1.1)
188
+ method_source (~> 1.0)
189
+ public_suffix (4.0.6)
190
+ racc (1.5.2)
191
+ rack (2.2.3)
192
+ rack-test (1.1.0)
193
+ rack (>= 1.0, < 3)
194
+ rails (6.1.3.1)
195
+ actioncable (= 6.1.3.1)
196
+ actionmailbox (= 6.1.3.1)
197
+ actionmailer (= 6.1.3.1)
198
+ actionpack (= 6.1.3.1)
199
+ actiontext (= 6.1.3.1)
200
+ actionview (= 6.1.3.1)
201
+ activejob (= 6.1.3.1)
202
+ activemodel (= 6.1.3.1)
203
+ activerecord (= 6.1.3.1)
204
+ activestorage (= 6.1.3.1)
205
+ activesupport (= 6.1.3.1)
206
+ bundler (>= 1.15.0)
207
+ railties (= 6.1.3.1)
208
+ sprockets-rails (>= 2.0.0)
209
+ rails-dom-testing (2.0.3)
210
+ activesupport (>= 4.2.0)
211
+ nokogiri (>= 1.6)
212
+ rails-html-sanitizer (1.3.0)
213
+ loofah (~> 2.3)
214
+ railties (6.1.3.1)
215
+ actionpack (= 6.1.3.1)
216
+ activesupport (= 6.1.3.1)
217
+ method_source
218
+ rake (>= 0.8.7)
219
+ thor (~> 1.0)
220
+ rainbow (3.0.0)
221
+ rake (13.0.3)
222
+ redcarpet (3.5.1)
223
+ regexp_parser (2.1.1)
224
+ rexml (3.2.5)
225
+ rspec (3.10.0)
226
+ rspec-core (~> 3.10.0)
227
+ rspec-expectations (~> 3.10.0)
228
+ rspec-mocks (~> 3.10.0)
229
+ rspec-core (3.10.1)
230
+ rspec-support (~> 3.10.0)
231
+ rspec-expectations (3.10.1)
232
+ diff-lcs (>= 1.2.0, < 2.0)
233
+ rspec-support (~> 3.10.0)
234
+ rspec-json_expectations (2.2.0)
235
+ rspec-mocks (3.10.2)
236
+ diff-lcs (>= 1.2.0, < 2.0)
237
+ rspec-support (~> 3.10.0)
238
+ rspec-rails (5.0.1)
239
+ actionpack (>= 5.2)
240
+ activesupport (>= 5.2)
241
+ railties (>= 5.2)
242
+ rspec-core (~> 3.10)
243
+ rspec-expectations (~> 3.10)
244
+ rspec-mocks (~> 3.10)
245
+ rspec-support (~> 3.10)
246
+ rspec-support (3.10.2)
247
+ rubocop (1.13.0)
248
+ parallel (~> 1.10)
249
+ parser (>= 3.0.0.0)
250
+ rainbow (>= 2.2.2, < 4.0)
251
+ regexp_parser (>= 1.8, < 3.0)
252
+ rexml
253
+ rubocop-ast (>= 1.2.0, < 2.0)
254
+ ruby-progressbar (~> 1.7)
255
+ unicode-display_width (>= 1.4.0, < 3.0)
256
+ rubocop-ast (1.5.0)
257
+ parser (>= 3.0.1.1)
258
+ rubocop-rake (0.5.1)
259
+ rubocop
260
+ rubocop-rspec (2.3.0)
261
+ rubocop (~> 1.0)
262
+ rubocop-ast (>= 1.1.0)
263
+ ruby-next-core (0.12.0)
264
+ ruby-progressbar (1.11.0)
265
+ simplecov (0.21.2)
266
+ docile (~> 1.1)
267
+ simplecov-html (~> 0.11)
268
+ simplecov_json_formatter (~> 0.1)
269
+ simplecov-html (0.12.3)
270
+ simplecov_json_formatter (0.1.2)
271
+ sprockets (4.0.2)
272
+ concurrent-ruby (~> 1.0)
273
+ rack (> 1, < 3)
274
+ sprockets-rails (3.2.2)
275
+ actionpack (>= 4.0)
276
+ activesupport (>= 4.0)
277
+ sprockets (>= 3.0.0)
278
+ thor (1.1.0)
279
+ timecop (0.9.4)
280
+ tzinfo (2.0.4)
281
+ concurrent-ruby (~> 1.0)
282
+ unicode-display_width (2.0.0)
283
+ webmock (3.12.2)
284
+ addressable (>= 2.3.6)
285
+ crack (>= 0.3.2)
286
+ hashdiff (>= 0.4.0, < 2.0.0)
287
+ websocket-driver (0.7.3)
288
+ websocket-extensions (>= 0.1.0)
289
+ websocket-extensions (0.1.5)
290
+ yard (0.9.26)
291
+ yard-junk (0.0.9)
292
+ backports (>= 3.18)
293
+ rainbow
294
+ yard
295
+ zeitwerk (2.4.2)
296
+
297
+ PLATFORMS
298
+ ruby
299
+ x86_64-darwin-19
300
+ x86_64-linux
301
+
302
+ DEPENDENCIES
303
+ appraisal (= 2.4.0)
304
+ factory_bot (~> 6.1.0)
305
+ faker (= 2.17.0)
306
+ keycloak_rack!
307
+ nokogiri
308
+ pry (= 0.14.1)
309
+ rack-test (= 1.1.0)
310
+ rails (>= 6.1.0, < 6.2.0)
311
+ rake (>= 13, < 14)
312
+ redcarpet
313
+ rspec (= 3.10.0)
314
+ rspec-json_expectations (= 2.2.0)
315
+ rspec-rails (= 5.0.1)
316
+ rubocop (= 1.13.0)
317
+ rubocop-rake (= 0.5.1)
318
+ rubocop-rspec (= 2.3.0)
319
+ simplecov (= 0.21.2)
320
+ timecop (= 0.9.4)
321
+ webmock (= 3.12.2)
322
+ yard (= 0.9.26)
323
+ yard-junk
324
+
325
+ BUNDLED WITH
326
+ 2.2.16
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path("lib", __dir__)
4
+
5
+ require "keycloak_rack/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "keycloak_rack"
9
+ spec.version = KeycloakRack::VERSION
10
+ spec.authors = ["Alexa Grey"]
11
+ spec.email = ["devel@mouse.vc"]
12
+ spec.homepage = "https://github.com/scryptmouse/keycloak_rack"
13
+ spec.summary = "Rack middleware for validating authorization tokens from Keycloak"
14
+ spec.description = "Rack middleware for validating authorization tokens from Keycloak"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.metadata["yard.run"] = "yri"
21
+
22
+ spec.add_dependency "activesupport", ">= 4.2"
23
+ spec.add_dependency "anyway_config", ">= 2.1.0", "< 3"
24
+ spec.add_dependency "dry-auto_inject"
25
+ spec.add_dependency "dry-container"
26
+ spec.add_dependency "dry-effects", ">= 0.0.1"
27
+ spec.add_dependency "dry-initializer"
28
+ spec.add_dependency "dry-matcher"
29
+ spec.add_dependency "dry-monads", ">= 1.3.5", "< 2"
30
+ spec.add_dependency "dry-struct", ">= 1", "< 2"
31
+ spec.add_dependency "dry-types", ">= 1", "< 2"
32
+ spec.add_dependency "dry-validation"
33
+ spec.add_dependency "jwt", ">= 2.2.0", "< 3"
34
+ spec.add_dependency "rack", ">= 2.0.0", "< 3"
35
+ spec.add_dependency "zeitwerk", ">= 2.0.0", "< 3"
36
+
37
+ spec.add_development_dependency "appraisal", "2.4.0"
38
+ spec.add_development_dependency "factory_bot", "~> 6.1.0"
39
+ spec.add_development_dependency "faker", "2.17.0"
40
+ spec.add_development_dependency "pry", "0.14.1"
41
+ spec.add_development_dependency "rack-test", "1.1.0"
42
+ spec.add_development_dependency "rake", ">= 13", "< 14"
43
+ spec.add_development_dependency "redcarpet"
44
+ spec.add_development_dependency "rspec", "3.10.0"
45
+ spec.add_development_dependency "rspec-json_expectations", "2.2.0"
46
+ spec.add_development_dependency "rubocop", "1.13.0"
47
+ spec.add_development_dependency "rubocop-rake", "0.5.1"
48
+ spec.add_development_dependency "rubocop-rspec", "2.3.0"
49
+ spec.add_development_dependency "simplecov", "0.21.2"
50
+ spec.add_development_dependency "timecop", "0.9.4"
51
+ spec.add_development_dependency "webmock", "3.12.2"
52
+ spec.add_development_dependency "yard", "0.9.26"
53
+ spec.add_development_dependency "yard-junk"
54
+
55
+ spec.required_ruby_version = ">= 2.7.0"
56
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jwt"
4
+ require "uri"
5
+ require "date"
6
+ require "net/http"
7
+ require "zeitwerk"
8
+
9
+ require "active_support/all"
10
+
11
+ require "anyway_config"
12
+ require "dry/auto_inject"
13
+ require "dry/container"
14
+ require "dry/effects"
15
+ require "dry/initializer"
16
+ require "dry/matcher"
17
+ require "dry/monads"
18
+ require "dry/struct"
19
+ require "dry/types"
20
+ require "dry/validation"
21
+
22
+ require "dry/monads/result"
23
+ require "dry/matcher/result_matcher"
24
+
25
+ Dry::Types.load_extensions(:monads)
26
+
27
+ loader = Zeitwerk::Loader.for_gem
28
+
29
+ loader.do_not_eager_load "#{__dir__}/keycloak_rack/railtie.rb"
30
+
31
+ loader.inflector.inflect(
32
+ "http_client" => "HTTPClient"
33
+ )
34
+
35
+ loader.setup
36
+
37
+ # Authorize [Keycloak](https://www.keycloak.org) tokens via {KeycloakRack::Middleware rack middleware}.
38
+ module KeycloakRack
39
+ class << self
40
+ include KeycloakRack::WithConfig
41
+
42
+ # Configure the gem manually.
43
+ #
44
+ # @note Changes using this format will _overwrite_ values inherited from ENV or config files.
45
+ # @yield [config] configure the gem
46
+ # @yieldparam [KeycloakRack::Config] config
47
+ # @yieldreturn [void]
48
+ # @return [void]
49
+ def configure
50
+ yield config
51
+ end
52
+ end
53
+ end
54
+
55
+ loader.eager_load
56
+
57
+ # :nocov:
58
+ KeycloakRack::Railtie if defined?(Rails)
59
+ # :nocov: