vibes-rubycas-client 2.3.0.alpha6 → 2.3.0.alpha7
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.
- data/Gemfile +2 -0
- data/Gemfile.lock +7 -2
- data/README.rdoc +2 -2
- data/VERSION +1 -1
- data/lib/casclient/client.rb +16 -5
- data/lib/casclient/frameworks/rails/filter.rb +24 -29
- data/lib/casclient/tickets.rb +3 -3
- data/test/teststrap.rb +3 -0
- data/test/units/casclient/frameworks/rails/filter_test.rb +157 -5
- data/vibes-rubycas-client.gemspec +5 -2
- metadata +43 -27
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
4
|
+
actionpack (2.3.11)
|
5
|
+
activesupport (= 2.3.11)
|
6
|
+
rack (~> 1.1.0)
|
7
|
+
activesupport (2.3.11)
|
5
8
|
git (1.2.5)
|
6
9
|
jeweler (1.6.2)
|
7
10
|
bundler (~> 1.0)
|
8
11
|
git (>= 1.2.5)
|
9
12
|
rake
|
10
|
-
|
13
|
+
rack (1.1.2)
|
14
|
+
rake (0.8.7)
|
11
15
|
rcov (0.9.9)
|
12
16
|
riot (0.12.4)
|
13
17
|
rr
|
@@ -17,6 +21,7 @@ PLATFORMS
|
|
17
21
|
ruby
|
18
22
|
|
19
23
|
DEPENDENCIES
|
24
|
+
actionpack (~> 2.3.11)
|
20
25
|
activesupport (~> 2.3.11)
|
21
26
|
bundler (~> 1.0.0)
|
22
27
|
jeweler (~> 1.6.2)
|
data/README.rdoc
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
= RubyCAS-Client
|
2
2
|
|
3
|
-
Authors:: Matt Campbell and Rahul Joshi, forked from original project by Matt Zukowski <matt AT roughest DOT net>; inspired by code by Ola Bini <ola.bini AT ki DOT se> and Matt Walker <mwalker AT tamu DOT edu>
|
3
|
+
Authors:: Matt Campbell, Rich Yarger and Rahul Joshi, forked from original project by Matt Zukowski <matt AT roughest DOT net>; inspired by code by Ola Bini <ola.bini AT ki DOT se> and Matt Walker <mwalker AT tamu DOT edu>
|
4
4
|
Copyright:: Portions contributed by Matt Zukowski are copyright (c) 2009 Urbacon Ltd.
|
5
|
-
|
5
|
+
Portions contributed by Matt Campbell, Rich Yarger and Rahul Joshi are copyright (c) 2011 Vibes Media LLC.
|
6
6
|
Other portions are copyright of their respective authors.
|
7
7
|
License:: MIT License
|
8
8
|
Websites:: http://github.com/vibes/rubycas-client
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.0.
|
1
|
+
2.3.0.alpha7
|
data/lib/casclient/client.rb
CHANGED
@@ -98,11 +98,17 @@ module CASClient
|
|
98
98
|
h = uri.query ? query_to_hash(uri.query) : {}
|
99
99
|
h['service'] = st.service
|
100
100
|
h['ticket'] = st.ticket
|
101
|
-
h['renew'] = 1 if st.renew
|
101
|
+
h['renew'] = "1" if st.renew
|
102
102
|
h['pgtUrl'] = proxy_callback_url if proxy_callback_url
|
103
103
|
uri.query = hash_to_query(h)
|
104
104
|
|
105
|
-
|
105
|
+
response = request_cas_response(uri, ValidationResponse)
|
106
|
+
st.user = response.user
|
107
|
+
st.extra_attributes = response.extra_attributes
|
108
|
+
st.pgt_iou = response.pgt_iou
|
109
|
+
st.success = response.is_success?
|
110
|
+
st.failure_code = response.failure_code
|
111
|
+
st.failure_message = response.failure_message
|
106
112
|
|
107
113
|
return st
|
108
114
|
end
|
@@ -183,10 +189,15 @@ module CASClient
|
|
183
189
|
h['targetService'] = target_service
|
184
190
|
uri.query = hash_to_query(h)
|
185
191
|
|
186
|
-
|
192
|
+
response = request_cas_response(uri, ProxyResponse)
|
187
193
|
|
188
|
-
pt = ProxyTicket.new(
|
189
|
-
pt.
|
194
|
+
pt = ProxyTicket.new(response.proxy_ticket, target_service)
|
195
|
+
pt.user = response.user
|
196
|
+
pt.extra_attributes = response.extra_attributes
|
197
|
+
pt.pgt_iou = response.pgt_iou
|
198
|
+
pt.success = response.is_success?
|
199
|
+
pt.failure_code = response.failure_code
|
200
|
+
pt.failure_message = response.failure_message
|
190
201
|
|
191
202
|
return pt
|
192
203
|
end
|
@@ -23,6 +23,7 @@ module CASClient
|
|
23
23
|
end
|
24
24
|
|
25
25
|
last_st = controller.session[:cas_last_valid_ticket]
|
26
|
+
last_st_service = controller.session[:cas_last_valid_ticket_service]
|
26
27
|
|
27
28
|
if single_sign_out(controller)
|
28
29
|
controller.send(:render, :text => "CAS Single-Sign-Out request intercepted.")
|
@@ -31,17 +32,14 @@ module CASClient
|
|
31
32
|
|
32
33
|
st = read_ticket(controller)
|
33
34
|
|
34
|
-
is_new_session = true
|
35
|
-
|
36
35
|
if st && last_st &&
|
37
|
-
last_st
|
38
|
-
|
36
|
+
last_st == st.ticket &&
|
37
|
+
last_st_service == st.service
|
39
38
|
# warn() rather than info() because we really shouldn't be re-validating the same ticket.
|
40
39
|
# The only situation where this is acceptable is if the user manually does a refresh and
|
41
40
|
# the same ticket happens to be in the URL.
|
42
41
|
log.warn("Re-using previously validated ticket since the ticket id and service are the same.")
|
43
|
-
|
44
|
-
is_new_session = false
|
42
|
+
return true
|
45
43
|
elsif last_st &&
|
46
44
|
!config[:authenticate_on_every_request] &&
|
47
45
|
controller.session[client.username_session_key]
|
@@ -53,43 +51,42 @@ module CASClient
|
|
53
51
|
# the :authenticate_on_every_request config option to true. However, this is not desirable since
|
54
52
|
# it will almost certainly break POST request, AJAX calls, etc.
|
55
53
|
log.debug "Existing local CAS session detected for #{controller.session[client.username_session_key].inspect}. "+
|
56
|
-
"Previous ticket #{last_st.
|
57
|
-
|
58
|
-
is_new_session = false
|
54
|
+
"Previous ticket #{last_st.inspect} will be re-used."
|
55
|
+
return true
|
59
56
|
end
|
60
57
|
|
61
58
|
if st
|
62
59
|
client.validate_service_ticket(st) unless st.has_been_validated?
|
63
|
-
vr = st.response
|
64
60
|
|
65
61
|
if st.is_valid?
|
66
|
-
if is_new_session
|
67
|
-
log.info("Ticket #{st.ticket.inspect} for service #{st.service.inspect} belonging to user #{
|
68
|
-
controller.session[client.username_session_key] =
|
69
|
-
controller.session[client.extra_attributes_session_key] = HashWithIndifferentAccess.new(
|
62
|
+
#if is_new_session
|
63
|
+
log.info("Ticket #{st.ticket.inspect} for service #{st.service.inspect} belonging to user #{st.user.inspect} is VALID.")
|
64
|
+
controller.session[client.username_session_key] = st.user.dup
|
65
|
+
controller.session[client.extra_attributes_session_key] = HashWithIndifferentAccess.new(st.extra_attributes) if st.extra_attributes
|
70
66
|
|
71
|
-
if
|
72
|
-
log.debug("Extra user attributes provided along with ticket #{st.ticket.inspect}: #{
|
67
|
+
if st.extra_attributes
|
68
|
+
log.debug("Extra user attributes provided along with ticket #{st.ticket.inspect}: #{st.extra_attributes.inspect}.")
|
73
69
|
end
|
74
70
|
|
75
71
|
# RubyCAS-Client 1.x used :casfilteruser as it's username session key,
|
76
72
|
# so we need to set this here to ensure compatibility with configurations
|
77
73
|
# built around the old client.
|
78
|
-
controller.session[:casfilteruser] =
|
74
|
+
controller.session[:casfilteruser] = st.user
|
79
75
|
|
80
76
|
if config[:enable_single_sign_out]
|
81
|
-
|
77
|
+
client.ticket_store.store_service_session_lookup(st, controller)
|
82
78
|
end
|
83
|
-
end
|
79
|
+
#end
|
84
80
|
|
85
81
|
# Store the ticket in the session to avoid re-validating the same service
|
86
82
|
# ticket with the CAS server.
|
87
|
-
controller.session[:cas_last_valid_ticket] = st
|
83
|
+
controller.session[:cas_last_valid_ticket] = st.ticket
|
84
|
+
controller.session[:cas_last_valid_ticket_service] = st.service
|
88
85
|
|
89
|
-
if
|
90
|
-
unless controller.session[:cas_pgt] && controller.session[:cas_pgt].ticket && controller.session[:cas_pgt].iou ==
|
86
|
+
if st.pgt_iou
|
87
|
+
unless controller.session[:cas_pgt] && controller.session[:cas_pgt].ticket && controller.session[:cas_pgt].iou == st.pgt_iou
|
91
88
|
log.info("Receipt has a proxy-granting ticket IOU. Attempting to retrieve the proxy-granting ticket...")
|
92
|
-
pgt = client.retrieve_proxy_granting_ticket(
|
89
|
+
pgt = client.retrieve_proxy_granting_ticket(st.pgt_iou)
|
93
90
|
|
94
91
|
if pgt
|
95
92
|
log.debug("Got PGT #{pgt.ticket.inspect} for PGT IOU #{pgt.iou.inspect}. This will be stored in the session.")
|
@@ -97,18 +94,16 @@ module CASClient
|
|
97
94
|
# For backwards compatibility with RubyCAS-Client 1.x configurations...
|
98
95
|
controller.session[:casfilterpgt] = pgt
|
99
96
|
else
|
100
|
-
log.error("Failed to retrieve a PGT for PGT IOU #{
|
97
|
+
log.error("Failed to retrieve a PGT for PGT IOU #{st.pgt_iou}!")
|
101
98
|
end
|
102
99
|
else
|
103
|
-
log.info("PGT is present in session and PGT IOU #{
|
100
|
+
log.info("PGT is present in session and PGT IOU #{st.pgt_iou} matches the saved PGT IOU. Not retrieving new PGT.")
|
104
101
|
end
|
105
|
-
|
106
102
|
end
|
107
|
-
|
108
103
|
return true
|
109
104
|
else
|
110
|
-
log.warn("Ticket #{st.ticket.inspect} failed validation -- #{
|
111
|
-
unauthorized!(controller,
|
105
|
+
log.warn("Ticket #{st.ticket.inspect} failed validation -- #{st.failure_code}: #{st.failure_message}")
|
106
|
+
unauthorized!(controller, st)
|
112
107
|
return false
|
113
108
|
end
|
114
109
|
else # no service ticket was present in the request
|
data/lib/casclient/tickets.rb
CHANGED
@@ -2,7 +2,7 @@ module CASClient
|
|
2
2
|
# Represents a CAS service ticket.
|
3
3
|
class ServiceTicket
|
4
4
|
attr_reader :ticket, :service, :renew
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :user, :extra_attributes, :pgt_iou, :success, :failure_code, :failure_message
|
6
6
|
|
7
7
|
def initialize(ticket, service, renew = false)
|
8
8
|
@ticket = ticket
|
@@ -11,11 +11,11 @@ module CASClient
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def is_valid?
|
14
|
-
|
14
|
+
success
|
15
15
|
end
|
16
16
|
|
17
17
|
def has_been_validated?
|
18
|
-
not
|
18
|
+
not user.nil?
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
data/test/teststrap.rb
CHANGED
@@ -1,32 +1,184 @@
|
|
1
1
|
require 'teststrap'
|
2
2
|
require 'casclient/frameworks/rails/filter'
|
3
|
+
require 'action_controller'
|
3
4
|
|
4
5
|
context CASClient::Frameworks::Rails::Filter do
|
5
|
-
|
6
|
+
|
7
|
+
helper(:controller_with_session) do |session, request|
|
6
8
|
controller = Object.new
|
7
9
|
stub(controller).session {session}
|
10
|
+
stub(controller).request {request}
|
11
|
+
stub(controller).url_for {"bogusurl"}
|
12
|
+
stub(controller).params {{:ticket => "bogusticket", :renew => false}}
|
8
13
|
controller
|
9
14
|
end
|
15
|
+
|
10
16
|
setup do
|
11
17
|
CASClient::Frameworks::Rails::Filter.configure(
|
12
18
|
:cas_base_url => 'http://test.local/',
|
13
19
|
:logger => stub!
|
14
20
|
)
|
15
21
|
end
|
16
|
-
|
22
|
+
|
23
|
+
context "fake user without attributes" do
|
17
24
|
setup { CASClient::Frameworks::Rails::Filter.fake('tester@test.com') }
|
18
25
|
should 'set the session user on #filter' do
|
19
26
|
setup { Hash.new }
|
20
|
-
CASClient::Frameworks::Rails::Filter.filter(controller_with_session(topic))
|
27
|
+
CASClient::Frameworks::Rails::Filter.filter(controller_with_session(topic,nil))
|
21
28
|
topic
|
22
29
|
end.equals :cas_user => 'tester@test.com', :casfilteruser => 'tester@test.com'
|
30
|
+
teardown { CASClient::Frameworks::Rails::Filter.fake(nil,nil) }
|
23
31
|
end
|
24
|
-
|
32
|
+
|
33
|
+
context "fake user with attributes" do
|
25
34
|
setup { CASClient::Frameworks::Rails::Filter.fake('tester@test.com', {:test => 'stuff', :this => 'that'}) }
|
26
35
|
should 'set the session user and attributes on #filter' do
|
27
36
|
setup { Hash.new }
|
28
|
-
CASClient::Frameworks::Rails::Filter.filter(controller_with_session(topic))
|
37
|
+
CASClient::Frameworks::Rails::Filter.filter(controller_with_session(topic,nil))
|
29
38
|
topic
|
30
39
|
end.equals :cas_user => 'tester@test.com', :casfilteruser => 'tester@test.com', :cas_extra_attributes => {:test => 'stuff', :this => 'that' }
|
40
|
+
teardown { CASClient::Frameworks::Rails::Filter.fake(nil,nil) }
|
41
|
+
end
|
42
|
+
|
43
|
+
context "new service ticket successfully" do
|
44
|
+
should("return successfully from filter") do
|
45
|
+
setup { Hash.new }
|
46
|
+
mock_request = ActionController::Request.new({})
|
47
|
+
mock(mock_request).post? {true}
|
48
|
+
|
49
|
+
pgt = CASClient::ProxyGrantingTicket.new(
|
50
|
+
"PGT-1308586001r9573FAD5A8C62E134A4AA93273F226BD3F0C3A983DCCCD176",
|
51
|
+
"PGTIOU-1308586001r29DC1F852C95930FE6694C1EFC64232A3359798893BC0B")
|
52
|
+
|
53
|
+
raw_text = "<cas:serviceResponse xmlns:cas=\"http://www.yale.edu/tp/cas\">
|
54
|
+
<cas:authenticationSuccess>
|
55
|
+
<cas:user>rich.yarger@vibes.com</cas:user>
|
56
|
+
<cas:proxyGrantingTicket>PGTIOU-1308586001r29DC1F852C95930FE6694C1EFC64232A3359798893BC0B</cas:proxyGrantingTicket>
|
57
|
+
</cas:authenticationSuccess>
|
58
|
+
</cas:serviceResponse>"
|
59
|
+
response = CASClient::ValidationResponse.new(raw_text)
|
60
|
+
|
61
|
+
any_instance_of(CASClient::Client, :request_cas_response => response)
|
62
|
+
any_instance_of(CASClient::Client, :retrieve_proxy_granting_ticket => pgt)
|
63
|
+
|
64
|
+
controller = controller_with_session(topic,mock_request)
|
65
|
+
CASClient::Frameworks::Rails::Filter.filter(controller)
|
66
|
+
end.equals(true)
|
67
|
+
end
|
68
|
+
|
69
|
+
context "new service ticket with invalid service ticket" do
|
70
|
+
should("return failure from filter") do
|
71
|
+
setup { Hash.new }
|
72
|
+
mock_request = ActionController::Request.new({})
|
73
|
+
mock(mock_request).post? {true}
|
74
|
+
|
75
|
+
raw_text = "<cas:serviceResponse xmlns:cas=\"http://www.yale.edu/tp/cas\">
|
76
|
+
<cas:authenticationFailure>Some Error Text</cas:authenticationFailure>
|
77
|
+
</cas:serviceResponse>"
|
78
|
+
response = CASClient::ValidationResponse.new(raw_text)
|
79
|
+
|
80
|
+
any_instance_of(CASClient::Client, :request_cas_response => response)
|
81
|
+
stub(CASClient::Frameworks::Rails::Filter).unauthorized!{"bogusresponse"}
|
82
|
+
|
83
|
+
controller = controller_with_session(topic,mock_request)
|
84
|
+
CASClient::Frameworks::Rails::Filter.filter(controller)
|
85
|
+
end.equals(false)
|
86
|
+
end
|
87
|
+
|
88
|
+
context "no new service ticket but with last service ticket" do
|
89
|
+
should("return failure from filter") do
|
90
|
+
setup { Hash.new }
|
91
|
+
mock_request = ActionController::Request.new({})
|
92
|
+
mock(mock_request).post? {true}
|
93
|
+
|
94
|
+
stub(CASClient::Frameworks::Rails::Filter).unauthorized!{"bogusresponse"}
|
95
|
+
|
96
|
+
controller = controller_with_session(topic,mock_request)
|
97
|
+
stub(controller).params {{}}
|
98
|
+
CASClient::Frameworks::Rails::Filter.filter(controller)
|
99
|
+
end.equals(false)
|
100
|
+
end
|
101
|
+
|
102
|
+
context "no new service ticket sent through gateway, gatewaying off" do
|
103
|
+
should("return failure from filter") do
|
104
|
+
setup { Hash.new }
|
105
|
+
mock_request = ActionController::Request.new({})
|
106
|
+
mock(mock_request).post? {true}
|
107
|
+
|
108
|
+
stub(CASClient::Frameworks::Rails::Filter).unauthorized!{"bogusresponse"}
|
109
|
+
|
110
|
+
CASClient::Frameworks::Rails::Filter.config[:use_gatewaying] = false
|
111
|
+
controller = controller_with_session(topic,mock_request)
|
112
|
+
controller.session[:cas_sent_to_gateway] = true
|
113
|
+
stub(controller).params {{}}
|
114
|
+
CASClient::Frameworks::Rails::Filter.filter(controller)
|
115
|
+
end.equals(false)
|
116
|
+
end
|
117
|
+
|
118
|
+
context "no new service ticket sent through gateway, gatewaying on" do
|
119
|
+
should("return failure from filter") do
|
120
|
+
setup { Hash.new }
|
121
|
+
mock_request = ActionController::Request.new({})
|
122
|
+
mock(mock_request).post? {true}
|
123
|
+
|
124
|
+
CASClient::Frameworks::Rails::Filter.config[:use_gatewaying] = true
|
125
|
+
controller = controller_with_session(topic,mock_request)
|
126
|
+
controller.session[:cas_sent_to_gateway] = true
|
127
|
+
stub(controller).params {{}}
|
128
|
+
CASClient::Frameworks::Rails::Filter.filter(controller)
|
129
|
+
end.equals(true)
|
130
|
+
end
|
131
|
+
|
132
|
+
context "new service ticket with no PGT" do
|
133
|
+
should("return failure from filter") do
|
134
|
+
setup { Hash.new }
|
135
|
+
mock_request = ActionController::Request.new({})
|
136
|
+
mock(mock_request).post? {true}
|
137
|
+
|
138
|
+
raw_text = "<cas:serviceResponse xmlns:cas=\"http://www.yale.edu/tp/cas\">
|
139
|
+
<cas:authenticationSuccess>
|
140
|
+
<cas:user>rich.yarger@vibes.com</cas:user>
|
141
|
+
<cas:proxyGrantingTicket>PGTIOU-1308586001r29DC1F852C95930FE6694C1EFC64232A3359798893BC0B</cas:proxyGrantingTicket>
|
142
|
+
</cas:authenticationSuccess>
|
143
|
+
</cas:serviceResponse>"
|
144
|
+
response = CASClient::ValidationResponse.new(raw_text)
|
145
|
+
|
146
|
+
any_instance_of(CASClient::Client, :request_cas_response => response)
|
147
|
+
any_instance_of(CASClient::Client, :retrieve_proxy_granting_ticket => lambda{raise CASClient::CASException})
|
148
|
+
|
149
|
+
controller = controller_with_session(topic,mock_request)
|
150
|
+
CASClient::Frameworks::Rails::Filter.filter(controller)
|
151
|
+
end.raises(CASClient::CASException)
|
152
|
+
end
|
153
|
+
|
154
|
+
context "new service ticket, but cannot connect to CASServer" do
|
155
|
+
should("return failure from filter") do
|
156
|
+
setup { Hash.new }
|
157
|
+
mock_request = ActionController::Request.new({})
|
158
|
+
mock(mock_request).post? {true}
|
159
|
+
|
160
|
+
any_instance_of(CASClient::Client, :request_cas_response => lambda{raise "Some exception"})
|
161
|
+
|
162
|
+
controller = controller_with_session(topic,mock_request)
|
163
|
+
CASClient::Frameworks::Rails::Filter.filter(controller)
|
164
|
+
end.raises(RuntimeError)
|
165
|
+
end
|
166
|
+
|
167
|
+
context "reuse service ticket successfully" do
|
168
|
+
should("return successfully from filter") do
|
169
|
+
setup { Hash.new }
|
170
|
+
mock_request = ActionController::Request.new({})
|
171
|
+
mock(mock_request).post? {true}
|
172
|
+
|
173
|
+
mock_client = CASClient::Client.new()
|
174
|
+
mock(mock_client).request_cas_response().never
|
175
|
+
mock(mock_client).retrieve_proxy_granting_ticket().never
|
176
|
+
CASClient::Frameworks::Rails::Filter.send(:class_variable_set, :@@client, mock_client)
|
177
|
+
|
178
|
+
topic[:cas_last_valid_ticket] = 'bogusticket'
|
179
|
+
topic[:cas_last_valid_ticket_service] = 'bogusurl'
|
180
|
+
controller = controller_with_session(topic,mock_request)
|
181
|
+
CASClient::Frameworks::Rails::Filter.filter(controller)
|
182
|
+
end.equals(true)
|
31
183
|
end
|
32
184
|
end
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{vibes-rubycas-client}
|
8
|
-
s.version = "2.3.0.
|
8
|
+
s.version = "2.3.0.alpha7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Matt Campbell", "Rahul Joshi", "Matt Zukowski", "Matt Walker"]
|
12
|
-
s.date = %q{2011-06-
|
12
|
+
s.date = %q{2011-06-22}
|
13
13
|
s.description = %q{We've taken the rubycas-client and added some enterprisey features and improved compatibility with JASIG's CAS server}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
@@ -81,6 +81,7 @@ Gem::Specification.new do |s|
|
|
81
81
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
82
82
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
|
83
83
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
84
|
+
s.add_development_dependency(%q<actionpack>, ["~> 2.3.11"])
|
84
85
|
else
|
85
86
|
s.add_dependency(%q<activesupport>, ["~> 2.3.11"])
|
86
87
|
s.add_dependency(%q<riot>, [">= 0"])
|
@@ -88,6 +89,7 @@ Gem::Specification.new do |s|
|
|
88
89
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
89
90
|
s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
|
90
91
|
s.add_dependency(%q<rcov>, [">= 0"])
|
92
|
+
s.add_dependency(%q<actionpack>, ["~> 2.3.11"])
|
91
93
|
end
|
92
94
|
else
|
93
95
|
s.add_dependency(%q<activesupport>, ["~> 2.3.11"])
|
@@ -96,6 +98,7 @@ Gem::Specification.new do |s|
|
|
96
98
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
97
99
|
s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
|
98
100
|
s.add_dependency(%q<rcov>, [">= 0"])
|
101
|
+
s.add_dependency(%q<actionpack>, ["~> 2.3.11"])
|
99
102
|
end
|
100
103
|
end
|
101
104
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vibes-rubycas-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -3702664414
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 3
|
9
9
|
- 0
|
10
10
|
- alpha
|
11
|
-
-
|
12
|
-
version: 2.3.0.
|
11
|
+
- 7
|
12
|
+
version: 2.3.0.alpha7
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Matt Campbell
|
@@ -20,12 +20,12 @@ autorequire:
|
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
22
|
|
23
|
-
date: 2011-06-
|
23
|
+
date: 2011-06-22 00:00:00 -05:00
|
24
24
|
default_executable:
|
25
25
|
dependencies:
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
|
-
|
28
|
-
|
27
|
+
prerelease: false
|
28
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -36,12 +36,12 @@ dependencies:
|
|
36
36
|
- 3
|
37
37
|
- 11
|
38
38
|
version: 2.3.11
|
39
|
+
requirement: *id001
|
39
40
|
name: activesupport
|
40
|
-
|
41
|
-
prerelease: false
|
41
|
+
type: :runtime
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
|
44
|
-
|
43
|
+
prerelease: false
|
44
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
45
45
|
none: false
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
@@ -50,12 +50,12 @@ dependencies:
|
|
50
50
|
segments:
|
51
51
|
- 0
|
52
52
|
version: "0"
|
53
|
+
requirement: *id002
|
53
54
|
name: riot
|
54
|
-
version_requirements: *id002
|
55
|
-
prerelease: false
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
55
|
type: :development
|
58
|
-
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
59
59
|
none: false
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
@@ -64,12 +64,12 @@ dependencies:
|
|
64
64
|
segments:
|
65
65
|
- 0
|
66
66
|
version: "0"
|
67
|
+
requirement: *id003
|
67
68
|
name: rr
|
68
|
-
version_requirements: *id003
|
69
|
-
prerelease: false
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
69
|
type: :development
|
72
|
-
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
@@ -80,12 +80,12 @@ dependencies:
|
|
80
80
|
- 0
|
81
81
|
- 0
|
82
82
|
version: 1.0.0
|
83
|
+
requirement: *id004
|
83
84
|
name: bundler
|
84
|
-
version_requirements: *id004
|
85
|
-
prerelease: false
|
86
|
-
- !ruby/object:Gem::Dependency
|
87
85
|
type: :development
|
88
|
-
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
91
|
- - ~>
|
@@ -96,12 +96,12 @@ dependencies:
|
|
96
96
|
- 6
|
97
97
|
- 2
|
98
98
|
version: 1.6.2
|
99
|
+
requirement: *id005
|
99
100
|
name: jeweler
|
100
|
-
version_requirements: *id005
|
101
|
-
prerelease: false
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
101
|
type: :development
|
104
|
-
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ">="
|
@@ -110,9 +110,25 @@ dependencies:
|
|
110
110
|
segments:
|
111
111
|
- 0
|
112
112
|
version: "0"
|
113
|
+
requirement: *id006
|
113
114
|
name: rcov
|
114
|
-
|
115
|
+
type: :development
|
116
|
+
- !ruby/object:Gem::Dependency
|
115
117
|
prerelease: false
|
118
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ~>
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
hash: 21
|
124
|
+
segments:
|
125
|
+
- 2
|
126
|
+
- 3
|
127
|
+
- 11
|
128
|
+
version: 2.3.11
|
129
|
+
requirement: *id007
|
130
|
+
name: actionpack
|
131
|
+
type: :development
|
116
132
|
description: We've taken the rubycas-client and added some enterprisey features and improved compatibility with JASIG's CAS server
|
117
133
|
email:
|
118
134
|
executables: []
|