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
@@ -1,123 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASinoCore::Processor::ServiceTicketValidator do
4
- describe '#process' do
5
- let(:listener) { Object.new }
6
- let(:processor) { described_class.new(listener) }
7
- let(:user_agent) { 'TestBrowser 1.0' }
8
- let(:ticket_granting_ticket) {
9
- CASinoCore::Model::TicketGrantingTicket.create!({
10
- ticket: 'TGC-HXdkW233TsRtiqYGq4b8U7',
11
- username: 'test',
12
- extra_attributes: nil,
13
- user_agent: user_agent
14
- })
15
- }
16
- let(:service) { 'https://example.com/cas-service' }
17
- let(:service_ticket) { ticket_granting_ticket.service_tickets.create! ticket: 'ST-2nOcXx56dtPTsB069yYf0h', service: service }
18
- let(:parameters) { { service: service, ticket: service_ticket.ticket }}
19
-
20
- let(:regex_failure) { /\A\<cas\:serviceResponse.*\n.*authenticationFailure/ }
21
- let(:regex_success) { /\A\<cas\:serviceResponse.*\n.*authenticationSuccess/ }
22
-
23
- before(:each) do
24
- listener.stub(:validation_failed)
25
- listener.stub(:validation_succeeded)
26
- end
27
-
28
- context 'with an unconsumed service ticket' do
29
- context 'without renew flag' do
30
- it 'consumes the service ticket' do
31
- processor.process(parameters)
32
- service_ticket.reload
33
- service_ticket.consumed.should == true
34
- end
35
-
36
- it 'calls the #validation_succeeded method on the listener' do
37
- listener.should_receive(:validation_succeeded).with(regex_success)
38
- processor.process(parameters)
39
- end
40
- end
41
-
42
- context 'with renew flag' do
43
- let(:parameters_with_renew) { parameters.merge renew: 'true' }
44
-
45
- context 'with a service ticket without issued_from_credentials flag' do
46
- it 'consumes the service ticket' do
47
- processor.process(parameters_with_renew)
48
- service_ticket.reload
49
- service_ticket.consumed.should == true
50
- end
51
-
52
- it 'calls the #validation_failed method on the listener' do
53
- listener.should_receive(:validation_failed).with(regex_failure)
54
- processor.process(parameters_with_renew)
55
- end
56
- end
57
-
58
- context 'with a service ticket with issued_from_credentials flag' do
59
- before(:each) do
60
- service_ticket.issued_from_credentials = true
61
- service_ticket.save!
62
- end
63
-
64
- it 'consumes the service ticket' do
65
- processor.process(parameters_with_renew)
66
- service_ticket.reload
67
- service_ticket.consumed.should == true
68
- end
69
-
70
- it 'calls the #validation_succeeded method on the listener' do
71
- listener.should_receive(:validation_succeeded).with(regex_success)
72
- processor.process(parameters_with_renew)
73
- end
74
- end
75
- end
76
-
77
- context 'with proxy-granting ticket callback server' do
78
- let(:parameters_with_pgt_url) { parameters.merge pgtUrl: 'https://www.example.com/' }
79
-
80
- before(:each) do
81
- stub_request(:get, /https:\/\/www\.example\.com\/\?pgtId=[^&]+&pgtIou=[^&]+/)
82
- end
83
-
84
- it 'calls the #validation_succeeded method on the listener' do
85
- listener.should_receive(:validation_succeeded).with(regex_success)
86
- processor.process(parameters_with_pgt_url)
87
- end
88
-
89
- it 'includes the PGTIOU in the response' do
90
- listener.should_receive(:validation_succeeded).with(/\<cas\:proxyGrantingTicket\>\n?\s*PGTIOU-.+/)
91
- processor.process(parameters_with_pgt_url)
92
- end
93
-
94
- it 'creates a proxy-granting ticket' do
95
- lambda do
96
- processor.process(parameters_with_pgt_url)
97
- end.should change(service_ticket.proxy_granting_tickets, :count).by(1)
98
- end
99
-
100
- it 'contacts the callback server' do
101
- processor.process(parameters_with_pgt_url)
102
- proxy_granting_ticket = CASinoCore::Model::ProxyGrantingTicket.last
103
- WebMock.should have_requested(:get, 'https://www.example.com').with(query: {
104
- pgtId: proxy_granting_ticket.ticket,
105
- pgtIou: proxy_granting_ticket.iou
106
- })
107
- end
108
- end
109
- end
110
-
111
- context 'with a consumed service ticket' do
112
- before(:each) do
113
- service_ticket.consumed = true
114
- service_ticket.save!
115
- end
116
-
117
- it 'calls the #validation_failed method on the listener' do
118
- listener.should_receive(:validation_failed).with(regex_failure)
119
- processor.process(parameters)
120
- end
121
- end
122
- end
123
- end