casino_core 0.0.6 → 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 (41) hide show
  1. data/VERSION +1 -1
  2. data/casino_core.gemspec +20 -3
  3. data/config/cas.yml +3 -0
  4. data/db/migrate/20121224113737_create_proxy_tickets.rb +15 -0
  5. data/db/migrate/20121225153637_add_pgt_url_to_proxy_granting_tickets.rb +11 -0
  6. data/db/migrate/20121225231301_proxy_granting_ticket_can_be_granted_by_proxy_ticket.rb +6 -0
  7. data/db/migrate/20121225231713_no_default_granter_type.rb +5 -0
  8. data/db/migrate/20121226192211_fix_index_for_granter_on_proxy_granting_ticket.rb +6 -0
  9. data/db/migrate/20121226211511_allow_service_tickets_without_ticket_granting_ticket.rb +5 -0
  10. data/db/schema.rb +22 -8
  11. data/lib/casino_core/builder.rb +7 -0
  12. data/lib/casino_core/builder/ticket_validation_response.rb +76 -0
  13. data/lib/casino_core/helper.rb +1 -0
  14. data/lib/casino_core/helper/proxy_granting_tickets.rb +29 -22
  15. data/lib/casino_core/helper/proxy_tickets.rb +61 -0
  16. data/lib/casino_core/helper/service_tickets.rb +1 -34
  17. data/lib/casino_core/model.rb +1 -0
  18. data/lib/casino_core/model/proxy_granting_ticket.rb +3 -2
  19. data/lib/casino_core/model/proxy_ticket.rb +27 -0
  20. data/lib/casino_core/model/service_ticket.rb +17 -4
  21. data/lib/casino_core/model/service_ticket/single_sign_out_notifier.rb +6 -2
  22. data/lib/casino_core/model/ticket_granting_ticket.rb +21 -0
  23. data/lib/casino_core/processor.rb +2 -0
  24. data/lib/casino_core/processor/legacy_validator.rb +1 -1
  25. data/lib/casino_core/processor/proxy_ticket_provider.rb +44 -0
  26. data/lib/casino_core/processor/proxy_ticket_validator.rb +27 -0
  27. data/lib/casino_core/processor/service_ticket_validator.rb +25 -43
  28. data/lib/casino_core/processor/session_destroyer.rb +3 -0
  29. data/lib/casino_core/settings.rb +1 -1
  30. data/lib/casino_core/tasks/cleanup.rake +12 -2
  31. data/lib/casino_core/tasks/database.rake +3 -2
  32. data/spec/authenticator/base_spec.rb +13 -0
  33. data/spec/model/proxy_ticket_spec.rb +32 -0
  34. data/spec/model/service_ticket_spec.rb +24 -7
  35. data/spec/model/ticket_granting_ticket_spec.rb +35 -0
  36. data/spec/processor/proxy_ticket_provider_spec.rb +75 -0
  37. data/spec/processor/proxy_ticket_validator_spec.rb +66 -0
  38. data/spec/processor/session_destroyer_spec.rb +24 -2
  39. data/spec/processor/ticket_validator_spec.rb +125 -0
  40. metadata +21 -4
  41. data/spec/processor/service_ticket_validator_spec.rb +0 -123
@@ -6,6 +6,13 @@ describe CASinoCore::Model::ServiceTicket do
6
6
  ticket.ticket_granting_ticket_id = 1
7
7
  ticket
8
8
  }
9
+ let(:consumed_ticket) {
10
+ ticket = described_class.new ticket: 'ST-54321', service: 'https://example.com/cas-service'
11
+ ticket.ticket_granting_ticket_id = 1
12
+ ticket.consumed = true
13
+ ticket.save!
14
+ ticket
15
+ }
9
16
 
10
17
  describe '.cleanup_unconsumed' do
11
18
  it 'deletes expired unconsumed service tickets' do
@@ -24,9 +31,8 @@ describe CASinoCore::Model::ServiceTicket do
24
31
  end
25
32
 
26
33
  it 'deletes expired consumed service tickets' do
27
- ticket.consumed = true
28
- ticket.created_at = 10.days.ago
29
- ticket.save!
34
+ consumed_ticket.created_at = 10.days.ago
35
+ consumed_ticket.save!
30
36
  lambda do
31
37
  described_class.cleanup_consumed
