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,55 +0,0 @@
1
- class CASino::Api::V1::TicketsController < CASino::ApplicationController
2
-
3
- # POST /cas/v1/tickets
4
- def create
5
- CASino::API::LoginCredentialAcceptorProcessor.new(self).process(params, request.user_agent)
6
- end
7
-
8
- # POST /cas/v1/tickets/{TGT id}
9
- def update
10
- CASino::API::ServiceTicketProviderProcessor.new(self).process(params[:id], params, request.user_agent)
11
- end
12
-
13
- # DELETE /cas/v1/tickets/TGT-fdsjfsdfjkalfewrihfdhfaie
14
- def destroy
15
- CASino::API::LogoutProcessor.new(self).process(params[:id], request.user_agent)
16
- end
17
-
18
- # callbacks
19
- def user_logged_in_via_api(ticket_granting_ticket)
20
- render nothing: true, status: 201, location: api_v1_ticket_url(ticket_granting_ticket)
21
- end
22
-
23
- def invalid_login_credentials_via_api
24
- error_response
25
- end
26
-
27
- def granted_service_ticket_via_api(service_ticket)
28
- render text: service_ticket, status: 200, content_type: Mime::TEXT
29
- end
30
-
31
- def invalid_ticket_granting_ticket_via_api
32
- error_response
33
- end
34
-
35
- def no_service_provided_via_api
36
- error_response
37
- end
38
-
39
- def service_not_allowed_via_api
40
- error_response
41
- end
42
-
43
- def user_logged_out_via_api
44
- render nothing: true, status: 200
45
- end
46
-
47
- private
48
- def error_response
49
- render nothing: true, status: 400
50
- end
51
-
52
- end
53
-
54
- # Inflector alias
55
- CASino::API = CASino::Api
@@ -1,2 +0,0 @@
1
- module ServiceTicketsHelper
2
- end
@@ -1,11 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::LegacyValidatorListener < CASino::Listener
4
- def validation_failed(text)
5
- @controller.render text: text, content_type: 'text/plain'
6
- end
7
-
8
- def validation_succeeded(text)
9
- @controller.render text: text, content_type: 'text/plain'
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- module CASino
2
- class Listener
3
-
4
- # include helpers to have the route path methods (like sessions_path)
5
- include CASino::Engine.routes.url_helpers
6
-
7
- def initialize(controller)
8
- @controller = controller
9
- end
10
-
11
- protected
12
- def assign(name, value)
13
- @controller.instance_variable_set("@#{name}", value)
14
- end
15
- end
16
- end
@@ -1,38 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::LoginCredentialAcceptorListener < CASino::Listener
4
- def user_logged_in(url, ticket_granting_ticket, cookie_expiry_time = nil)
5
- @controller.cookies[:tgt] = { value: ticket_granting_ticket, expires: cookie_expiry_time }
6
- if url.nil?
7
- @controller.redirect_to sessions_path, status: :see_other
8
- else
9
- @controller.redirect_to url, status: :see_other
10
- end
11
- end
12
-
13
- def two_factor_authentication_pending(ticket_granting_ticket)
14
- assign(:ticket_granting_ticket, ticket_granting_ticket)
15
- @controller.render 'validate_otp'
16
- end
17
-
18
- def invalid_login_credentials(login_ticket)
19
- @controller.flash.now[:error] = I18n.t('login_credential_acceptor.invalid_login_credentials')
20
- rerender_login_page(login_ticket)
21
- end
22
-
23
- def invalid_login_ticket(login_ticket)
24
- @controller.flash.now[:error] = I18n.t('login_credential_acceptor.invalid_login_ticket')
25
- rerender_login_page(login_ticket)
26
- end
27
-
28
- def service_not_allowed(service)
29
- assign(:service, service)
30
- @controller.render 'service_not_allowed', status: 403
31
- end
32
-
33
- private
34
- def rerender_login_page(login_ticket)
35
- assign(:login_ticket, login_ticket)
36
- @controller.render 'new', status: 403
37
- end
38
- end
@@ -1,21 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::LoginCredentialRequestorListener < CASino::Listener
4
- def user_not_logged_in(login_ticket)
5
- assign(:login_ticket, login_ticket)
6
- @controller.cookies.delete :tgt
7
- end
8
-
9
- def service_not_allowed(service)
10
- assign(:service, service)
11
- @controller.render 'service_not_allowed', status: 403
12
- end
13
-
14
- def user_logged_in(url)
15
- if url.nil?
16
- @controller.redirect_to sessions_path
17
- else
18
- @controller.redirect_to url, status: :see_other
19
- end
20
- end
21
- end
@@ -1,12 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::LogoutListener < CASino::Listener
4
- def user_logged_out(url, redirect_immediately = false)
5
- if redirect_immediately
6
- @controller.redirect_to url, status: :see_other
7
- else
8
- assign(:url, url)
9
- end
10
- @controller.cookies.delete :tgt
11
- end
12
- end
@@ -1,7 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::OtherSessionsDestroyerListener < CASino::Listener
4
- def other_sessions_destroyed(url)
5
- @controller.redirect_to(url || sessions_path)
6
- end
7
- end
@@ -1,11 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::ProxyTicketProviderListener < CASino::Listener
4
- def request_failed(xml)
5
- @controller.render xml: xml
6
- end
7
-
8
- def request_succeeded(xml)
9
- @controller.render xml: xml
10
- end
11
- end
@@ -1,26 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::SecondFactorAuthenticationAcceptorListener < CASino::Listener
4
-
5
- def user_not_logged_in
6
- @controller.redirect_to login_path
7
- end
8
-
9
- def user_logged_in(url, ticket_granting_ticket, cookie_expiry_time = nil)
10
- @controller.cookies[:tgt] = { value: ticket_granting_ticket, expires: cookie_expiry_time }
11
- if url.nil?
12
- @controller.redirect_to sessions_path, status: :see_other
13
- else
14
- @controller.redirect_to url, status: :see_other
15
- end
16
- end
17
-
18
- def invalid_one_time_password
19
- @controller.flash.now[:error] = I18n.t('validate_otp.invalid_otp')
20
- end
21
-
22
- def service_not_allowed(service)
23
- assign(:service, service)
24
- @controller.render 'service_not_allowed', status: 403
25
- end
26
- end
@@ -1,11 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::SessionDestroyerListener < CASino::Listener
4
- def ticket_deleted
5
- @controller.redirect_to(sessions_path)
6
- end
7
-
8
- def ticket_not_found
9
- @controller.redirect_to(sessions_path)
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::SessionOverviewListener < CASino::Listener
4
- def user_not_logged_in
5
- @controller.redirect_to login_path
6
- end
7
-
8
- def ticket_granting_tickets_found(ticket_granting_tickets)
9
- assign(:ticket_granting_tickets, ticket_granting_tickets)
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::TicketValidatorListener < CASino::Listener
4
- def validation_failed(xml)
5
- @controller.render xml: xml
6
- end
7
-
8
- def validation_succeeded(xml)
9
- @controller.render xml: xml
10
- end
11
- end
@@ -1,23 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::TwoFactorAuthenticatorActivatorListener < CASino::Listener
4
- def user_not_logged_in
5
- @controller.redirect_to login_path
6
- end
7
-
8
- def two_factor_authenticator_activated
9
- @controller.flash[:notice] = I18n.t('two_factor_authenticators.successfully_activated')
10
- @controller.redirect_to sessions_path
11
- end
12
-
13
- def invalid_one_time_password(two_factor_authenticator)
14
- @controller.flash.now[:error] = I18n.t('two_factor_authenticators.invalid_one_time_password')
15
- assign(:two_factor_authenticator, two_factor_authenticator)
16
- @controller.render 'new'
17
- end
18
-
19
- def invalid_two_factor_authenticator
20
- @controller.flash[:error] = I18n.t('two_factor_authenticators.invalid_two_factor_authenticator')
21
- @controller.redirect_to new_two_factor_authenticator_path
22
- end
23
- end
@@ -1,16 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::TwoFactorAuthenticatorDestroyerListener < CASino::Listener
4
- def user_not_logged_in
5
- @controller.redirect_to login_path
6
- end
7
-
8
- def two_factor_authenticator_destroyed
9
- @controller.flash[:notice] = I18n.t('two_factor_authenticators.successfully_deleted')
10
- @controller.redirect_to sessions_path
11
- end
12
-
13
- def invalid_two_factor_authenticator
14
- @controller.redirect_to sessions_path
15
- end
16
- end
@@ -1,11 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::TwoFactorAuthenticatorOverviewListener < CASino::Listener
4
- def user_not_logged_in
5
- # nothing to do here
6
- end
7
-
8
- def two_factor_authenticators_found(two_factor_authenticators)
9
- assign(:two_factor_authenticators, two_factor_authenticators)
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require_relative 'listener'
2
-
3
- class CASino::TwoFactorAuthenticatorRegistratorListener < CASino::Listener
4
- def user_not_logged_in
5
- @controller.redirect_to login_path
6
- end
7
-
8
- def two_factor_authenticator_registered(two_factor_authenticator)
9
- assign(:two_factor_authenticator, two_factor_authenticator)
10
- end
11
- end
@@ -1,46 +0,0 @@
1
- # This processor should be used for API calls: POST /cas/v1/tickets
2
- class CASino::API::LoginCredentialAcceptorProcessor < CASino::Processor
3
- include CASino::ProcessorConcern::ServiceTickets
4
- include CASino::ProcessorConcern::Authentication
5
- include CASino::ProcessorConcern::TicketGrantingTickets
6
-
7
- # Use this method to process the request. It expects the username in the parameter "username" and the password
8
- # in "password".
9
- #
10
- # The method will call one of the following methods on the listener:
11
- # * `#user_logged_in_via_api`: First and only argument is a String with the TGT-id
12
- # * `#invalid_login_credentials_via_api`: No argument
13
- #
14
- # @param [Hash] login_data parameters supplied by user (username and password)
15
- def process(login_data, user_agent = nil)
16
- @login_data = login_data
17
- @user_agent = user_agent
18
-
19
- validate_login_data
20
-
21
- unless @authentication_result.nil?
22
- generate_ticket_granting_ticket
23
- callback_user_logged_in
24
- else
25
- callback_invalid_login_credentials
26
- end
27
- end
28
-
29
- private
30
- def validate_login_data
31
- @authentication_result = validate_login_credentials(@login_data[:username], @login_data[:password])
32
- end
33
-
34
- def callback_user_logged_in
35
- @listener.user_logged_in_via_api @ticket_granting_ticket.ticket
36
- end
37
-
38
- def generate_ticket_granting_ticket
39
- @ticket_granting_ticket = acquire_ticket_granting_ticket(@authentication_result, @user_agent)
40
- end
41
-
42
- def callback_invalid_login_credentials
43
- @listener.invalid_login_credentials_via_api
44
- end
45
-
46
- end
@@ -1,17 +0,0 @@
1
- # The Logout processor should be used to process API DELETE requests to /cas/v1/tickets/<ticket_granting_ticket>
2
- class CASino::API::LogoutProcessor < CASino::Processor
3
- include CASino::ProcessorConcern::TicketGrantingTickets
4
-
5
- # This method will call `#user_logged_out_via_api` on the listener.
6
- #
7
- # @param [String] ticket_granting_ticket Ticket-granting ticket to logout
8
- def process(ticket_granting_ticket, user_agent = nil)
9
- remove_ticket_granting_ticket(ticket_granting_ticket, user_agent)
10
- callback_user_logged_out
11
- end
12
-
13
- def callback_user_logged_out
14
- @listener.user_logged_out_via_api
15
- end
16
-
17
- end
@@ -1,69 +0,0 @@
1
- # The ServiceTicketProvider processor should be used to handle API calls: POST requests to /cas/v1/tickets/<ticket_granting_ticket>
2
- class CASino::API::ServiceTicketProviderProcessor < CASino::Processor
3
- include CASino::ProcessorConcern::ServiceTickets
4
- include CASino::ProcessorConcern::TicketGrantingTickets
5
-
6
- # Use this method to process the request.
7
- #
8
- # The method will call one of the following methods on the listener:
9
- # * `#granted_service_ticket_via_api`: First and only argument is a String with the service ticket.
10
- # The service ticket (and nothing else) should be displayed.
11
- # * `#invalid_ticket_granting_ticket_via_api`: No argument. The application should respond with status "400 Bad Request"
12
- # * `#no_service_provided_via_api`: No argument. The application should respond with status "400 Bad Request"
13
- # * `#service_not_allowed_via_api`: The user tried to access a service that this CAS server is not allowed to serve.
14
- #
15
- # @param [String] ticket_granting_ticket ticket_granting_ticket supplied by the user in the URL
16
- # @param [Hash] parameters parameters supplied by user (`service` in particular)
17
- # @param [String] user_agent user-agent delivered by the client
18
- def process(ticket_granting_ticket, parameters = nil, user_agent = nil)
19
- parameters ||= {}
20
- @client_ticket_granting_ticket = ticket_granting_ticket
21
- @service_url = parameters[:service]
22
- @user_agent = user_agent
23
-
24
- fetch_valid_ticket_granting_ticket
25
- handle_ticket_granting_ticket
26
- end
27
-
28
- private
29
- def fetch_valid_ticket_granting_ticket
30
- @ticket_granting_ticket = find_valid_ticket_granting_ticket(@client_ticket_granting_ticket, @user_agent)
31
- end
32
-
33
- def handle_ticket_granting_ticket
34
- case
35
- when (@service_url and @ticket_granting_ticket)
36
- begin
37
- create_service_ticket
38
- callback_granted_service_ticket
39
- rescue ServiceNotAllowedError
40
- callback_service_not_allowed
41
- end
42
- when (@service_url and not @ticket_granting_ticket)
43
- callback_invalid_tgt
44
- when (not @service_url and @ticket_granting_ticket)
45
- callback_empty_service
46
- end
47
- end
48
-
49
- def create_service_ticket
50
- @service_ticket = acquire_service_ticket(@ticket_granting_ticket, @service_url)
51
- end
52
-
53
- def callback_granted_service_ticket
54
- @listener.granted_service_ticket_via_api @service_ticket.ticket
55
- end
56
-
57
- def callback_invalid_tgt
58
- @listener.invalid_ticket_granting_ticket_via_api
59
- end
60
-
61
- def callback_empty_service
62
- @listener.no_service_provided_via_api
63
- end
64
-
65
- def callback_service_not_allowed
66
- @listener.service_not_allowed_via_api(clean_service_url @service_url)
67
- end
68
-
69
- end