casino 3.0.4 → 4.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +12 -3
  3. data/app/api/casino/api.rb +7 -0
  4. data/app/api/casino/api/entity/auth_token_ticket.rb +5 -0
  5. data/app/api/casino/api/resource/auth_token_tickets.rb +12 -0
  6. data/app/assets/javascripts/casino/{application.js → application.js.erb} +1 -1
  7. data/app/authenticators/casino/static_authenticator.rb +8 -2
  8. data/app/builders/casino/proxy_response_builder.rb +24 -0
  9. data/app/builders/casino/ticket_validation_response_builder.rb +9 -5
  10. data/app/controllers/casino/application_controller.rb +0 -22
  11. data/app/controllers/casino/auth_tokens_controller.rb +34 -0
  12. data/app/controllers/casino/controller_concern/ticket_validator.rb +30 -0
  13. data/app/controllers/casino/proxy_tickets_controller.rb +42 -2
  14. data/app/controllers/casino/service_tickets_controller.rb +15 -2
  15. data/app/controllers/casino/sessions_controller.rb +59 -8
  16. data/app/controllers/casino/two_factor_authenticators_controller.rb +28 -3
  17. data/app/helpers/casino/sessions_helper.rb +75 -0
  18. data/app/helpers/casino/two_factor_authenticators_helper.rb +12 -0
  19. data/app/models/casino/auth_token_ticket.rb +15 -0
  20. data/app/models/casino/login_ticket.rb +7 -4
  21. data/app/models/casino/model_concern/consumable_ticket.rb +20 -0
  22. data/app/models/casino/model_concern/ticket.rb +28 -0
  23. data/app/models/casino/proxy_granting_ticket.rb +12 -0
  24. data/app/models/casino/proxy_ticket.rb +4 -0
  25. data/app/models/casino/service_ticket.rb +5 -4
  26. data/app/models/casino/ticket_granting_ticket.rb +5 -1
  27. data/app/models/casino/two_factor_authenticator.rb +2 -0
  28. data/app/processors/casino/authentication_processor.rb +73 -0
  29. data/app/processors/casino/browser_processor.rb +12 -0
  30. data/app/processors/casino/proxy_granting_ticket_processor.rb +37 -0
  31. data/app/processors/casino/service_ticket_processor.rb +81 -0
  32. data/app/processors/casino/ticket_granting_ticket_processor.rb +56 -0
  33. data/app/processors/casino/two_factor_authenticator_processor.rb +18 -0
  34. data/app/services/casino/auth_token_validation_service.rb +66 -0
  35. data/app/views/casino/sessions/index.html.erb +2 -2
  36. data/app/views/casino/sessions/new.html.erb +1 -1
  37. data/app/views/casino/sessions/validate_otp.html.erb +1 -1
  38. data/app/views/casino/two_factor_authenticators/new.html.erb +6 -3
  39. data/app/views/layouts/application.html.erb +0 -1
  40. data/casino.gemspec +4 -2
  41. data/config/locales/en.yml +35 -0
  42. data/config/locales/zh-CN.yml +88 -0
  43. data/config/locales/zh-TW.yml +88 -0
  44. data/config/routes.rb +3 -10
  45. data/db/migrate/20140831205255_create_auth_token_tickets.rb +10 -0
  46. data/lib/casino.rb +4 -1
  47. data/lib/casino/tasks/cleanup.rake +13 -1
  48. data/lib/casino/version.rb +1 -1
  49. data/spec/controllers/auth_tokens_controller_spec.rb +75 -0
  50. data/spec/controllers/proxy_tickets_controller_spec.rb +120 -14
  51. data/spec/controllers/service_and_proxy_tickets_controller_spec.rb +224 -0
  52. data/spec/controllers/service_tickets_controller_spec.rb +62 -16
  53. data/spec/controllers/sessions_controller_spec.rb +622 -36
  54. data/spec/controllers/two_factor_authenticators_controller_spec.rb +217 -18
  55. data/spec/dummy/config/cas.yml +3 -0
  56. data/spec/dummy/config/environments/development.rb +0 -4
  57. data/spec/dummy/db/migrate/{20130910094259_create_base_models.casino.rb → 20140831214845_create_core_schema.casino.rb} +55 -32
  58. data/spec/dummy/db/migrate/20140831214846_rename_base_models.casino.rb +102 -0
  59. data/spec/dummy/db/migrate/20140831214847_cleanup_indexes.casino.rb +28 -0
  60. data/spec/dummy/db/migrate/20140831214848_fix_long_index_names.casino.rb +13 -0
  61. data/spec/dummy/db/migrate/20140831214849_change_service_to_text.casino.rb +7 -0
  62. data/spec/dummy/db/migrate/20140831214850_change_user_agent_to_text.casino.rb +6 -0
  63. data/spec/dummy/db/migrate/20140831214851_fix_length_of_text_fields.casino.rb +8 -0
  64. data/spec/dummy/db/migrate/20140831214852_create_auth_token_tickets.casino.rb +11 -0
  65. data/spec/dummy/db/schema.rb +79 -70
  66. data/spec/features/login_spec.rb +0 -9
  67. data/spec/model/auth_token_ticket_spec.rb +23 -0
  68. data/spec/services/auth_token_validation_service_spec.rb +83 -0
  69. data/spec/support/sign_in.rb +4 -0
  70. metadata +139 -210
  71. data/app/controllers/casino/api/v1/tickets_controller.rb +0 -55
  72. data/app/helpers/service_tickets_helper.rb +0 -2
  73. data/app/listeners/casino/legacy_validator_listener.rb +0 -11
  74. data/app/listeners/casino/listener.rb +0 -16
  75. data/app/listeners/casino/login_credential_acceptor_listener.rb +0 -38
  76. data/app/listeners/casino/login_credential_requestor_listener.rb +0 -21
  77. data/app/listeners/casino/logout_listener.rb +0 -12
  78. data/app/listeners/casino/other_sessions_destroyer_listener.rb +0 -7
  79. data/app/listeners/casino/proxy_ticket_provider_listener.rb +0 -11
  80. data/app/listeners/casino/second_factor_authentication_acceptor_listener.rb +0 -26
  81. data/app/listeners/casino/session_destroyer_listener.rb +0 -11
  82. data/app/listeners/casino/session_overview_listener.rb +0 -11
  83. data/app/listeners/casino/ticket_validator_listener.rb +0 -11
  84. data/app/listeners/casino/two_factor_authenticator_activator_listener.rb +0 -23
  85. data/app/listeners/casino/two_factor_authenticator_destroyer_listener.rb +0 -16
  86. data/app/listeners/casino/two_factor_authenticator_overview_listener.rb +0 -11
  87. data/app/listeners/casino/two_factor_authenticator_registrator_listener.rb +0 -11
  88. data/app/processors/casino/api/login_credential_acceptor_processor.rb +0 -46
  89. data/app/processors/casino/api/logout_processor.rb +0 -17
  90. data/app/processors/casino/api/service_ticket_provider_processor.rb +0 -69
  91. data/app/processors/casino/legacy_validator_processor.rb +0 -19
  92. data/app/processors/casino/login_credential_acceptor_processor.rb +0 -63
  93. data/app/processors/casino/login_credential_requestor_processor.rb +0 -70
  94. data/app/processors/casino/logout_processor.rb +0 -23
  95. data/app/processors/casino/other_sessions_destroyer_processor.rb +0 -26
  96. data/app/processors/casino/processor.rb +0 -5
  97. data/app/processors/casino/processor_concern/authentication.rb +0 -87
  98. data/app/processors/casino/processor_concern/browser.rb +0 -14
  99. data/app/processors/casino/processor_concern/login_tickets.rb +0 -28
  100. data/app/processors/casino/processor_concern/proxy_granting_tickets.rb +0 -43
  101. data/app/processors/casino/processor_concern/proxy_tickets.rb +0 -56
  102. data/app/processors/casino/processor_concern/service_tickets.rb +0 -50
  103. data/app/processors/casino/processor_concern/ticket_granting_tickets.rb +0 -65
  104. data/app/processors/casino/processor_concern/tickets.rb +0 -17
  105. data/app/processors/casino/processor_concern/two_factor_authenticators.rb +0 -23
  106. data/app/processors/casino/proxy_ticket_provider_processor.rb +0 -41
  107. data/app/processors/casino/proxy_ticket_validator_processor.rb +0 -22
  108. data/app/processors/casino/second_factor_authentication_acceptor_processor.rb +0 -45
  109. data/app/processors/casino/service_ticket_validator_processor.rb +0 -46
  110. data/app/processors/casino/session_destroyer_processor.rb +0 -25
  111. data/app/processors/casino/session_overview_processor.rb +0 -21
  112. data/app/processors/casino/two_factor_authenticator_activator_processor.rb +0 -41
  113. data/app/processors/casino/two_factor_authenticator_destroyer_processor.rb +0 -33
  114. data/app/processors/casino/two_factor_authenticator_overview_processor.rb +0 -20
  115. data/app/processors/casino/two_factor_authenticator_registrator_processor.rb +0 -24
  116. data/spec/controllers/api/v1/tickets_controller_spec.rb +0 -114
  117. data/spec/controllers/listener/legacy_validator_spec.rb +0 -22
  118. data/spec/controllers/listener/login_credential_acceptor_spec.rb +0 -108
  119. data/spec/controllers/listener/login_credential_requestor_spec.rb +0 -57
  120. data/spec/controllers/listener/logout_spec.rb +0 -38
  121. data/spec/controllers/listener/other_sessions_destroyer_spec.rb +0 -19
  122. data/spec/controllers/listener/proxy_ticket_provider_spec.rb +0 -22
  123. data/spec/controllers/listener/second_factor_authentication_acceptor_spec.rb +0 -74
  124. data/spec/controllers/listener/session_destroyer_spec.rb +0 -25
  125. data/spec/controllers/listener/session_overview_spec.rb +0 -26
  126. data/spec/controllers/listener/ticket_validator_spec.rb +0 -22
  127. data/spec/controllers/listener/two_factor_authenticator_activator_spec.rb +0 -64
  128. data/spec/controllers/listener/two_factor_authenticator_destroyer_spec.rb +0 -40
  129. data/spec/controllers/listener/two_factor_authenticator_overview_spec.rb +0 -16
  130. data/spec/controllers/listener/two_factor_authenticator_registrator_spec.rb +0 -27
  131. data/spec/processor/api/login_credential_acceptor_spec.rb +0 -52
  132. data/spec/processor/api/logout_spec.rb +0 -34
  133. data/spec/processor/api/service_ticket_provider_spec.rb +0 -61
  134. data/spec/processor/legacy_validator_spec.rb +0 -78
  135. data/spec/processor/login_credential_acceptor_spec.rb +0 -164
  136. data/spec/processor/login_credential_requestor_spec.rb +0 -145
  137. data/spec/processor/logout_other_sessions_spec.rb +0 -53
  138. data/spec/processor/logout_spec.rb +0 -72
  139. data/spec/processor/processor_concern/service_tickets_spec.rb +0 -49
  140. data/spec/processor/proxy_ticket_provider_spec.rb +0 -66
  141. data/spec/processor/proxy_ticket_validator_spec.rb +0 -65
  142. data/spec/processor/second_factor_authenticaton_acceptor_spec.rb +0 -94
  143. data/spec/processor/session_destroyer_spec.rb +0 -75
  144. data/spec/processor/session_overview_spec.rb +0 -49
  145. data/spec/processor/ticket_validator_spec.rb +0 -214
  146. data/spec/processor/two_factor_authenticator_activator_spec.rb +0 -122
  147. data/spec/processor/two_factor_authenticator_destroyer_spec.rb +0 -71
  148. data/spec/processor/two_factor_authenticator_overview_spec.rb +0 -56
  149. data/spec/processor/two_factor_authenticator_registrator_spec.rb +0 -48