32
38
  end.should change(described_class, :count).by(-1)
@@ -34,12 +40,23 @@ describe CASinoCore::Model::ServiceTicket do
34
40
  end
35
41
  end
36
42
 
37
- describe '.destroy' do
43
+ describe '#destroy' do
38
44
  it 'sends out a single sign out notification' do
39
45
  described_class::SingleSignOutNotifier.any_instance.should_receive(:notify).and_return(true)
40
- ticket.consumed = true
41
- ticket.save!
42
- ticket.destroy
46
+ consumed_ticket.destroy
47
+ end
48
+
49
+ context 'when notification fails' do
50
+ before(:each) do
51
+ described_class::SingleSignOutNotifier.any_instance.stub(:notify).and_return(false)
52
+ end
53
+
54
+ it 'does not delete the service ticket' do
55
+ consumed_ticket
56
+ lambda {
57
+ consumed_ticket.destroy
58
+ }.should_not change(CASinoCore::Model::ServiceTicket, :count)
59
+ end
43
60
  end
44
61
  end
45
62
  end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe CASinoCore::Model::TicketGrantingTicket do
4
+ let(:subject) { described_class.create! ticket: 'TGT-3ep9awhy2ty5UhL8wM1xAZ', username: 'example-user' }
5
+ let(:service_ticket) {
6
+ subject.service_tickets.create! ticket: 'ST-12345', service: 'https://example.com/cas-service'
7
+ }
8
+ let(:consumed_service_ticket) {
9
+ service_ticket = subject.service_tickets.create! ticket: 'ST-n9oZvDtYkVFHj5M3s59Ws5', service: 'https://example.com/cas-service'
10
+ service_ticket.consumed = true
11
+ service_ticket.save!
12
+ service_ticket
13
+ }
14
+
15
+ describe '#destroy' do
16
+ context 'when notification for a service ticket fails' do
17
+ before(:each) do
18
+ CASinoCore::Model::ServiceTicket::SingleSignOutNotifier.any_instance.stub(:notify).and_return(false)
19
+ end
20
+
21
+ it 'deletes depending proxy-granting tickets' do
22
+ consumed_service_ticket.proxy_granting_tickets.create! ticket: 'PGT-12345', iou: 'PGTIOU-12345', pgt_url: 'bla'
23
+ lambda {
24
+ subject.destroy
25
+ }.should change(CASinoCore::Model::ProxyGrantingTicket, :count).by(-1)
26
+ end
27
+
28
+ it 'nullifies depending service tickets' do
29
+ lambda {
30
+ subject.destroy
31
+ }.should change { consumed_service_ticket.reload.ticket_granting_ticket_id }.from(subject.id).to(nil)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe CASinoCore::Processor::ProxyTicketProvider do
4
+ describe '#process' do
5
+ let(:listener) { Object.new }
6
+ let(:processor) { described_class.new(listener) }
7
+ let(:params) { { targetService: 'this_does_not_have_to_be_a_url' } }
8
+
9
+ before(:each) do
10
+ listener.stub(:request_failed)
11
+ listener.stub(:request_succeeded)
12
+ end
13
+
14
+ context 'without proxy-granting ticket' do
15
+ it 'calls the #request_failed method on the listener' do
16
+ listener.should_receive(:request_failed)
17
+ processor.process(params)
18
+ end
19
+
20
+ it 'does not create a proxy ticket' do
21
+ lambda do
22
+ processor.process(params)
23
+ end.should_not change(CASinoCore::Model::ProxyTicket, :count)
24
+ end
25
+ end
26
+
27
+ context 'with a not-existing proxy-granting ticket' do
28
+ let(:params_with_deleted_pgt) { params.merge(pgt: 'PGT-123453789') }
29
+
30
+ it 'calls the #request_failed method on the listener' do
31
+ listener.should_receive(:request_failed)
32
+ processor.process(params_with_deleted_pgt)
33
+ end
34
+
35
+ it 'does not create a proxy ticket' do
36
+ lambda do
37
+ processor.process(params_with_deleted_pgt)
38
+ end.should_not change(CASinoCore::Model::ProxyTicket, :count)
39
+ end
40
+ end
41
+
42
+ context 'with a proxy-granting ticket' do
43
+ let(:ticket_granting_ticket) {
44
+ CASinoCore::Model::TicketGrantingTicket.create!({
45
+ ticket: 'TGC-Qu6B5IVQ7RmLc972TruM9u',
46
+ username: 'test'
47
+ })
48
+ }
49
+ let(:service_ticket) { ticket_granting_ticket.service_tickets.create! ticket: 'ST-2nOcXx56dtPTsB069yYf0h', service: 'http://www.example.com/' }
50
+ let(:proxy_granting_ticket) {
51
+ service_ticket.proxy_granting_tickets.create! ticket: 'PGT-OIE42ZadV3B9VcaG2xMjAf', iou: 'PGTIOU-PYg4CCPQHNyyS9s6bJF6Rg', pgt_url: 'https://www.example.com/pgtUrl'
52
+ }
53
+ let(:params_with_valid_pgt) { params.merge(pgt: proxy_granting_ticket.ticket) }
54
+
55
+ it 'calls the #request_succeeded method on the listener' do
56
+ listener.should_receive(:request_succeeded)
57
+ processor.process(params_with_valid_pgt)
58
+ end
59
+
60
+ it 'does not create a proxy ticket' do
61
+ lambda do
62
+ processor.process(params_with_valid_pgt)
63
+ end.should change(proxy_granting_ticket.proxy_tickets, :count).by(1)
64
+ end
65
+
66
+ it 'includes the proxy ticket in the response' do
67
+ listener.should_receive(:request_succeeded) do |response|
68
+ proxy_ticket = CASinoCore::Model::ProxyTicket.last
69
+ response.should =~ /<cas:proxyTicket>#{proxy_ticket.ticket}<\/cas:proxyTicket>/
70
+ end
71
+ processor.process(params_with_valid_pgt)
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe CASinoCore::Processor::ProxyTicketValidator do
4
+ let(:listener) { Object.new }
5
+ let(:processor) { described_class.new(listener) }
6
+
7
+ describe '#process' do
8
+ let(:regex_success) { /\A<cas:serviceResponse.*\n.*authenticationSuccess/ }
9
+
10
+ context 'with an unconsumed proxy ticket' do
11
+ let(:ticket_granting_ticket) {
12
+ CASinoCore::Model::TicketGrantingTicket.create!({
13
+ ticket: 'TGC-Qu6B5IVQ7RmLc972TruM9u',
14
+ username: 'test'
15
+ })
16
+ }
17
+ let(:service_ticket) { ticket_granting_ticket.service_tickets.create! ticket: 'ST-2nOcXx56dtPTsB069yYf0h', service: 'http://www.example.com/' }
18
+ let(:proxy_granting_ticket) {
19
+ service_ticket.proxy_granting_tickets.create! ticket: 'PGT-OIE42ZadV3B9VcaG2xMjAf', iou: 'PGTIOU-PYg4CCPQHNyyS9s6bJF6Rg', pgt_url: 'https://www.example.com/pgtUrl'
20
+ }
21
+ let(:proxy_service) { 'imaps://127.0.0.1:4578/' }
22
+ let(:proxy_ticket) { proxy_granting_ticket.proxy_tickets.create! ticket: 'PT-8nA7vuxuNY7RcpVoaDvuZi', service: proxy_service }
23
+ let(:parameters) { { ticket: proxy_ticket.ticket, service: proxy_service } }
24
+ let(:regex_proxy) { /<cas:proxies>\s*<cas:proxy>https:\/\/www.example.com\/pgtUrl<\/cas:proxy>\s*<\/cas:proxies[>]/ }
25
+
26
+ it 'calls the #validation_succeeded method on the listener' do
27
+ listener.should_receive(:validation_succeeded).with(regex_success)
28
+ processor.process(parameters)
29
+ end
30
+
31
+ it 'includes the proxy in the response' do
32
+ listener.should_receive(:validation_succeeded).with(regex_proxy)
33
+ processor.process(parameters)
34
+ end
35
+
36
+ context 'with an expired proxy ticket' do
37
+ before(:each) do
38
+ CASinoCore::Model::ProxyTicket.any_instance.stub(:expired?).and_return(true)
39
+ end
40
+
41
+ it 'calls the #validation_failed method on the listener' do
42
+ listener.should_receive(:validation_failed)
43
+ processor.process(parameters)
44
+ end
45
+ end
46
+
47
+ context 'with an other service' do
48
+ let(:parameters_with_other_service) { parameters.merge(service: 'this_is_another_service') }
49
+
50
+ it 'calls the #validation_failed method on the listener' do
51
+ listener.should_receive(:validation_failed)
52
+ processor.process(parameters_with_other_service)
53
+ end
54
+ end
55
+
56
+ context 'without an existing ticket' do
57
+ let(:parameters_without_existing_ticket) { { ticket: 'PT-1234', service: 'https://www.example.com/' } }
58
+
59
+ it 'calls the #validation_failed method on the listener' do
60
+ listener.should_receive(:validation_failed)
61
+ processor.process(parameters_without_existing_ticket)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -29,6 +29,15 @@ describe CASinoCore::Processor::SessionDestroyer do
29
29
  user_agent: user_agent
