prx_auth-rails 4.0.0 → 4.1.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/app/controllers/prx_auth/rails/sessions_controller.rb +13 -3
- data/app/views/prx_auth/rails/sessions/show.html.erb +4 -1
- data/lib/prx_auth/rails/configuration.rb +2 -0
- data/lib/prx_auth/rails/ext/controller.rb +7 -3
- data/lib/prx_auth/rails/version.rb +1 -1
- data/test/prx_auth/rails/configuration_test.rb +3 -0
- data/test/prx_auth/rails/ext/controller_test.rb +13 -6
- data/test/prx_auth/rails/sessions_controller_test.rb +2 -0
- 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: d46435a82e0473d353a1f1849bfcedfb4db925e5a1bce443a8043ca948bfda69
|
4
|
+
data.tar.gz: b867f26410a93aee077e2bad3515b2fb9fb0ee4a9499cbb6bdaef9287639c158
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 308dd3bc5e3eacf014613bac983b097d677f823d60185eb76303345d698f1096e2fa7e24ad74b2f7bf5a2eef4a3222a9bf9ec51a28c1d82698bad48de8d500ad
|
7
|
+
data.tar.gz: b2bf8e7fe515a27e970a4612b7075564366f0a0270c62dca1602e6d51d1dceb7ffe4d5e2143927126bb02b4335bcd09dac501f950c5511cf456c4ffaa309cd42
|
@@ -10,19 +10,29 @@ module PrxAuth::Rails
|
|
10
10
|
before_action :set_after_sign_in_path
|
11
11
|
|
12
12
|
ID_NONCE_SESSION_KEY = 'id_prx_openid_nonce'
|
13
|
+
DEFAULT_SCOPES = 'openid apps'
|
13
14
|
|
14
15
|
def new
|
15
16
|
config = PrxAuth::Rails.configuration
|
16
17
|
|
18
|
+
scope =
|
19
|
+
if config.prx_scope.present?
|
20
|
+
"#{DEFAULT_SCOPES} #{config.prx_scope}"
|
21
|
+
else
|
22
|
+
DEFAULT_SCOPES
|
23
|
+
end
|
24
|
+
|
17
25
|
id_auth_params = {
|
18
26
|
client_id: config.prx_client_id,
|
19
27
|
nonce: fetch_nonce,
|
20
28
|
response_type: 'id_token token',
|
21
|
-
scope:
|
29
|
+
scope: scope,
|
22
30
|
prompt: 'necessary'
|
23
31
|
}
|
24
32
|
|
25
|
-
|
33
|
+
url = '//' + config.id_host + '/authorize?' + id_auth_params.to_query
|
34
|
+
|
35
|
+
redirect_to url, allow_other_host: true
|
26
36
|
end
|
27
37
|
|
28
38
|
def show
|
@@ -44,7 +54,7 @@ module PrxAuth::Rails
|
|
44
54
|
redirect_to after_sign_in_path_for(current_user)
|
45
55
|
else
|
46
56
|
clear_nonce!
|
47
|
-
redirect_to auth_error_sessions_path(error: '
|
57
|
+
redirect_to auth_error_sessions_path(error: params[:error] || 'unknown_error')
|
48
58
|
end
|
49
59
|
end
|
50
60
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
<%= form_for(:sessions, :url => PrxAuth::Rails::Engine.routes.url_helpers.sessions_path) do |f| %>
|
3
3
|
<%= hidden_field_tag :access_token, '', id: 'access-token-field' %>
|
4
4
|
<%= hidden_field_tag :id_token, '', id: 'id-token-field' %>
|
5
|
+
<%= hidden_field_tag :error, '', id: 'error-field' %>
|
5
6
|
<%= f.submit id: 'sessions-form-submit' %>
|
6
7
|
<% end %>
|
7
8
|
</div>
|
@@ -23,14 +24,16 @@
|
|
23
24
|
}
|
24
25
|
|
25
26
|
window.addEventListener("load", () => {
|
26
|
-
var idToken = document.querySelector("#id-token-field");
|
27
27
|
var accessToken = document.querySelector("#access-token-field");
|
28
|
+
var idToken = document.querySelector("#id-token-field");
|
29
|
+
var error = document.querySelector("#error-field");
|
28
30
|
var submit = document.querySelector("input#sessions-form-submit[type=submit]");
|
29
31
|
|
30
32
|
var hashParams = parseURLFragment();
|
31
33
|
|
32
34
|
accessToken.value = hashParams['access_token'];
|
33
35
|
idToken.value = hashParams['id_token'];
|
36
|
+
error.value = hashParams['error'];
|
34
37
|
|
35
38
|
submit.click();
|
36
39
|
});
|
@@ -2,6 +2,7 @@ class PrxAuth::Rails::Configuration
|
|
2
2
|
attr_accessor :install_middleware,
|
3
3
|
:namespace,
|
4
4
|
:prx_client_id,
|
5
|
+
:prx_scope,
|
5
6
|
:id_host,
|
6
7
|
:cert_path
|
7
8
|
|
@@ -11,6 +12,7 @@ class PrxAuth::Rails::Configuration
|
|
11
12
|
def initialize
|
12
13
|
@install_middleware = true
|
13
14
|
@prx_client_id = nil
|
15
|
+
@prx_scope = nil
|
14
16
|
@id_host = DEFAULT_ID_HOST
|
15
17
|
@cert_path = DEFAULT_CERT_PATH
|
16
18
|
|
@@ -52,7 +52,10 @@ module PrxAuth
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def current_user_info
|
55
|
-
session[PRX_USER_INFO_SESSION_KEY] ||=
|
55
|
+
session[PRX_USER_INFO_SESSION_KEY] ||= begin
|
56
|
+
info = fetch_userinfo
|
57
|
+
info.slice('name', 'preferred_username', 'email', 'image_href', 'apps')
|
58
|
+
end
|
56
59
|
end
|
57
60
|
|
58
61
|
def current_user_name
|
@@ -87,7 +90,7 @@ module PrxAuth
|
|
87
90
|
end
|
88
91
|
|
89
92
|
def account_name_for(account_id)
|
90
|
-
account_for(account_id).try(:[],
|
93
|
+
account_for(account_id).try(:[], 'name')
|
91
94
|
end
|
92
95
|
|
93
96
|
def account_for(account_id)
|
@@ -107,7 +110,8 @@ module PrxAuth
|
|
107
110
|
missing = ids - session[PRX_ACCOUNT_MAPPING_SESSION_KEY].keys
|
108
111
|
if missing.present?
|
109
112
|
fetch_accounts(missing).each do |account|
|
110
|
-
|
113
|
+
minimal = account.slice('name', 'type')
|
114
|
+
session[PRX_ACCOUNT_MAPPING_SESSION_KEY][account['id']] = minimal
|
111
115
|
end
|
112
116
|
end
|
113
117
|
|
@@ -7,6 +7,7 @@ describe PrxAuth::Rails::Configuration do
|
|
7
7
|
it 'initializes with defaults' do
|
8
8
|
assert subject.install_middleware
|
9
9
|
assert_nil subject.prx_client_id
|
10
|
+
assert_nil subject.prx_scope
|
10
11
|
assert_equal 'id.prx.org', subject.id_host
|
11
12
|
assert_equal 'api/v1/certs', subject.cert_path
|
12
13
|
end
|
@@ -20,6 +21,7 @@ describe PrxAuth::Rails::Configuration do
|
|
20
21
|
PrxAuth::Rails.configure do |config|
|
21
22
|
config.install_middleware = false
|
22
23
|
config.prx_client_id = 'some-id'
|
24
|
+
config.prx_scope = 'appname:*'
|
23
25
|
config.id_host = 'id.prx.blah'
|
24
26
|
config.cert_path = 'cert/path'
|
25
27
|
config.namespace = :new_test
|
@@ -28,6 +30,7 @@ describe PrxAuth::Rails::Configuration do
|
|
28
30
|
|
29
31
|
refute subject.install_middleware
|
30
32
|
assert_equal 'some-id', subject.prx_client_id
|
33
|
+
assert_equal 'appname:*', subject.prx_scope
|
31
34
|
assert_equal 'id.prx.blah', subject.id_host
|
32
35
|
assert_equal 'cert/path', subject.cert_path
|
33
36
|
assert_equal :new_test, subject.namespace
|
@@ -71,7 +71,7 @@ module PrxAuth::Rails::Ext
|
|
71
71
|
to_return(status: 200, body: JSON.generate(body))
|
72
72
|
|
73
73
|
assert session[@user_info_key] == nil
|
74
|
-
assert_equal @controller.current_user_info, body
|
74
|
+
assert_equal @controller.current_user_info, body.slice('name', 'apps')
|
75
75
|
refute session[@user_info_key] == nil
|
76
76
|
assert_equal @controller.current_user_name, 'Some Username'
|
77
77
|
assert_equal @controller.current_user_apps, {'PRX Publish' => 'https://publish.prx.test'}
|
@@ -117,15 +117,18 @@ module PrxAuth::Rails::Ext
|
|
117
117
|
three = {'id' => 3, 'type' => 'GroupAccount', 'name' => 'Three'}
|
118
118
|
body = {'_embedded' => {'prx:items' => [one, three]}}
|
119
119
|
|
120
|
+
min_one = one.slice('name', 'type')
|
121
|
+
min_three = three.slice('name', 'type')
|
122
|
+
|
120
123
|
id_host = PrxAuth::Rails.configuration.id_host
|
121
124
|
stub_request(:get, "https://#{id_host}/api/v1/accounts?account_ids=1,2,3").
|
122
125
|
to_return(status: 200, body: JSON.generate(body))
|
123
126
|
|
124
127
|
assert_nil session[@account_mapping_key]
|
125
|
-
assert_equal @controller.accounts_for([1, 2, 3]), [
|
128
|
+
assert_equal @controller.accounts_for([1, 2, 3]), [min_one, nil, min_three]
|
126
129
|
refute_nil session[@account_mapping_key]
|
127
|
-
assert_equal @controller.account_for(1),
|
128
|
-
assert_equal @controller.account_for(3),
|
130
|
+
assert_equal @controller.account_for(1), min_one
|
131
|
+
assert_equal @controller.account_for(3), min_three
|
129
132
|
assert_equal @controller.account_name_for(1), 'One'
|
130
133
|
assert_equal @controller.account_name_for(3), 'Three'
|
131
134
|
end
|
@@ -152,12 +155,16 @@ module PrxAuth::Rails::Ext
|
|
152
155
|
session[@account_mapping_key] = {1 => one, 3 => three}
|
153
156
|
body = {'_embedded' => {'prx:items' => [two]}}
|
154
157
|
|
158
|
+
min_one = one.slice('name', 'type')
|
159
|
+
min_two = two.slice('name', 'type')
|
160
|
+
min_three = three.slice('name', 'type')
|
161
|
+
|
155
162
|
id_host = PrxAuth::Rails.configuration.id_host
|
156
163
|
stub_request(:get, "https://#{id_host}/api/v1/accounts?account_ids=2").
|
157
164
|
to_return(status: 200, body: JSON.generate(body))
|
158
165
|
|
159
|
-
assert_equal @controller.accounts_for([1, 2, 3]), [
|
160
|
-
assert_equal @controller.account_for(2),
|
166
|
+
assert_equal @controller.accounts_for([1, 2, 3]), [min_one, min_two, min_three]
|
167
|
+
assert_equal @controller.account_for(2), min_two
|
161
168
|
assert_equal @controller.account_name_for(2), 'Two'
|
162
169
|
end
|
163
170
|
end
|
@@ -82,6 +82,7 @@ module PrxAuth::Rails
|
|
82
82
|
|
83
83
|
test 'should respond with redirect to the auth error page / code if the nonce does not match' do
|
84
84
|
@controller.stub(:validate_token, @stub_claims) do
|
85
|
+
@token_params[:error] = 'verification_failed'
|
85
86
|
session[@nonce_session_key] = 'nonce-does-not-match'
|
86
87
|
post :create, params: @token_params, format: :json
|
87
88
|
assert response.code == '302'
|
@@ -105,6 +106,7 @@ module PrxAuth::Rails
|
|
105
106
|
@controller.stub(:id_claims, @stub_claims) do
|
106
107
|
@controller.stub(:access_claims, @stub_claims.merge('sub' => '444')) do
|
107
108
|
|
109
|
+
@token_params[:error] = 'verification_failed'
|
108
110
|
session[@nonce_session_key] = '123'
|
109
111
|
post :create, params: @token_params, format: :json
|
110
112
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prx_auth-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Rhoden
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|