@@ -1,24 +0,0 @@
1
- require 'rotp'
2
-
3
- # The TwoFactorAuthenticatorRegistrator processor can be used as the first step to register a new two-factor authenticator.
4
- # It is inactive until activated using TwoFactorAuthenticatorActivator.
5
- #
6
- # This feature is not described in the CAS specification so it's completly optional
7
- # to implement this on the web application side.
8
- class CASino::TwoFactorAuthenticatorRegistratorProcessor < CASino::Processor
9
- include CASino::ProcessorConcern::TicketGrantingTickets
10
-
11
- # This method will call `#user_not_logged_in` or `#two_factor_authenticator_registered(two_factor_authenticator)` on the listener.
12
- # @param [Hash] cookies cookies delivered by the client
13
- # @param [String] user_agent user-agent delivered by the client
14
- def process(cookies = nil, user_agent = nil)
15
- cookies ||= {}
16
- tgt = find_valid_ticket_granting_ticket(cookies[:tgt], user_agent)
17
- if tgt.nil?
18
- @listener.user_not_logged_in
19
- else
20
- two_factor_authenticator = tgt.user.two_factor_authenticators.create! secret: ROTP::Base32.random_base32
21
- @listener.two_factor_authenticator_registered(two_factor_authenticator)
22
- end
23
- end
24
- end
@@ -1,114 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASino::Api::V1::TicketsController do
4
-
5
- describe "POST /cas/v1/tickets" do
6
- context "with correct credentials" do
7
-
8
- before do
9
- CASino::API::LoginCredentialAcceptorProcessor.any_instance.should_receive(:process) do
10
- @controller.user_logged_in_via_api "TGT-long-string"
11
- end
12
-
13
- post :create, username: 'valid', password: 'valid', use_route: :casino
14
- end
15
-
16
- subject { response }
17
- its(:response_code) { should eq 201 }
18
- its(:location) { should eq 'http://test.host/cas/v1/tickets/TGT-long-string' }
19
- end
20
-
21
- context "with incorrect credentials" do
22
-
23
- before do
24
- CASino::API::LoginCredentialAcceptorProcessor.any_instance.should_receive(:process) do
25
- @controller.invalid_login_credentials_via_api
26
- end
27
-
28
- post :create, username: 'invalid', password: 'invalid', use_route: :casino
29
- end
30
-
31
- subject { response }
32
- its(:response_code) { should eq 400 }
33
- end
34
-
35
- context "with a not allowed service" do
36
-
37
- before do
38
- CASino::API::LoginCredentialAcceptorProcessor.any_instance.should_receive(:process) do
39
- @controller.service_not_allowed_via_api
40
- end
41
-
42
- post :create, username: 'example', password: 'example', use_route: :casino
43
- end
44
-
45
- subject { response }
46
- its(:response_code) { should eq 400 }
47
- end
48
- end
49
-
50
- describe "POST /cas/v1/tickets/{TGT id}" do
51
-
52
- context "with a valid TGT" do
53
-
54
- before do
55
- CASino::API::ServiceTicketProviderProcessor.any_instance.should_receive(:process).with('TGT-valid', kind_of(Hash), request.user_agent) do |ticket, params|
56
- params.should == controller.params
57
- @controller.granted_service_ticket_via_api 'ST-1-VALIDSERVICETICKET'
58
- end
59
- post :update, id: 'TGT-valid', service: 'http://example.org/', use_route: :casino
60
- end
61
-
62
- subject { response }
63
-
64
- its(:response_code) { should eq 200 }
65
- its(:body) { should eq 'ST-1-VALIDSERVICETICKET' }
66
- end
67
-
68
- context "with an invalid TGT" do
69
-
70
- before do
71
- CASino::API::ServiceTicketProviderProcessor.any_instance.should_receive(:process).with('TGT-invalid', kind_of(Hash), request.user_agent) do |ticket, params|
72
- params.should == controller.params
73
- @controller.invalid_ticket_granting_ticket_via_api
74
- end
75
- post :update, id: 'TGT-invalid', service: 'http://example.org/', use_route: :casino
76
- end
77
-
78
- subject { response }
79
-
80
- its(:response_code) { should eq 400 }
81
-
82
- end
83
-
84
- context "without a service" do
85
-
86
- before do
87
- CASino::API::ServiceTicketProviderProcessor.any_instance.should_receive(:process).with('TGT-valid', kind_of(Hash), request.user_agent) do |ticket, params|
88
- params.should == controller.params
89
- @controller.no_service_provided_via_api
90
- end
91
- post :update, id:'TGT-valid', use_route: :casino
92
- end
93
-
94
- subject { response }
95
-
96
- its(:response_code) { should eq 400 }
97
-
98
- end
99
- end
100
-
101
- describe "DELETE /cas/v1/tickets/TGT-fdsjfsdfjkalfewrihfdhfaie" do
102
- before do
103
- CASino::API::LogoutProcessor.any_instance.should_receive(:process).with('TGT-fdsjfsdfjkalfewrihfdhfaie', request.user_agent) do
104
- @controller.user_logged_out_via_api
105
- end
106
- post :destroy, id: 'TGT-fdsjfsdfjkalfewrihfdhfaie', use_route: :casino
107
- end
108
-
109
- subject { response }
110
-
111
- its(:response_code) { should eq 200 }
112
- end
113
-
114
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASino::LegacyValidatorListener do
4
- let(:controller) { Object.new }
5
- let(:listener) { described_class.new(controller) }
6
- let(:response_text) { "foobar\nbla\n" }
7
- let(:render_parameters) { { text: response_text, content_type: 'text/plain' } }
8
-
9
- describe '#validation_succeeded' do
10
- it 'tells the controller to render the response text' do
11
- controller.should_receive(:render).with(render_parameters)
12
- listener.validation_succeeded(response_text)
13
- end
14
- end
15
-
16
- describe '#validation_failed' do
17
- it 'tells the controller to render the response text' do
18
- controller.should_receive(:render).with(render_parameters)
19
- listener.validation_failed(response_text)
20
- end
21
- end
22
- end
@@ -1,108 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASino::LoginCredentialAcceptorListener do
4
- include CASino::Engine.routes.url_helpers
5
- let(:controller) { Struct.new(:cookies).new(cookies: {}) }
6
- let(:listener) { described_class.new(controller) }
7
-
8
- before(:each) do
9
- controller.stub(:redirect_to)
10
- end
11
-
12
- describe '#user_logged_in' do
13
- let(:ticket_granting_ticket) { 'TGT-123' }
14
- context 'with a service url' do
15
- let(:url) { 'http://www.example.com/?ticket=ST-123' }
16
- it 'tells the controller to redirect the client' do
17
- controller.should_receive(:redirect_to).with(url, status: :see_other)
18
- listener.user_logged_in(url, ticket_granting_ticket)
19
- end
20
- end
21
-
22
- context 'without a service url' do
23
- let(:url) { nil }
24
- it 'tells the controller to redirect to the session overview' do
25
- controller.should_receive(:redirect_to).with(sessions_path, status: :see_other)
26
- listener.user_logged_in(url, ticket_granting_ticket)
27
- end
28
-
29
- it 'creates the tgt cookie' do
30
- listener.user_logged_in(url, ticket_granting_ticket)
31
- controller.cookies[:tgt][:value].should == ticket_granting_ticket
32
- end
33
- end
34
-
35
- context 'with cookie expiry time' do
36
- let(:url) { Object.new }
37
- let(:expiry_time) { Time.now }
38
- it 'set the tgt cookie expiry time' do
39
- listener.user_logged_in(url, ticket_granting_ticket, expiry_time)
40
- controller.cookies[:tgt][:value].should == ticket_granting_ticket
41
- controller.cookies[:tgt][:expires].should == expiry_time
42
- end
43
- end
44
- end
45
-
46
- [:invalid_login_credentials, :invalid_login_ticket].each do |method|
47
- context "##{method}" do
48
- let(:login_ticket) { Object.new }
49
- let(:flash) { ActionDispatch::Flash::FlashHash.new }
50
-
51
- before(:each) do
52
- controller.stub(:render)
53
- controller.stub(:flash).and_return(flash)
54
- end
55
-
56
- it 'tells the controller to render the new template' do
57
- controller.should_receive(:render).with('new', status: 403)
58
- listener.send(method, login_ticket)
59
- end
60
-
61
- it 'assigns a new login ticket' do
62
- listener.send(method, login_ticket)
63
- controller.instance_variable_get(:@login_ticket).should == login_ticket
64
- end
65
-
66
- it 'should add an error message' do
67
- listener.send(method, login_ticket)
68
- flash[:error].should == I18n.t("login_credential_acceptor.#{method}")
69
- end
70
- end
71
- end
72
-
73
- context '#service_not_allowed' do
74
- let(:service) { 'http://www.example.com/foo' }
75
-
76
- before(:each) do
77
- controller.stub(:render)
78
- end
79
-
80
- it 'tells the controller to render the service_not_allowed template' do
81
- controller.should_receive(:render).with('service_not_allowed', status: 403)
82
- listener.send(:service_not_allowed, service)
83
- end
84
-
85
- it 'assigns the not allowed service' do
86
- listener.send(:service_not_allowed, service)
87
- controller.instance_variable_get(:@service).should == service
88
- end
89
- end
90
-
91
- context '#two_factor_authentication_pending' do
92
- let(:ticket_granting_ticket) { 'TGT-123' }
93
-
94
- before(:each) do
95
- controller.stub(:render)
96
- end
97
-
98
- it 'tells the controller to render the service_not_allowed template' do
99
- controller.should_receive(:render).with('validate_otp')
100
- listener.send(:two_factor_authentication_pending, ticket_granting_ticket)
101
- end
102
-
103
- it 'assigns the not allowed service' do
104
- listener.send(:two_factor_authentication_pending, ticket_granting_ticket)
105
- controller.instance_variable_get(:@ticket_granting_ticket).should == ticket_granting_ticket
106
- end
107
- end
108
- end
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASino::LoginCredentialRequestorListener do
4
- include CASino::Engine.routes.url_helpers
5
- let(:controller) { Struct.new(:cookies).new(cookies: {}) }
6
- let(:listener) { described_class.new(controller) }
7
-
8
- describe '#user_not_logged_in' do
9
- let(:login_ticket) { Object.new }
10
- it 'assigns the login ticket' do
11
- listener.user_not_logged_in(login_ticket)
12
- controller.instance_variable_get(:@login_ticket).should == login_ticket
13
- end
14
-
15
- it 'deletes an existing ticket-granting ticket cookie' do
16
- controller.cookies = { tgt: 'TGT-12345' }
17
- listener.user_not_logged_in(login_ticket)
18
- controller.cookies[:tgt].should be_nil
19
- end
20
- end
21
-
22
- describe '#user_logged_in' do
23
- context 'with a service url' do
24
- let(:url) { 'http://www.example.com/?ticket=ST-123' }
25
- it 'tells the controller to redirect the client' do
26
- controller.should_receive(:redirect_to).with(url, status: :see_other)
27
- listener.user_logged_in(url)
28
- end
29
- end
30
-
31
- context 'without a service url' do
32
- let(:url) { nil }
33
- it 'tells the controller to redirect to the session overview' do
34
- controller.should_receive(:redirect_to).with(sessions_path)
35
- listener.user_logged_in(url)
36
- end
37
- end
38
- end
39
-
40
- context '#service_not_allowed' do
41
- let(:service) { 'http://www.example.com/foo' }
42
-
43
- before(:each) do
44
- controller.stub(:render)
45
- end
46
-
47
- it 'tells the controller to render the service_not_allowed template' do
48
- controller.should_receive(:render).with('service_not_allowed', status: 403)
49
- listener.send(:service_not_allowed, service)
50
- end
51
-
52
- it 'assigns the not allowed service' do
53
- listener.send(:service_not_allowed, service)
54
- controller.instance_variable_get(:@service).should == service
55
- end
56
- end
57
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASino::LogoutListener do
4
- include Rails.application.routes.url_helpers
5
- let(:controller) { Struct.new(:cookies).new(cookies: {}) }
6
- let(:listener) { described_class.new(controller) }
7
-
8
- describe '#user_logged_out' do
9
- let(:url) { 'http://www.example.com/test' }
10
- it 'assigns the url' do
11
- listener.user_logged_out(url)
12
- controller.instance_variable_get(:@url).should == url
13
- end
14
-
15
- it 'deletes an existing ticket-granting ticket cookie' do
16
- controller.cookies = { tgt: 'TGT-12345' }
17
- listener.user_logged_out(url)
18
- controller.cookies[:tgt].should be_nil
19
- end
20
-
21
- context 'with redirect_immediately flag' do
22
- before(:each) do
23
- controller.stub(:redirect_to)
24
- end
25
-
26
- it 'tells the controller to redirect the client' do
27
- controller.should_receive(:redirect_to).with(url, status: :see_other)
28
- listener.user_logged_out(url, true)
29
- end
30
-
31
- it 'deletes an existing ticket-granting ticket cookie' do
32
- controller.cookies = { tgt: 'TGT-12345' }
33
- listener.user_logged_out(url, true)
34
- controller.cookies[:tgt].should be_nil
35
- end
36
- end
37
- end
38
- end
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASino::OtherSessionsDestroyerListener do
4
- include CASino::Engine.routes.url_helpers
5
- let(:controller) { Struct.new(:cookies).new(cookies: {}) }
6
- let(:listener) { described_class.new(controller) }
7
-
8
- before(:each) do
9
- controller.stub(:redirect_to)
10
- end
11
-
12
- describe '#other_sessions_destroyed' do
13
- let(:service) { 'http://www.example.com/' }
14
- it 'redirects back to the URL' do
15
- controller.should_receive(:redirect_to).with(service)
16
- listener.other_sessions_destroyed(service)
17
- end
18
- end
19
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASino::ProxyTicketProviderListener do
4
- let(:controller) { Object.new }
5
- let(:listener) { described_class.new(controller) }
6
- let(:xml) { "<foo><bar>bla</bar></foo>" }
7
- let(:render_parameters) { { xml: xml } }
8
-
9
- describe '#request_succeeded' do
10
- it 'tells the controller to render the response xml' do
11
- controller.should_receive(:render).with(render_parameters)
12
- listener.request_succeeded(xml)
13
- end
14
- end
15
-
16
- describe '#request_failed' do
17
- it 'tells the controller to render the response xml' do
18
- controller.should_receive(:render).with(render_parameters)
19
- listener.request_failed(xml)
20
- end
21
- end
22
- end
@@ -1,74 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CASino::SecondFactorAuthenticationAcceptorListener do
4
- include CASino::Engine.routes.url_helpers
5
- let(:controller) { Struct.new(:cookies).new(cookies: {}) }
6
- let(:listener) { described_class.new(controller) }
7
-
8
- before(:each) do
9
- controller.stub(:redirect_to)
10
- end
11
-
12
- describe '#user_not_logged_in' do
13
- it 'redirects to the login page' do
14
- controller.should_receive(:redirect_to).with(login_path)
15
- listener.user_not_logged_in
16
- end
17
- end
18
-
19
- describe '#user_logged_in' do
20
- let(:ticket_granting_ticket) { 'TGT-123' }
21
- context 'with a service url' do
22
- let(:url) { 'http://www.example.com/?ticket=ST-123' }
23
- it 'tells the controller to redirect the client' do
24
- controller.should_receive(:redirect_to).with(url, status: :see_other)
25
- listener.user_logged_in(url, ticket_granting_ticket)
26
- end
27
- end
28
-
29
- context 'without a service url' do
30
- let(:url) { nil }
31
- it 'tells the controller to redirect to the session overview' do
32
- controller.should_receive(:redirect_to).with(sessions_path, status: :see_other)
33
- listener.user_logged_in(url, ticket_granting_ticket)
34
- end
35
-
36
- it 'creates the tgt cookie' do
37
- listener.user_logged_in(url, ticket_granting_ticket)
38
- controller.cookies[:tgt].should == { value: ticket_granting_ticket, expires: nil }
39
- end
40
- end
41
- end
42
-
43
- context "#invalid_one_time_password" do
44
- let(:flash) { ActionDispatch::Flash::FlashHash.new }
45
-
46
- before(:each) do
47
- controller.stub(:render)
48
- controller.stub(:flash).and_return(flash)
49
- end
50
-
51
- it 'should add an error message' do
52
- listener.invalid_one_time_password
53
- flash[:error].should == I18n.t('validate_otp.invalid_otp')
54
- end
55
- end
56
-
57
- context '#service_not_allowed' do
58
- let(:service) { 'http://www.example.com/foo' }
59
-
60
- before(:each) do
61
- controller.stub(:render)
62
- end
63
-
64
- it 'tells the controller to render the service_not_allowed template' do
65
- controller.should_receive(:render).with('service_not_allowed', status: 403)
66
- listener.send(:service_not_allowed, service)
67
- end
68
-
69
- it 'assigns the not allowed service' do
70
- listener.send(:service_not_allowed, service)
71
- controller.instance_variable_get(:@service).should == service
72
- end
73
- end
74
- end