30
30
  })
31
31
  }
32
+ let(:service_ticket) {
33
+ ticket_granting_ticket.service_tickets.create! ticket: 'ST-6NBRr5DAg2NW181H5chaHh', service: 'http://www.example.com'
34
+ }
35
+ let(:consumed_service_ticket) {
36
+ st = ticket_granting_ticket.service_tickets.create! ticket: 'ST-6NBRr5DAg2NW181H5chaHh', service: 'http://www.example.com'
37
+ st.consumed = true
38
+ st.save!
39
+ st
40
+ }
32
41
  let(:params) { { id: ticket_granting_ticket.id } }
33
42
 
34
43
  it 'deletes only one ticket-granting ticket' do
@@ -48,15 +57,28 @@ describe CASinoCore::Processor::SessionDestroyer do
48
57
  listener.should_receive(:ticket_deleted).with(no_args)
49
58
  processor.process(params, cookies, user_agent)
50
59
  end
60
+
61
+ it 'deletes the dependent service ticket' do
62
+ service_ticket.ticket # creates the service ticket
63
+ lambda {
64
+ processor.process(params, cookies, user_agent)
65
+ }.should change(CASinoCore::Model::ServiceTicket, :count).by(-1)
66
+ end
67
+
68
+ it 'nullifies the dependent service ticket if destroying fails' do
69
+ lambda {
70
+ processor.process(params, cookies, user_agent)
71
+ }.should change { consumed_service_ticket.reload.ticket_granting_ticket_id }.to(nil)
72
+ end
51
73
  end
