keycloak_ruby 0.1.4 → 0.2.1
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/.rspec_status +70 -70
- data/.ruby-version +1 -1
- data/CHANGELOG.md +4 -0
- data/README.md +33 -0
- data/lib/keycloak_ruby/config.rb +2 -1
- data/lib/keycloak_ruby/railtie.rb +14 -0
- data/lib/keycloak_ruby/request_params.rb +1 -2
- data/lib/keycloak_ruby/testing/keycloak_helpers.rb +25 -7
- data/lib/keycloak_ruby/testing/login_middleware.rb +51 -0
- data/lib/keycloak_ruby/version.rb +1 -1
- data/lib/keycloak_ruby.rb +3 -1
- metadata +14 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dab863bc25bb5a8c853b4792d3b190c473718e4435e3123150ea04cf3e7d135b
|
|
4
|
+
data.tar.gz: fa732b217abe15b324be2b173b740dc2e54743ee9a7a430258b603c8dfa68fc5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fabda0c8e26181776ca2846b75985b84dd320aef47437f4ee6d617f3f5d58cf95454079163cbca733dab44fd392853e44f0c5c84a0a32f25763cd4373d2c78cd
|
|
7
|
+
data.tar.gz: 660fc8396f0456432b6722b66517a58a48768517b5f559d9741e93081eba8aa4817650a1da26c9d44ffe317071217c167ecd7b764da12547ee9a0caf957e9719
|
data/.rspec_status
CHANGED
|
@@ -1,72 +1,72 @@
|
|
|
1
1
|
example_id | status | run_time |
|
|
2
2
|
-------------------------------------------------------- | ------ | --------------- |
|
|
3
|
-
./spec/keycloak_ruby/client_spec.rb[1:1:1:1] | passed | 0.
|
|
4
|
-
./spec/keycloak_ruby/client_spec.rb[1:1:2:1] | passed | 0.
|
|
5
|
-
./spec/keycloak_ruby/client_spec.rb[1:2:1:1] | passed | 0.
|
|
6
|
-
./spec/keycloak_ruby/client_spec.rb[1:2:2:1] | passed | 0.
|
|
7
|
-
./spec/keycloak_ruby/client_spec.rb[1:3:1] | passed | 0.
|
|
8
|
-
./spec/keycloak_ruby/client_spec.rb[1:3:2] | passed | 0.
|
|
9
|
-
./spec/keycloak_ruby/client_spec.rb[1:4:1:1] | passed | 0.
|
|
10
|
-
./spec/keycloak_ruby/client_spec.rb[1:4:2:1] | passed | 0.
|
|
11
|
-
./spec/keycloak_ruby/client_spec.rb[1:5:1] | passed | 0.
|
|
12
|
-
./spec/keycloak_ruby/client_spec.rb[1:6:1:1] | passed | 0.
|
|
13
|
-
./spec/keycloak_ruby/client_spec.rb[1:6:2:1] | passed | 0.
|
|
14
|
-
./spec/keycloak_ruby/config_spec.rb[1:1:1:1] | passed | 0.
|
|
15
|
-
./spec/keycloak_ruby/config_spec.rb[1:1:1:2] | passed | 0.
|
|
16
|
-
./spec/keycloak_ruby/config_spec.rb[1:1:1:3] | passed | 0.
|
|
17
|
-
./spec/keycloak_ruby/config_spec.rb[1:1:1:4] | passed | 0.
|
|
18
|
-
./spec/keycloak_ruby/config_spec.rb[1:1:1:5] | passed | 0.
|
|
19
|
-
./spec/keycloak_ruby/config_spec.rb[1:1:2:1] | passed | 0.
|
|
20
|
-
./spec/keycloak_ruby/config_spec.rb[1:2:1] | passed | 0.
|
|
21
|
-
./spec/keycloak_ruby/config_spec.rb[1:2:2] | passed | 0.
|
|
22
|
-
./spec/keycloak_ruby/config_spec.rb[1:2:3] | passed | 0.
|
|
23
|
-
./spec/keycloak_ruby/config_spec.rb[1:2:4] | passed | 0.
|
|
24
|
-
./spec/keycloak_ruby/config_spec.rb[1:3:1] | passed | 0.
|
|
25
|
-
./spec/keycloak_ruby/config_spec.rb[1:3:2] | passed | 0.
|
|
26
|
-
./spec/keycloak_ruby/config_spec.rb[1:3:3] | passed | 0.
|
|
27
|
-
./spec/keycloak_ruby/config_spec.rb[1:3:4] | passed | 0.
|
|
28
|
-
./spec/keycloak_ruby/config_spec.rb[1:4:1:1] | passed | 0.
|
|
29
|
-
./spec/keycloak_ruby/config_spec.rb[1:4:2:1] | passed | 0.
|
|
30
|
-
./spec/keycloak_ruby/config_spec.rb[1:4:2:2] | passed | 0.
|
|
31
|
-
./spec/keycloak_ruby/request_performer_spec.rb[1:1:1:1] | passed | 0.
|
|
32
|
-
./spec/keycloak_ruby/request_performer_spec.rb[1:1:1:2] | passed | 0.
|
|
33
|
-
./spec/keycloak_ruby/request_performer_spec.rb[1:1:2:1] | passed | 0.
|
|
34
|
-
./spec/keycloak_ruby/request_performer_spec.rb[1:1:3:1] | passed | 0.
|
|
35
|
-
./spec/keycloak_ruby/request_performer_spec.rb[1:1:4:1] | passed | 0.
|
|
36
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:1:1:1] | passed | 0.
|
|
37
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:1:2:1] | passed | 0.
|
|
38
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:1:3:1] | passed | 0.
|
|
39
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:1:4:1] | passed | 0.
|
|
40
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:1:5:1] | passed | 0.
|
|
41
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:1:6:1] | passed | 0.
|
|
42
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:2:1:1] | passed | 0.
|
|
43
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:2:2:1] | passed | 0.
|
|
44
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:2:3:1] | passed | 0.
|
|
45
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:2:4:1] | passed | 0.
|
|
46
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:2:5:1] | passed | 0.
|
|
47
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:2:6:1] | passed | 0.
|
|
48
|
-
./spec/keycloak_ruby/response_validator_spec.rb[1:2:7:1] | passed | 0.
|
|
49
|
-
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:1:1] | passed | 0.
|
|
50
|
-
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:1:2] | passed | 0.
|
|
51
|
-
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:2:1] | passed | 0.
|
|
52
|
-
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:3:1] | passed | 0.
|
|
53
|
-
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:4:1] | passed | 0.
|
|
54
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:1:1:1] | passed | 0.
|
|
55
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:1:2:1] | passed | 0.
|
|
56
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:1:2:2] | passed | 0.
|
|
57
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:2:1] | passed | 0.
|
|
58
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:2:2] | passed | 0.
|
|
59
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:2:3] | passed | 0.
|
|
60
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:3:1] | passed | 0.
|
|
61
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:3:2] | passed | 0.
|
|
62
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:3:3] | passed | 0.
|
|
63
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:4:1:1] | passed | 0.
|
|
64
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:4:2:1] | passed | 0.
|
|
65
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:4:3:1] | passed | 0.
|
|
66
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:4:3:2] | passed | 0.
|
|
67
|
-
./spec/keycloak_ruby/token_service_spec.rb[1:5:1] | passed | 0.
|
|
68
|
-
./spec/keycloak_ruby_spec.rb[1:1] | passed | 0.
|
|
69
|
-
./spec/keycloak_ruby_spec.rb[1:2] | passed | 0.
|
|
70
|
-
./spec/keycloak_ruby_spec.rb[1:3:1] | passed | 0.
|
|
71
|
-
./spec/keycloak_ruby_spec.rb[1:3:2] | passed | 0.
|
|
72
|
-
./spec/keycloak_ruby_spec.rb[1:3:3] | passed | 0.
|
|
3
|
+
./spec/keycloak_ruby/client_spec.rb[1:1:1:1] | passed | 0.03057 seconds |
|
|
4
|
+
./spec/keycloak_ruby/client_spec.rb[1:1:2:1] | passed | 0.00378 seconds |
|
|
5
|
+
./spec/keycloak_ruby/client_spec.rb[1:2:1:1] | passed | 0.0176 seconds |
|
|
6
|
+
./spec/keycloak_ruby/client_spec.rb[1:2:2:1] | passed | 0.00341 seconds |
|
|
7
|
+
./spec/keycloak_ruby/client_spec.rb[1:3:1] | passed | 0.00948 seconds |
|
|
8
|
+
./spec/keycloak_ruby/client_spec.rb[1:3:2] | passed | 0.00634 seconds |
|
|
9
|
+
./spec/keycloak_ruby/client_spec.rb[1:4:1:1] | passed | 0.00407 seconds |
|
|
10
|
+
./spec/keycloak_ruby/client_spec.rb[1:4:2:1] | passed | 0.00431 seconds |
|
|
11
|
+
./spec/keycloak_ruby/client_spec.rb[1:5:1] | passed | 0.00395 seconds |
|
|
12
|
+
./spec/keycloak_ruby/client_spec.rb[1:6:1:1] | passed | 0.00534 seconds |
|
|
13
|
+
./spec/keycloak_ruby/client_spec.rb[1:6:2:1] | passed | 0.00304 seconds |
|
|
14
|
+
./spec/keycloak_ruby/config_spec.rb[1:1:1:1] | passed | 0.00184 seconds |
|
|
15
|
+
./spec/keycloak_ruby/config_spec.rb[1:1:1:2] | passed | 0.00116 seconds |
|
|
16
|
+
./spec/keycloak_ruby/config_spec.rb[1:1:1:3] | passed | 0.001 seconds |
|
|
17
|
+
./spec/keycloak_ruby/config_spec.rb[1:1:1:4] | passed | 0.00088 seconds |
|
|
18
|
+
./spec/keycloak_ruby/config_spec.rb[1:1:1:5] | passed | 0.00085 seconds |
|
|
19
|
+
./spec/keycloak_ruby/config_spec.rb[1:1:2:1] | passed | 0.00017 seconds |
|
|
20
|
+
./spec/keycloak_ruby/config_spec.rb[1:2:1] | passed | 0.00092 seconds |
|
|
21
|
+
./spec/keycloak_ruby/config_spec.rb[1:2:2] | passed | 0.00108 seconds |
|
|
22
|
+
./spec/keycloak_ruby/config_spec.rb[1:2:3] | passed | 0.00088 seconds |
|
|
23
|
+
./spec/keycloak_ruby/config_spec.rb[1:2:4] | passed | 0.00124 seconds |
|
|
24
|
+
./spec/keycloak_ruby/config_spec.rb[1:3:1] | passed | 0.00112 seconds |
|
|
25
|
+
./spec/keycloak_ruby/config_spec.rb[1:3:2] | passed | 0.00091 seconds |
|
|
26
|
+
./spec/keycloak_ruby/config_spec.rb[1:3:3] | passed | 0.00105 seconds |
|
|
27
|
+
./spec/keycloak_ruby/config_spec.rb[1:3:4] | passed | 0.00101 seconds |
|
|
28
|
+
./spec/keycloak_ruby/config_spec.rb[1:4:1:1] | passed | 0.01082 seconds |
|
|
29
|
+
./spec/keycloak_ruby/config_spec.rb[1:4:2:1] | passed | 0.00115 seconds |
|
|
30
|
+
./spec/keycloak_ruby/config_spec.rb[1:4:2:2] | passed | 0.00074 seconds |
|
|
31
|
+
./spec/keycloak_ruby/request_performer_spec.rb[1:1:1:1] | passed | 0.00291 seconds |
|
|
32
|
+
./spec/keycloak_ruby/request_performer_spec.rb[1:1:1:2] | passed | 0.00276 seconds |
|
|
33
|
+
./spec/keycloak_ruby/request_performer_spec.rb[1:1:2:1] | passed | 0.00239 seconds |
|
|
34
|
+
./spec/keycloak_ruby/request_performer_spec.rb[1:1:3:1] | passed | 0.00193 seconds |
|
|
35
|
+
./spec/keycloak_ruby/request_performer_spec.rb[1:1:4:1] | passed | 0.00157 seconds |
|
|
36
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:1:1:1] | passed | 0.00197 seconds |
|
|
37
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:1:2:1] | passed | 0.00049 seconds |
|
|
38
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:1:3:1] | passed | 0.00044 seconds |
|
|
39
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:1:4:1] | passed | 0.00034 seconds |
|
|
40
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:1:5:1] | passed | 0.00029 seconds |
|
|
41
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:1:6:1] | passed | 0.00034 seconds |
|
|
42
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:2:1:1] | passed | 0.00038 seconds |
|
|
43
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:2:2:1] | passed | 0.00059 seconds |
|
|
44
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:2:3:1] | passed | 0.00074 seconds |
|
|
45
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:2:4:1] | passed | 0.00063 seconds |
|
|
46
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:2:5:1] | passed | 0.00041 seconds |
|
|
47
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:2:6:1] | passed | 0.0005 seconds |
|
|
48
|
+
./spec/keycloak_ruby/response_validator_spec.rb[1:2:7:1] | passed | 0.00039 seconds |
|
|
49
|
+
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:1:1] | passed | 0.00258 seconds |
|
|
50
|
+
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:1:2] | passed | 0.00224 seconds |
|
|
51
|
+
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:2:1] | passed | 0.00266 seconds |
|
|
52
|
+
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:3:1] | passed | 0.00154 seconds |
|
|
53
|
+
./spec/keycloak_ruby/token_refresher_spec.rb[1:1:4:1] | passed | 0.00271 seconds |
|
|
54
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:1:1:1] | passed | 0.02588 seconds |
|
|
55
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:1:2:1] | passed | 0.00342 seconds |
|
|
56
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:1:2:2] | passed | 0.00475 seconds |
|
|
57
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:2:1] | passed | 0.00169 seconds |
|
|
58
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:2:2] | passed | 0.00118 seconds |
|
|
59
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:2:3] | passed | 0.00112 seconds |
|
|
60
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:3:1] | passed | 0.00128 seconds |
|
|
61
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:3:2] | passed | 0.0018 seconds |
|
|
62
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:3:3] | passed | 0.00148 seconds |
|
|
63
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:4:1:1] | passed | 0.00153 seconds |
|
|
64
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:4:2:1] | passed | 0.0025 seconds |
|
|
65
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:4:3:1] | passed | 0.00231 seconds |
|
|
66
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:4:3:2] | passed | 0.002 seconds |
|
|
67
|
+
./spec/keycloak_ruby/token_service_spec.rb[1:5:1] | passed | 0.00245 seconds |
|
|
68
|
+
./spec/keycloak_ruby_spec.rb[1:1] | passed | 0.00018 seconds |
|
|
69
|
+
./spec/keycloak_ruby_spec.rb[1:2] | passed | 0.02629 seconds |
|
|
70
|
+
./spec/keycloak_ruby_spec.rb[1:3:1] | passed | 0.00116 seconds |
|
|
71
|
+
./spec/keycloak_ruby_spec.rb[1:3:2] | passed | 0.00102 seconds |
|
|
72
|
+
./spec/keycloak_ruby_spec.rb[1:3:3] | passed | 0.00038 seconds |
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
ruby-
|
|
1
|
+
ruby-4.0.1
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -181,3 +181,36 @@ For test purpose there mock helper sign_in(user)
|
|
|
181
181
|
|
|
182
182
|
- add `require "keycloak_ruby/testing/keycloak_helpers"` to keycloak_helper.rb
|
|
183
183
|
- add sign_in in tests `config.include KeycloakRuby::Testing::KeycloakHelpers`
|
|
184
|
+
|
|
185
|
+
### Fast test login
|
|
186
|
+
|
|
187
|
+
По умолчанию `sign_in` в браузерных тестах (`:feature` / `:system`) проходит полный цикл через OmniAuth.
|
|
188
|
+
Чтобы ускорить тесты, можно включить быстрый логин через Rack-middleware — он записывает фейковые токены
|
|
189
|
+
прямо в сессию, минуя OmniAuth и Keycloak.
|
|
190
|
+
|
|
191
|
+
Добавьте в `config/keycloak.yml`:
|
|
192
|
+
|
|
193
|
+
```yaml
|
|
194
|
+
test:
|
|
195
|
+
fast_test_login: true
|
|
196
|
+
# ... остальные параметры
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
После этого `sign_in(user)` в feature/system тестах будет использовать middleware вместо полного входа.
|
|
200
|
+
|
|
201
|
+
Если в отдельном тесте нужно проверить сам логин (flash-сообщения, редиректы и т.д.),
|
|
202
|
+
используйте `full_sign_in(user)` — он всегда проходит полный цикл через OmniAuth.
|
|
203
|
+
|
|
204
|
+
```ruby
|
|
205
|
+
# Большинство тестов — быстрый вход (при fast_test_login: true)
|
|
206
|
+
sign_in(user)
|
|
207
|
+
|
|
208
|
+
# Тесты, проверяющие логин
|
|
209
|
+
full_sign_in(user)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
| Тип теста | `sign_in` (fast_test_login: true) | `sign_in` (fast_test_login: false) | `full_sign_in` |
|
|
213
|
+
|---|---|---|---|
|
|
214
|
+
| `:feature` / `:system` | Middleware — сессия напрямую | OmniAuth mock → visit /login → клик | OmniAuth mock → visit /login → клик |
|
|
215
|
+
| `:request` | `mock_token_service` | `mock_token_service` | `mock_token_service` |
|
|
216
|
+
| `:controller` и др. | `mock_token_service` | `mock_token_service` | `mock_keycloak_login` без Capybara |
|
data/lib/keycloak_ruby/config.rb
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module KeycloakRuby
|
|
4
|
+
# Подключает middleware для быстрого логина в тестах.
|
|
5
|
+
# Включается только если в конфиге стоит fast_test_login: true
|
|
6
|
+
class Railtie < ::Rails::Railtie
|
|
7
|
+
initializer "keycloak_ruby.test_login_middleware" do |app|
|
|
8
|
+
if Rails.env.test? && KeycloakRuby.config.fast_test_login
|
|
9
|
+
require "keycloak_ruby/testing/login_middleware"
|
|
10
|
+
app.middleware.insert_before ActionDispatch::Flash, KeycloakRuby::Testing::LoginMiddleware
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -4,16 +4,30 @@
|
|
|
4
4
|
# :reek:UtilityFunction :reek:ControlParameter :reek:ManualDispatch :reek:BooleanParameter :reek:LongParameterList
|
|
5
5
|
module KeycloakRuby
|
|
6
6
|
module Testing
|
|
7
|
-
#
|
|
7
|
+
# Хелперы для тестов с Keycloak
|
|
8
8
|
module KeycloakHelpers
|
|
9
|
-
#
|
|
9
|
+
# Быстрый вход: если включён fast_test_login, для браузерных тестов
|
|
10
|
+
# устанавливает сессию через middleware без OmniAuth.
|
|
11
|
+
# Если флаг выключен — идёт через полный логин.
|
|
12
|
+
# Для остальных типов тестов — мокирует TokenService.
|
|
10
13
|
def sign_in(user, test_type: auto_detect_test_type)
|
|
14
|
+
case test_type
|
|
15
|
+
when :feature, :system
|
|
16
|
+
fast_login_enabled? ? visit("/__test_login__/#{user.id}") : full_sign_in(user, test_type:)
|
|
17
|
+
else
|
|
18
|
+
mock_token_service(user)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Полная процедура входа через OmniAuth для тестов, которые проверяют сам логин.
|
|
23
|
+
# Проходит /login → OmniAuth callback → SessionsController#create.
|
|
24
|
+
def full_sign_in(user, test_type: auto_detect_test_type)
|
|
11
25
|
case test_type
|
|
12
26
|
when :request
|
|
13
27
|
mock_token_service(user)
|
|
14
28
|
when :feature, :system
|
|
15
29
|
mock_keycloak_login(user, use_capybara: true)
|
|
16
|
-
else
|
|
30
|
+
else
|
|
17
31
|
mock_keycloak_login(user, use_capybara: false)
|
|
18
32
|
end
|
|
19
33
|
end
|
|
@@ -31,9 +45,9 @@ module KeycloakRuby
|
|
|
31
45
|
user_data
|
|
32
46
|
end
|
|
33
47
|
|
|
34
|
-
#
|
|
48
|
+
# Удаление всех пользователей из Keycloak
|
|
35
49
|
def self.delete_all_keycloak_users
|
|
36
|
-
users = KeycloakRuby::User.find("") #
|
|
50
|
+
users = KeycloakRuby::User.find("") # Пустая строка — ищем всех
|
|
37
51
|
users.each do |user|
|
|
38
52
|
KeycloakRuby::User.delete_by_id(user["id"])
|
|
39
53
|
end
|
|
@@ -107,17 +121,21 @@ module KeycloakRuby
|
|
|
107
121
|
:feature
|
|
108
122
|
end
|
|
109
123
|
end
|
|
124
|
+
|
|
125
|
+
def fast_login_enabled?
|
|
126
|
+
KeycloakRuby.config.fast_test_login
|
|
127
|
+
end
|
|
110
128
|
end
|
|
111
129
|
end
|
|
112
130
|
end
|
|
113
|
-
#
|
|
131
|
+
# Автоматическое подключение хелперов в тестовые фреймворки
|
|
114
132
|
if defined?(RSpec)
|
|
115
133
|
RSpec.configure do |config|
|
|
116
134
|
config.include KeycloakRuby::Testing::KeycloakHelpers
|
|
117
135
|
end
|
|
118
136
|
elsif defined?(Minitest)
|
|
119
137
|
module Minitest
|
|
120
|
-
#
|
|
138
|
+
# Подключение хелперов в Minitest
|
|
121
139
|
class Test
|
|
122
140
|
include KeycloakRuby::Testing::KeycloakHelpers
|
|
123
141
|
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module KeycloakRuby
|
|
4
|
+
module Testing
|
|
5
|
+
# Rack-middleware для быстрой аутентификации в тестах.
|
|
6
|
+
# Записывает токены в сессию напрямую, минуя OmniAuth и Keycloak.
|
|
7
|
+
#
|
|
8
|
+
# Подключается автоматически в test-окружении через KeycloakRuby::Railtie.
|
|
9
|
+
# Используется хелпером sign_in для браузерных тестов (:feature/:system).
|
|
10
|
+
#
|
|
11
|
+
# Было: visit /login → рендер HTML → клик → OmniAuth → SessionsController → редирект
|
|
12
|
+
# Стало: visit /__test_login__/123 → запись сессии → 200 OK
|
|
13
|
+
class LoginMiddleware
|
|
14
|
+
TEST_LOGIN_PATH = %r{\A/__test_login__/(\d+)\z}
|
|
15
|
+
|
|
16
|
+
def initialize(app)
|
|
17
|
+
@app = app
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def call(env)
|
|
21
|
+
if (match = env["PATH_INFO"].match(TEST_LOGIN_PATH))
|
|
22
|
+
handle_test_login(env, match[1].to_i)
|
|
23
|
+
else
|
|
24
|
+
@app.call(env)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def handle_test_login(env, user_id)
|
|
31
|
+
user = ::User.find(user_id)
|
|
32
|
+
fill_session(env, user)
|
|
33
|
+
[200, { "Content-Type" => "text/plain" }, ["Logged in"]]
|
|
34
|
+
rescue ActiveRecord::RecordNotFound
|
|
35
|
+
[404, { "Content-Type" => "text/plain" }, ["Test login failed: User #{user_id} not found"]]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# :reek:UtilityFunction
|
|
39
|
+
def fill_session(env, user)
|
|
40
|
+
email = user.email
|
|
41
|
+
expired_time = 2.hours.from_now.to_i
|
|
42
|
+
token_payload = { "email" => email, "exp" => expired_time }
|
|
43
|
+
|
|
44
|
+
session = env["rack.session"]
|
|
45
|
+
session[:access_token] = JWT.encode(token_payload, nil, "none")
|
|
46
|
+
session[:refresh_token] = "fake-refresh-#{email}"
|
|
47
|
+
session[:id_token] = "fake-id-#{email}"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -6,7 +6,7 @@ module KeycloakRuby
|
|
|
6
6
|
# Follows Semantic Versioning 2.0 (https://semver.org)
|
|
7
7
|
# @example
|
|
8
8
|
# KeycloakRuby::VERSION # => "0.1.3"
|
|
9
|
-
VERSION = "0.1
|
|
9
|
+
VERSION = "0.2.1"
|
|
10
10
|
|
|
11
11
|
# Provides version information and comparison methods for the KeycloakRuby gem.
|
|
12
12
|
# This module follows Semantic Versioning 2.0 guidelines.
|
data/lib/keycloak_ruby.rb
CHANGED
|
@@ -11,11 +11,13 @@ require "omniauth/rails_csrf_protection/railtie" if defined?(Rails)
|
|
|
11
11
|
loader = Zeitwerk::Loader.for_gem
|
|
12
12
|
loader.ignore(
|
|
13
13
|
"#{__dir__}/generators",
|
|
14
|
-
"#{__dir__}/templates"
|
|
14
|
+
"#{__dir__}/templates",
|
|
15
|
+
"#{__dir__}/keycloak_ruby/railtie.rb"
|
|
15
16
|
)
|
|
16
17
|
loader.setup
|
|
17
18
|
|
|
18
19
|
require "generators/keycloak_ruby/install_generator" if defined?(Rails)
|
|
20
|
+
require "keycloak_ruby/railtie" if defined?(Rails::Railtie)
|
|
19
21
|
|
|
20
22
|
# Module for interacting with Keycloak
|
|
21
23
|
module KeycloakRuby
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: keycloak_ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sergey Arkhipov
|
|
8
8
|
- Georgy Shcherbakov
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -16,42 +16,42 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '8.
|
|
19
|
+
version: '8.1'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '8.
|
|
26
|
+
version: '8.1'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: httparty
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.
|
|
33
|
+
version: '0.24'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0.
|
|
40
|
+
version: '0.24'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: jwt
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '3.1'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '3.1'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: omniauth
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -86,14 +86,14 @@ dependencies:
|
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
89
|
+
version: '2.0'
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version:
|
|
96
|
+
version: '2.0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: zeitwerk
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -133,11 +133,13 @@ files:
|
|
|
133
133
|
- lib/keycloak_ruby/client.rb
|
|
134
134
|
- lib/keycloak_ruby/config.rb
|
|
135
135
|
- lib/keycloak_ruby/errors.rb
|
|
136
|
+
- lib/keycloak_ruby/railtie.rb
|
|
136
137
|
- lib/keycloak_ruby/request_params.rb
|
|
137
138
|
- lib/keycloak_ruby/request_performer.rb
|
|
138
139
|
- lib/keycloak_ruby/response_validator.rb
|
|
139
140
|
- lib/keycloak_ruby/testing.rb
|
|
140
141
|
- lib/keycloak_ruby/testing/keycloak_helpers.rb
|
|
142
|
+
- lib/keycloak_ruby/testing/login_middleware.rb
|
|
141
143
|
- lib/keycloak_ruby/token_refresher.rb
|
|
142
144
|
- lib/keycloak_ruby/token_service.rb
|
|
143
145
|
- lib/keycloak_ruby/user.rb
|
|
@@ -161,14 +163,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
161
163
|
requirements:
|
|
162
164
|
- - ">="
|
|
163
165
|
- !ruby/object:Gem::Version
|
|
164
|
-
version: '3.
|
|
166
|
+
version: '3.4'
|
|
165
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
168
|
requirements:
|
|
167
169
|
- - ">="
|
|
168
170
|
- !ruby/object:Gem::Version
|
|
169
171
|
version: '0'
|
|
170
172
|
requirements: []
|
|
171
|
-
rubygems_version:
|
|
173
|
+
rubygems_version: 4.0.3
|
|
172
174
|
specification_version: 4
|
|
173
175
|
summary: Keycloak authentication solution for Rails
|
|
174
176
|
test_files: []
|