casino_core 0.0.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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