52
74
 
53
- context 'with an invlaid ticket-granting ticket' do
75
+ context 'with an invalid ticket-granting ticket' do
54
76
  let(:params) { { id: 99999 } }
55
77
  it 'does not delete a ticket-granting ticket' do
56
78
  owner_ticket_granting_ticket
57
79
  lambda do
58
80
  processor.process(params, cookies, user_agent)
59
- end.should change(CASinoCore::Model::TicketGrantingTicket, :count).by(0)
81
+ end.should_not change(CASinoCore::Model::TicketGrantingTicket, :count)
60
82
  end
61
83
 
62
84
  it 'calls the #ticket_not_found method on the listener' do
@@ -0,0 +1,125 @@
1
+ require 'spec_helper'
2
+
3
+ [CASinoCore::Processor::ServiceTicketValidator, CASinoCore::Processor::ProxyTicketValidator].each do |class_under_test|
4
+ describe class_under_test do
5
+ describe '#process' do
6
+ let(:listener) { Object.new }
7
+ let(:processor) { described_class.new(listener) }
8
+ let(:user_agent) { 'TestBrowser 1.0' }
9
+ let(:ticket_granting_ticket) {
10
+ CASinoCore::Model::TicketGrantingTicket.create!({
11
+ ticket: 'TGC-HXdkW233TsRtiqYGq4b8U7',
12
+ username: 'test',
13
+ extra_attributes: { name: "Example User", roles: ['User', 'Admin'] },
14
+ user_agent: user_agent
15
+ })
16
+ }
17
+ let(:service) { 'https://www.example.com/cas-service' }
18
+ let(:service_ticket) { ticket_granting_ticket.service_tickets.create! ticket: 'ST-2nOcXx56dtPTsB069yYf0h', service: service }
19
+ let(:parameters) { { service: service, ticket: service_ticket.ticket }}
20
+
21
+ let(:regex_failure) { /\A\<cas\:serviceResponse.*\n.*authenticationFailure/ }
22
+ let(:regex_success) { /\A\<cas\:serviceResponse.*\n.*authenticationSuccess/ }
23
+
24
+ before(:each) do
25
+ listener.stub(:validation_failed)
26
+ listener.stub(:validation_succeeded)
27
+ end
28
+
29
+ context 'with an unconsumed service ticket' do
30
+ context 'without renew flag' do
31
+ it 'consumes the service ticket' do
32
+ processor.process(parameters)
33
+ service_ticket.reload
34
+ service_ticket.consumed.should == true
35
+ end
36
+
37
+ it 'calls the #validation_succeeded method on the listener' do
38
+ listener.should_receive(:validation_succeeded).with(regex_success)
39
+ processor.process(parameters)
40
+ end
41
+ end
42
+
43
+ context 'with renew flag' do
44
+ let(:parameters_with_renew) { parameters.merge renew: 'true' }
45
+
46
+ context 'with a service ticket without issued_from_credentials flag' do
47
+ it 'consumes the service ticket' do
48
+ processor.process(parameters_with_renew)
49
+ service_ticket.reload
50
+ service_ticket.consumed.should == true
51
+ end
52
+
53
+ it 'calls the #validation_failed method on the listener' do
54
+ listener.should_receive(:validation_failed).with(regex_failure)
55
+ processor.process(parameters_with_renew)
56
+ end
57
+ end
58
+
59
+ context 'with a service ticket with issued_from_credentials flag' do
60
+ before(:each) do
61
+ service_ticket.issued_from_credentials = true
62
+ service_ticket.save!
63
+ end
64
+
65
+ it 'consumes the service ticket' do
66
+ processor.process(parameters_with_renew)
67
+ service_ticket.reload
68
+ service_ticket.consumed.should == true
69
+ end
70
+
71
+ it 'calls the #validation_succeeded method on the listener' do
72
+ listener.should_receive(:validation_succeeded).with(regex_success)
73
+ processor.process(parameters_with_renew)
74
+ end
75
+ end
76
+ end
77
+
78
+ context 'with proxy-granting ticket callback server' do
79
+ let(:parameters_with_pgt_url) { parameters.merge pgtUrl: "https://www.example.org" }
80
+
81
+ before(:each) do
82
+ stub_request(:get, /https:\/\/www\.example\.org\/\?pgtId=[^&]+&pgtIou=[^&]+/)
83
+ end
84
+
85
+ it 'calls the #validation_succeeded method on the listener' do
86
+ listener.should_receive(:validation_succeeded).with(regex_success)
87
+ processor.process(parameters_with_pgt_url)
88
+ end
89
+
90
+ it 'includes the PGTIOU in the response' do
91
+ listener.should_receive(:validation_succeeded).with(/\<cas\:proxyGrantingTicket\>\n?\s*PGTIOU-.+/)
92
+ processor.process(parameters_with_pgt_url)
93
+ end
94
+
95
+ it 'creates a proxy-granting ticket' do
96
+ lambda do
97
+ processor.process(parameters_with_pgt_url)
98
+ end.should change(service_ticket.proxy_granting_tickets, :count).by(1)
99
+ end
100
+
101
+ it 'contacts the callback server' do
102
+ processor.process(parameters_with_pgt_url)
103
+ proxy_granting_ticket = CASinoCore::Model::ProxyGrantingTicket.last
104
+ WebMock.should have_requested(:get, 'https://www.example.org').with(query: {
105
+ pgtId: proxy_granting_ticket.ticket,
106
+ pgtIou: proxy_granting_ticket.iou
107
+ })
108
+ end
109
+ end
110
+ end
111
+
112
+ context 'with a consumed service ticket' do
113
+ before(:each) do
114
+ service_ticket.consumed = true
115
+ service_ticket.save!
116
+ end
117
+
118
+ it 'calls the #validation_failed method on the listener' do
119
+ listener.should_receive(:validation_failed).with(regex_failure)
120
+ processor.process(parameters)
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: casino_core
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.6
5
+ version: 1.0.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Nils Caspar
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-12-24 00:00:00 Z
13
+ date: 2012-12-26 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -179,21 +179,31 @@ files:
179
179
  - db/migrate/20121125185415_create_proxy_granting_tickets.rb
