omniauth-cas 1.1.1 → 2.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.
- checksums.yaml +5 -5
- data/.travis.yml +14 -2
- data/CHANGELOG.md +12 -0
- data/README.md +14 -9
- data/lib/omniauth/cas/version.rb +1 -1
- data/lib/omniauth/strategies/cas.rb +6 -2
- data/lib/omniauth/strategies/cas/service_ticket_validator.rb +13 -1
- data/omniauth-cas.gemspec +4 -4
- data/spec/fixtures/cas_success.xml +3 -0
- data/spec/fixtures/cas_success_jasig.xml +3 -0
- data/spec/omniauth/strategies/cas/logout_request_spec.rb +5 -3
- data/spec/omniauth/strategies/cas/service_ticket_validator_spec.rb +21 -2
- data/spec/omniauth/strategies/cas_spec.rb +12 -1
- metadata +22 -24
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 20d02177b4bdbd637993a8d225133ada4d6d40092b59db98e54b38bbe8aef780
|
4
|
+
data.tar.gz: 9143ccd826882b5f1228b7686958cfa62c9527ab1fef041d6ce1bfb39e7e0f6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9edd4d3c46a7c7349a0ebf05a67747cb25cfda51fc2c4ebfbc054726e4e8b7034f969291f5f184d609999250507bdfe1da01f659cb43682b837d4fa44292271
|
7
|
+
data.tar.gz: e64e3311e11537b2abc77d25189ef38eebdcbb147eb6db53deb7562530371f40851e035eae08370f3621843873c36c47e9690d1e5f2a0678b31ea8dd87f79bca
|
data/.travis.yml
CHANGED
@@ -1,9 +1,21 @@
|
|
1
|
+
dist: xenial
|
2
|
+
os: linux
|
3
|
+
language: ruby
|
1
4
|
rvm:
|
2
5
|
- 2.1
|
3
6
|
- 2.2
|
4
|
-
- 2.3
|
7
|
+
- 2.3
|
8
|
+
- 2.4
|
9
|
+
- 2.5
|
10
|
+
- 2.6
|
11
|
+
- 2.7
|
12
|
+
- ruby-edge
|
5
13
|
branches:
|
6
14
|
only:
|
7
15
|
- master
|
8
16
|
before_install:
|
9
|
-
- gem
|
17
|
+
- gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
|
18
|
+
- gem install bundler -v '< 2'
|
19
|
+
jobs:
|
20
|
+
allow_failures:
|
21
|
+
- rvm: ruby-edge
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/) and this
|
6
6
|
project adheres to [Semantic Versioning](http://semver.org/)
|
7
7
|
|
8
|
+
## 2.0.0 - 2010-11-14
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
* Add support for multivalued attributes ([#59](https://github.com/dlindahl/omniauth-cas/pull/59))
|
13
|
+
* Successfully test against Ruby 2.4 and up ([#60](https://github.com/dlindahl/omniauth-cas/pull/60))
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
* Forward success response to `fetch_raw_info` callback ([#51](https://github.com/dlindahl/omniauth-cas/pull/51))
|
18
|
+
* Relax development dependencies to the latest versions
|
19
|
+
|
8
20
|
## 1.1.1 - 2016-09-19
|
9
21
|
|
10
22
|
### Changed
|
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# OmniAuth CAS Strategy [![Gem Version][version_badge]][version] [![Build Status][travis_status]][travis]
|
2
2
|
|
3
|
-
[version_badge]: https://badge.fury.io/rb/omniauth-cas.
|
4
|
-
[version]:
|
5
|
-
[travis]:
|
6
|
-
[travis_status]: https://secure.travis-ci.org/dlindahl/omniauth-cas.
|
3
|
+
[version_badge]: https://badge.fury.io/rb/omniauth-cas.svg
|
4
|
+
[version]: https://badge.fury.io/rb/omniauth-cas
|
5
|
+
[travis]: https://travis-ci.org/dlindahl/omniauth-cas
|
6
|
+
[travis_status]: https://secure.travis-ci.org/dlindahl/omniauth-cas.svg
|
7
7
|
[releases]: https://github.com/dlindahl/omniauth-cas/releases
|
8
8
|
|
9
9
|
This is a OmniAuth 1.0 compatible port of the previously available
|
@@ -58,6 +58,7 @@ Other configuration options:
|
|
58
58
|
* `uid_field` - The user data attribute to use as your user's unique identifier. Defaults to `'user'` (which usually contains the user's login name).
|
59
59
|
* `ca_path` - Optional when `ssl` is `true`. Sets path of a CA certification directory. See [Net::HTTP][net_http] for more details.
|
60
60
|
* `disable_ssl_verification` - Optional when `ssl` is true. Disables verification.
|
61
|
+
* `merge_multivalued_attributes` - When set to `true` returns attributes with multiple values as arrays. Defaults to `false` and returns the last value as a string.
|
61
62
|
* `on_single_sign_out` - Optional. Callback used when a [CAS 3.1 Single Sign Out][sso]
|
62
63
|
request is received.
|
63
64
|
* `fetch_raw_info` - Optional. Callback used to return additional "raw" user
|
@@ -65,9 +66,13 @@ Other configuration options:
|
|
65
66
|
|
66
67
|
```ruby
|
67
68
|
provider :cas,
|
68
|
-
|
69
|
-
|
70
|
-
|
69
|
+
fetch_raw_info: Proc.new { |strategy, opts, ticket, user_info, rawxml|
|
70
|
+
return {} if user_info.empty? || rawxml.nil? # Auth failed
|
71
|
+
|
72
|
+
extra_info = ExternalService.get(user_info[:user]).attributes
|
73
|
+
extra_info.merge!({'roles' => rawxml.xpath('//cas:roles').map(&:text)})
|
74
|
+
extra_info
|
75
|
+
}
|
71
76
|
```
|
72
77
|
|
73
78
|
Configurable options for values returned by CAS:
|
@@ -118,6 +123,6 @@ Special thanks go out to the following people
|
|
118
123
|
* @rbq for README updates and OmniAuth 0.3 migration guide
|
119
124
|
|
120
125
|
[old_omniauth_cas]: https://github.com/intridea/omniauth/blob/0-3-stable/oa-enterprise/lib/omniauth/strategies/cas.rb
|
121
|
-
[document_up]:
|
122
|
-
[net_http]:
|
126
|
+
[document_up]: https://dlindahl.github.io/omniauth-cas/
|
127
|
+
[net_http]: https://ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/Net/HTTP.html
|
123
128
|
[sso]: https://wiki.jasig.org/display/CASUM/Single+Sign+Out
|
data/lib/omniauth/cas/version.rb
CHANGED
@@ -22,6 +22,7 @@ module OmniAuth
|
|
22
22
|
option :port, nil
|
23
23
|
option :path, nil
|
24
24
|
option :ssl, true
|
25
|
+
option :merge_multivalued_attributes, false
|
25
26
|
option :service_validate_url, '/serviceValidate'
|
26
27
|
option :login_url, '/login'
|
27
28
|
option :logout_url, '/logout'
|
@@ -189,8 +190,11 @@ module OmniAuth
|
|
189
190
|
private
|
190
191
|
|
191
192
|
def fetch_raw_info(ticket)
|
192
|
-
|
193
|
-
|
193
|
+
validator = validate_service_ticket(ticket)
|
194
|
+
ticket_user_info = validator.user_info
|
195
|
+
ticket_success_body = validator.success_body
|
196
|
+
custom_user_info = options.fetch_raw_info.call(self,
|
197
|
+
options, ticket, ticket_user_info, ticket_success_body)
|
194
198
|
self.raw_info = ticket_user_info.merge(custom_user_info)
|
195
199
|
end
|
196
200
|
|
@@ -8,6 +8,8 @@ module OmniAuth
|
|
8
8
|
class ServiceTicketValidator
|
9
9
|
VALIDATION_REQUEST_HEADERS = { 'Accept' => '*/*' }
|
10
10
|
|
11
|
+
attr_reader :success_body
|
12
|
+
|
11
13
|
# Build a validator from a +configuration+, a
|
12
14
|
# +return_to+ URL, and a +ticket+.
|
13
15
|
#
|
@@ -40,6 +42,16 @@ module OmniAuth
|
|
40
42
|
|
41
43
|
private
|
42
44
|
|
45
|
+
# Merges attributes with multiple values into an array if support is
|
46
|
+
# enabled (disabled by default)
|
47
|
+
def attribute_value(user_info, attribute, value)
|
48
|
+
if @options.merge_multivalued_attributes && user_info.key?(attribute)
|
49
|
+
Array(user_info[attribute]).push(value)
|
50
|
+
else
|
51
|
+
value
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
43
55
|
# turns an `<cas:authenticationSuccess>` node into a Hash;
|
44
56
|
# returns nil if given nil
|
45
57
|
def parse_user_info(node)
|
@@ -50,7 +62,7 @@ module OmniAuth
|
|
50
62
|
unless e.kind_of?(Nokogiri::XML::Text) || node_name == 'proxies'
|
51
63
|
# There are no child elements
|
52
64
|
if e.element_children.count == 0
|
53
|
-
hash[node_name] = e.content
|
65
|
+
hash[node_name] = attribute_value(hash, node_name, e.content)
|
54
66
|
elsif e.element_children.count
|
55
67
|
# JASIG style extra attributes
|
56
68
|
if node_name == 'attributes'
|
data/omniauth-cas.gemspec
CHANGED
@@ -19,10 +19,10 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.add_dependency 'nokogiri', '~> 1.5'
|
20
20
|
gem.add_dependency 'addressable', '~> 2.3'
|
21
21
|
|
22
|
-
gem.add_development_dependency 'rake'
|
23
|
-
gem.add_development_dependency 'webmock'
|
24
|
-
gem.add_development_dependency 'rspec'
|
25
|
-
gem.add_development_dependency 'rack-test'
|
22
|
+
gem.add_development_dependency 'rake'
|
23
|
+
gem.add_development_dependency 'webmock'
|
24
|
+
gem.add_development_dependency 'rspec'
|
25
|
+
gem.add_development_dependency 'rack-test'
|
26
26
|
|
27
27
|
gem.add_development_dependency 'awesome_print'
|
28
28
|
end
|
@@ -10,5 +10,8 @@
|
|
10
10
|
<cas:image>/images/user.jpg</cas:image>
|
11
11
|
<cas:phone>555-555-5555</cas:phone>
|
12
12
|
<cas:hire_date>2004-07-13</cas:hire_date>
|
13
|
+
<cas:roles>senator</cas:roles>
|
14
|
+
<cas:roles>lobbyist</cas:roles>
|
15
|
+
<cas:roles>financier</cas:roles>
|
13
16
|
</cas:authenticationSuccess>
|
14
17
|
</cas:serviceResponse>
|
@@ -11,6 +11,9 @@
|
|
11
11
|
<cas:image>/images/user.jpg</cas:image>
|
12
12
|
<cas:phone>555-555-5555</cas:phone>
|
13
13
|
<cas:hire_date>2004-07-13</cas:hire_date>
|
14
|
+
<cas:roles>senator</cas:roles>
|
15
|
+
<cas:roles>lobbyist</cas:roles>
|
16
|
+
<cas:roles>financier</cas:roles>
|
14
17
|
</cas:attributes>
|
15
18
|
</cas:authenticationSuccess>
|
16
19
|
</cas:serviceResponse>
|
@@ -58,12 +58,14 @@ describe OmniAuth::Strategies::CAS::LogoutRequest do
|
|
58
58
|
{ on_single_sign_out: callback }
|
59
59
|
end
|
60
60
|
|
61
|
+
let(:response_body) { subject[2].respond_to?(:body) ? subject[2].body : subject[2] }
|
62
|
+
|
61
63
|
context 'that returns TRUE' do
|
62
64
|
let(:callback) { Proc.new{true} }
|
63
65
|
|
64
66
|
it 'responds with OK' do
|
65
67
|
expect(subject[0]).to eq 200
|
66
|
-
expect(
|
68
|
+
expect(response_body).to eq ['OK']
|
67
69
|
end
|
68
70
|
end
|
69
71
|
|
@@ -72,7 +74,7 @@ describe OmniAuth::Strategies::CAS::LogoutRequest do
|
|
72
74
|
|
73
75
|
it 'responds with OK' do
|
74
76
|
expect(subject[0]).to eq 200
|
75
|
-
expect(
|
77
|
+
expect(response_body).to eq ['OK']
|
76
78
|
end
|
77
79
|
end
|
78
80
|
|
@@ -81,7 +83,7 @@ describe OmniAuth::Strategies::CAS::LogoutRequest do
|
|
81
83
|
|
82
84
|
it 'responds with OK' do
|
83
85
|
expect(subject[0]).to eq 400
|
84
|
-
expect(
|
86
|
+
expect(response_body).to eq ['Bad Request']
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
@@ -9,6 +9,7 @@ describe OmniAuth::Strategies::CAS::ServiceTicketValidator do
|
|
9
9
|
let(:provider_options) do
|
10
10
|
double('provider_options',
|
11
11
|
disable_ssl_verification?: false,
|
12
|
+
merge_multivalued_attributes: false,
|
12
13
|
ca_path: '/etc/ssl/certsZOMG'
|
13
14
|
)
|
14
15
|
end
|
@@ -48,8 +49,26 @@ describe OmniAuth::Strategies::CAS::ServiceTicketValidator do
|
|
48
49
|
|
49
50
|
subject { validator.user_info }
|
50
51
|
|
51
|
-
|
52
|
-
|
52
|
+
context 'with default settings' do
|
53
|
+
it 'parses user info from the response' do
|
54
|
+
expect(subject).to include 'user' => 'psegel'
|
55
|
+
expect(subject).to include 'roles' => 'financier'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when merging multivalued attributes' do
|
60
|
+
let(:provider_options) do
|
61
|
+
double('provider_options',
|
62
|
+
disable_ssl_verification?: false,
|
63
|
+
merge_multivalued_attributes: true,
|
64
|
+
ca_path: '/etc/ssl/certsZOMG'
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'parses multivalued user info from the response' do
|
69
|
+
expect(subject).to include 'user' => 'psegel'
|
70
|
+
expect(subject).to include 'roles' => %w[senator lobbyist financier]
|
71
|
+
end
|
53
72
|
end
|
54
73
|
end
|
55
74
|
end
|
@@ -10,7 +10,17 @@ describe OmniAuth::Strategies::CAS, type: :strategy do
|
|
10
10
|
let(:app) do
|
11
11
|
Rack::Builder.new {
|
12
12
|
use OmniAuth::Test::PhonySession
|
13
|
-
use MyCasProvider,
|
13
|
+
use MyCasProvider,
|
14
|
+
name: :cas,
|
15
|
+
host: 'cas.example.org',
|
16
|
+
ssl: false,
|
17
|
+
port: 8080,
|
18
|
+
uid_field: :employeeid,
|
19
|
+
fetch_raw_info: Proc.new { |v, opts, ticket, info, node|
|
20
|
+
info.empty? ? {} : {
|
21
|
+
"roles" => node.xpath('//cas:roles').map(&:text),
|
22
|
+
}
|
23
|
+
}
|
14
24
|
run lambda { |env| [404, {'Content-Type' => 'text/plain'}, [env.key?('omniauth.auth').to_s]] }
|
15
25
|
}.to_app
|
16
26
|
end
|
@@ -184,6 +194,7 @@ describe OmniAuth::Strategies::CAS, type: :strategy do
|
|
184
194
|
expect(subject.user).to eq 'psegel'
|
185
195
|
expect(subject.employeeid).to eq '54'
|
186
196
|
expect(subject.hire_date).to eq '2004-07-13'
|
197
|
+
expect(subject.roles).to eq %w(senator lobbyist financier)
|
187
198
|
end
|
188
199
|
end
|
189
200
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-cas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Lindahl
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: omniauth
|
@@ -56,58 +56,58 @@ dependencies:
|
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: webmock
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
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: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rack-test
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0
|
103
|
+
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: awesome_print
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,7 +131,6 @@ extra_rdoc_files: []
|
|
131
131
|
files:
|
132
132
|
- ".editorconfig"
|
133
133
|
- ".gitignore"
|
134
|
-
- ".ruby-version"
|
135
134
|
- ".travis.yml"
|
136
135
|
- CHANGELOG.md
|
137
136
|
- Gemfile
|
@@ -155,7 +154,7 @@ files:
|
|
155
154
|
homepage: https://github.com/dlindahl/omniauth-cas
|
156
155
|
licenses: []
|
157
156
|
metadata: {}
|
158
|
-
post_install_message:
|
157
|
+
post_install_message:
|
159
158
|
rdoc_options: []
|
160
159
|
require_paths:
|
161
160
|
- lib
|
@@ -170,9 +169,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
169
|
- !ruby/object:Gem::Version
|
171
170
|
version: '0'
|
172
171
|
requirements: []
|
173
|
-
|
174
|
-
|
175
|
-
signing_key:
|
172
|
+
rubygems_version: 3.1.3
|
173
|
+
signing_key:
|
176
174
|
specification_version: 4
|
177
175
|
summary: CAS Strategy for OmniAuth
|
178
176
|
test_files:
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.1.2
|