180
180
  - db/migrate/20121125190013_tickets_should_be_unique.rb
181
181
  - db/migrate/20121223135227_proxy_granting_tickets_belongs_to_service_ticket.rb
182
+ - db/migrate/20121224113737_create_proxy_tickets.rb
183
+ - db/migrate/20121225153637_add_pgt_url_to_proxy_granting_tickets.rb
184
+ - db/migrate/20121225231301_proxy_granting_ticket_can_be_granted_by_proxy_ticket.rb
185
+ - db/migrate/20121225231713_no_default_granter_type.rb
186
+ - db/migrate/20121226192211_fix_index_for_granter_on_proxy_granting_ticket.rb
187
+ - db/migrate/20121226211511_allow_service_tickets_without_ticket_granting_ticket.rb
182
188
  - db/schema.rb
183
189
  - lib/casino_core.rb
184
190
  - lib/casino_core/authenticator.rb
185
191
  - lib/casino_core/authenticator/static.rb
192
+ - lib/casino_core/builder.rb
193
+ - lib/casino_core/builder/ticket_validation_response.rb
186
194
  - lib/casino_core/helper.rb
187
195
  - lib/casino_core/helper/browser.rb
188
196
  - lib/casino_core/helper/logger.rb
189
197
  - lib/casino_core/helper/login_tickets.rb
190
198
  - lib/casino_core/helper/proxy_granting_tickets.rb
199
+ - lib/casino_core/helper/proxy_tickets.rb
191
200
  - lib/casino_core/helper/service_tickets.rb
192
201
  - lib/casino_core/helper/ticket_granting_tickets.rb
193
202
  - lib/casino_core/helper/tickets.rb
194
203
  - lib/casino_core/model.rb
195
204
  - lib/casino_core/model/login_ticket.rb
196
205
  - lib/casino_core/model/proxy_granting_ticket.rb
206
+ - lib/casino_core/model/proxy_ticket.rb
197
207
  - lib/casino_core/model/service_ticket.rb
198
208
  - lib/casino_core/model/service_ticket/single_sign_out_notifier.rb
199
209
  - lib/casino_core/model/ticket_granting_ticket.rb
@@ -202,6 +212,8 @@ files:
202
212
  - lib/casino_core/processor/login_credential_acceptor.rb
203
213
  - lib/casino_core/processor/login_credential_requestor.rb
204
214
  - lib/casino_core/processor/logout.rb
215
+ - lib/casino_core/processor/proxy_ticket_provider.rb
216
+ - lib/casino_core/processor/proxy_ticket_validator.rb
205
217
  - lib/casino_core/processor/service_ticket_validator.rb
206
218
  - lib/casino_core/processor/session_destroyer.rb
207
219
  - lib/casino_core/processor/session_overview.rb
@@ -210,16 +222,21 @@ files:
210
222
  - lib/casino_core/settings.rb
211
223
  - lib/casino_core/tasks/cleanup.rake
212
224
  - lib/casino_core/tasks/database.rake
225
+ - spec/authenticator/base_spec.rb
213
226
  - spec/authenticator/static_spec.rb
214
227
  - spec/model/login_ticket_spec.rb
228
+ - spec/model/proxy_ticket_spec.rb
215
229
  - spec/model/service_ticket_spec.rb
230
+ - spec/model/ticket_granting_ticket_spec.rb
216
231
  - spec/processor/legacy_validator_spec.rb
217
232
  - spec/processor/login_credential_acceptor_spec.rb
218
233
  - spec/processor/login_credential_requestor_spec.rb
219
234
  - spec/processor/logout_spec.rb
220
- - spec/processor/service_ticket_validator_spec.rb
235
+ - spec/processor/proxy_ticket_provider_spec.rb
236
+ - spec/processor/proxy_ticket_validator_spec.rb
221
237
  - spec/processor/session_destroyer_spec.rb
222
238
  - spec/processor/session_overview_spec.rb
239
+ - spec/processor/ticket_validator_spec.rb
223
240
  - spec/spec_helper.rb
224
241
  homepage: http://github.com/pencil/CASinoCore
225
242
  licenses:
@@ -234,7 +251,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
234
251
  requirements:
235
252
  - - ">="
236
253
  - !ruby/object:Gem::Version
237
- hash: 209769528785287815
254
+ hash: 218008976937004289
238
255
  segments:
239
256
  - 0
240
257
  version: "0"