casino 1.3.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.gitignore +3 -0
  3. data/.travis.yml +1 -1
  4. data/README.md +1 -8
  5. data/Rakefile +0 -2
  6. data/app/assets/javascripts/casino/application.js +1 -0
  7. data/app/assets/javascripts/casino/index.js +0 -2
  8. data/app/assets/javascripts/casino/sessions.js +32 -0
  9. data/app/authenticators/casino/static_authenticator.rb +23 -0
  10. data/app/builders/casino/ticket_validation_response_builder.rb +84 -0
  11. data/app/controllers/casino/api/v1/tickets_controller.rb +7 -4
  12. data/app/controllers/casino/application_controller.rb +2 -3
  13. data/{lib/casino/listener/legacy_validator.rb → app/listeners/casino/legacy_validator_listener.rb} +2 -2
  14. data/app/listeners/casino/listener.rb +16 -0
  15. data/{lib/casino/listener/login_credential_acceptor.rb → app/listeners/casino/login_credential_acceptor_listener.rb} +2 -2
  16. data/{lib/casino/listener/login_credential_requestor.rb → app/listeners/casino/login_credential_requestor_listener.rb} +2 -2
  17. data/{lib/casino/listener/logout.rb → app/listeners/casino/logout_listener.rb} +2 -2
  18. data/{lib/casino/listener/other_sessions_destroyer.rb → app/listeners/casino/other_sessions_destroyer_listener.rb} +2 -2
  19. data/{lib/casino/listener/proxy_ticket_provider.rb → app/listeners/casino/proxy_ticket_provider_listener.rb} +2 -2
  20. data/{lib/casino/listener/second_factor_authentication_acceptor.rb → app/listeners/casino/second_factor_authentication_acceptor_listener.rb} +2 -2
  21. data/{lib/casino/listener/session_destroyer.rb → app/listeners/casino/session_destroyer_listener.rb} +2 -2
  22. data/{lib/casino/listener/session_overview.rb → app/listeners/casino/session_overview_listener.rb} +2 -2
  23. data/{lib/casino/listener/ticket_validator.rb → app/listeners/casino/ticket_validator_listener.rb} +2 -2
  24. data/{lib/casino/listener/two_factor_authenticator_activator.rb → app/listeners/casino/two_factor_authenticator_activator_listener.rb} +2 -2
  25. data/{lib/casino/listener/two_factor_authenticator_destroyer.rb → app/listeners/casino/two_factor_authenticator_destroyer_listener.rb} +2 -2
  26. data/{lib/casino/listener/two_factor_authenticator_overview.rb → app/listeners/casino/two_factor_authenticator_overview_listener.rb} +2 -2
  27. data/{lib/casino/listener/two_factor_authenticator_registrator.rb → app/listeners/casino/two_factor_authenticator_registrator_listener.rb} +2 -2
  28. data/app/models/casino/login_ticket.rb +12 -0
  29. data/app/models/casino/proxy_granting_ticket.rb +8 -0
  30. data/app/models/casino/proxy_ticket.rb +25 -0
  31. data/app/models/casino/service_rule.rb +27 -0
  32. data/app/models/casino/service_ticket.rb +43 -0
  33. data/app/models/casino/service_ticket/single_sign_out_notifier.rb +44 -0
  34. data/app/models/casino/ticket_granting_ticket.rb +57 -0
  35. data/app/models/casino/two_factor_authenticator.rb +18 -0
  36. data/app/models/casino/user.rb +12 -0
  37. data/app/models/casino/validation_result.rb +5 -0
  38. data/app/processors/casino/api/login_credential_acceptor_processor.rb +46 -0
  39. data/app/processors/casino/api/logout_processor.rb +17 -0
  40. data/app/processors/casino/api/service_ticket_provider_processor.rb +69 -0
  41. data/app/processors/casino/legacy_validator_processor.rb +19 -0
  42. data/app/processors/casino/login_credential_acceptor_processor.rb +63 -0
  43. data/app/processors/casino/login_credential_requestor_processor.rb +66 -0
  44. data/app/processors/casino/logout_processor.rb +23 -0
  45. data/app/processors/casino/other_sessions_destroyer_processor.rb +26 -0
  46. data/app/processors/casino/processor.rb +5 -0
  47. data/app/processors/casino/processor_concern/authentication.rb +87 -0
  48. data/app/processors/casino/processor_concern/browser.rb +14 -0
  49. data/app/processors/casino/processor_concern/login_tickets.rb +28 -0
  50. data/app/processors/casino/processor_concern/proxy_granting_tickets.rb +43 -0
  51. data/app/processors/casino/processor_concern/proxy_tickets.rb +56 -0
  52. data/app/processors/casino/processor_concern/service_tickets.rb +50 -0
  53. data/app/processors/casino/processor_concern/ticket_granting_tickets.rb +65 -0
  54. data/app/processors/casino/processor_concern/tickets.rb +17 -0
  55. data/app/processors/casino/processor_concern/two_factor_authenticators.rb +22 -0
  56. data/app/processors/casino/proxy_ticket_provider_processor.rb +41 -0
  57. data/app/processors/casino/proxy_ticket_validator_processor.rb +22 -0
  58. data/app/processors/casino/second_factor_authentication_acceptor_processor.rb +45 -0
  59. data/app/processors/casino/service_ticket_validator_processor.rb +46 -0
  60. data/app/processors/casino/session_destroyer_processor.rb +25 -0
  61. data/app/processors/casino/session_overview_processor.rb +21 -0
  62. data/app/processors/casino/two_factor_authenticator_activator_processor.rb +41 -0
  63. data/app/processors/casino/two_factor_authenticator_destroyer_processor.rb +33 -0
  64. data/app/processors/casino/two_factor_authenticator_overview_processor.rb +20 -0
  65. data/app/processors/casino/two_factor_authenticator_registrator_processor.rb +24 -0
  66. data/app/views/casino/application/_footer.html.erb +1 -1
  67. data/app/views/casino/sessions/new.html.erb +2 -1
  68. data/app/views/casino/sessions/validate_otp.html.erb +1 -1
  69. data/app/views/casino/two_factor_authenticators/new.html.erb +2 -2
  70. data/app/views/layouts/application.html.erb +1 -1
  71. data/casino.gemspec +9 -4
  72. data/db/migrate/20130809135400_create_core_schema.rb +117 -0
  73. data/db/migrate/20130809135401_rename_base_models.rb +101 -0
  74. data/db/migrate/20131022110146_cleanup_indexes.rb +27 -0
  75. data/db/migrate/20131022110246_fix_long_index_names.rb +12 -0
  76. data/db/migrate/20131022110346_change_service_to_text.rb +6 -0
  77. data/lib/casino.rb +47 -3
  78. data/lib/casino/authenticator.rb +9 -0
  79. data/lib/casino/engine.rb +26 -0
  80. data/lib/casino/inflections.rb +7 -0
  81. data/lib/casino/tasks.rb +1 -0
  82. data/lib/casino/tasks/cleanup.rake +59 -0
  83. data/lib/casino/tasks/service_rule.rake +49 -0
  84. data/lib/casino/version.rb +1 -1
  85. data/lib/generators/casino/install/USAGE +13 -0
  86. data/lib/generators/casino/install/install_generator.rb +47 -0
  87. data/lib/generators/casino/{templates → install/templates}/README +3 -4
  88. data/lib/generators/casino/{templates → install/templates}/cas.yml +2 -2
  89. data/lib/generators/casino/{templates → install/templates}/casino_and_overrides.scss +0 -0
  90. data/lib/generators/casino/templates/casino_core.rb +1 -1
  91. data/spec/authenticator/base_spec.rb +13 -0
  92. data/spec/authenticator/static_spec.rb +42 -0
  93. data/spec/controllers/api/v1/tickets_controller_spec.rb +15 -15
  94. data/spec/controllers/listener/legacy_validator_spec.rb +1 -1
  95. data/spec/controllers/listener/login_credential_acceptor_spec.rb +1 -1
  96. data/spec/controllers/listener/login_credential_requestor_spec.rb +1 -1
  97. data/spec/controllers/listener/logout_spec.rb +1 -1
  98. data/spec/controllers/listener/other_sessions_destroyer_spec.rb +1 -1
  99. data/spec/controllers/listener/proxy_ticket_provider_spec.rb +1 -1
  100. data/spec/controllers/listener/second_factor_authentication_acceptor_spec.rb +1 -1
  101. data/spec/controllers/listener/session_destroyer_spec.rb +1 -1
  102. data/spec/controllers/listener/session_overview_spec.rb +1 -1
  103. data/spec/controllers/listener/ticket_validator_spec.rb +1 -1
  104. data/spec/controllers/listener/two_factor_authenticator_activator_spec.rb +1 -1
  105. data/spec/controllers/listener/two_factor_authenticator_destroyer_spec.rb +1 -1
  106. data/spec/controllers/listener/two_factor_authenticator_overview_spec.rb +1 -1
  107. data/spec/controllers/listener/two_factor_authenticator_registrator_spec.rb +1 -1
  108. data/spec/controllers/proxy_tickets_controller_spec.rb +4 -4
  109. data/spec/controllers/service_tickets_controller_spec.rb +4 -4
  110. data/spec/controllers/sessions_controller_spec.rb +15 -15
  111. data/spec/controllers/two_factor_authenticators_controller_spec.rb +6 -6
  112. data/spec/dummy/app/assets/stylesheets/casino_and_overrides.scss +13 -0
  113. data/spec/dummy/config/cas.yml +11 -11
  114. data/spec/dummy/config/routes.rb +1 -2
  115. data/spec/dummy/db/migrate/20130910094259_create_base_models.casino.rb +95 -0
  116. data/spec/dummy/db/schema.rb +107 -0
  117. data/spec/model/login_ticket_spec.rb +23 -0
  118. data/spec/model/proxy_ticket_spec.rb +63 -0
  119. data/spec/model/service_rule_spec.rb +65 -0
  120. data/spec/model/service_ticket/single_sign_out_notifier_spec.rb +61 -0
  121. data/spec/model/service_ticket_spec.rb +124 -0
  122. data/spec/model/ticket_granting_ticket_spec.rb +204 -0
  123. data/spec/model/two_factor_authenticator_spec.rb +31 -0
  124. data/spec/processor/api/login_credential_acceptor_spec.rb +52 -0
  125. data/spec/processor/api/logout_spec.rb +34 -0
  126. data/spec/processor/api/service_ticket_provider_spec.rb +61 -0
  127. data/spec/processor/legacy_validator_spec.rb +78 -0
  128. data/spec/processor/login_credential_acceptor_spec.rb +164 -0
  129. data/spec/processor/login_credential_requestor_spec.rb +135 -0
  130. data/spec/processor/logout_other_sessions_spec.rb +53 -0
  131. data/spec/processor/logout_spec.rb +72 -0
  132. data/spec/processor/processor_concern/service_tickets_spec.rb +49 -0
  133. data/spec/processor/proxy_ticket_provider_spec.rb +66 -0
  134. data/spec/processor/proxy_ticket_validator_spec.rb +65 -0
  135. data/spec/processor/second_factor_authenticaton_acceptor_spec.rb +94 -0
  136. data/spec/processor/session_destroyer_spec.rb +75 -0
  137. data/spec/processor/session_overview_spec.rb +49 -0
  138. data/spec/processor/ticket_validator_spec.rb +199 -0
  139. data/spec/processor/two_factor_authenticator_activator_spec.rb +122 -0
  140. data/spec/processor/two_factor_authenticator_destroyer_spec.rb +71 -0
  141. data/spec/processor/two_factor_authenticator_overview_spec.rb +56 -0
  142. data/spec/processor/two_factor_authenticator_registrator_spec.rb +48 -0
  143. data/spec/spec_helper.rb +8 -19
  144. data/spec/support/casino.rb +12 -0
  145. data/spec/support/factories/login_ticket_factory.rb +16 -0
  146. data/spec/support/factories/proxy_granting_ticket_factory.rb +16 -0
  147. data/spec/support/factories/proxy_ticket_factory.rb +17 -0
  148. data/spec/support/factories/service_rule_factory.rb +16 -0
  149. data/spec/support/factories/service_ticket_factory.rb +17 -0
  150. data/spec/support/factories/ticket_granting_ticket_factory.rb +15 -0
  151. data/spec/support/factories/two_factor_authenticator_factory.rb +16 -0
  152. data/spec/support/factories/user_factory.rb +11 -0
  153. data/spec/support/rspec.rb +8 -0
  154. data/spec/support/sqlite3.rb +4 -0
  155. metadata +284 -48
  156. metadata.gz.sig +2 -0
  157. data/.powrc +0 -4
  158. data/Gemfile.lock +0 -149
  159. data/app/assets/javascripts/casino/application.js.coffee +0 -5
  160. data/app/assets/javascripts/casino/sessions.js.coffee +0 -15
  161. data/config/initializers/frontend_config.rb +0 -9
  162. data/config/initializers/inflections.rb +0 -19
  163. data/config/initializers/yaml.rb +0 -1
  164. data/lib/casino/listener.rb +0 -31
  165. data/lib/generators/casino/install_generator.rb +0 -35
  166. data/spec/dummy/config/initializers/casino_core.rb +0 -1
data.tar.gz.sig ADDED
Binary file
data/.gitignore CHANGED
@@ -19,6 +19,9 @@
19
19
 
20
20
  /pkg
21
21
 
22
+ # http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
23
+ /Gemfile.lock
24
+
22
25
  # Dummy application crap
23
26
  /spec/dummy/log/*.log
24
27
  /spec/dummy/tmp
data/.travis.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  before_script:
3
- - "cd spec/dummy && RAILS_ENV=test rake casino_core:db:schema:load && cd ../.."
3
+ - "bundle exec rake"
4
4
  rvm:
5
5
  - 1.9.3
6
6
  - 2.0.0
data/README.md CHANGED
@@ -1,16 +1,9 @@
1
- # CASino [![Build Status](https://secure.travis-ci.org/rbCAS/CASino.png?branch=master)](https://travis-ci.org/rbCAS/CASino)
1
+ # CASino [![Build Status](https://secure.travis-ci.org/rbCAS/CASino.png?branch=master)](https://travis-ci.org/rbCAS/CASino) [![Coverage Status](https://coveralls.io/repos/rbCAS/CASino/badge.png?branch=master)](https://coveralls.io/r/rbCAS/CASino?branch=master)
2
2
 
3
3
  CASino Rails Engine (used in CASinoApp).
4
4
 
5
5
  It currently supports [CAS 1.0 and CAS 2.0](http://www.jasig.org/cas/protocol) as well as [CAS 3.1 Single Sign Out](https://wiki.jasig.org/display/CASUM/Single+Sign+Out) and [CAS RESTful API](https://wiki.jasig.org/display/CASUM/RESTful+API).
6
6
 
7
- CASino is separated into a web app and core components:
8
-
9
- * CASino is the web application (using the Rails framework)
10
- * CASinoCore contains all the CAS server logic
11
-
12
- This simplifies the creation of a CAS server implementation for other developers.
13
-
14
7
  ## Setup
15
8
 
16
9
  Please check our [documentation](http://casino.rbcas.com/) for setup and configuration instructions.
data/Rakefile CHANGED
@@ -4,8 +4,6 @@ require 'rake'
4
4
  require 'bundler/gem_tasks'
5
5
  require 'rspec/core/rake_task'
6
6
 
7
- require 'casino_core'
8
-
9
7
  task :default => :spec
10
8
 
11
9
  desc 'Run all specs'
@@ -0,0 +1 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
@@ -10,6 +10,4 @@
10
10
  // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
11
  // GO AFTER THE REQUIRES BELOW.
12
12
  //
13
- //= require jquery
14
- //= require jquery_ujs
15
13
  //= require_tree .
@@ -0,0 +1,32 @@
1
+ (function(win, doc) {
2
+ var url = '/login',
3
+ cookie_regex = /(^|;)\s*tgt=/,
4
+ ready_bound = false;
5
+
6
+ function checkCookieExists() {
7
+ var serviceEl = doc.getElementById('service'),
8
+ service = serviceEl ? serviceEl.getAttribute('value') : null;
9
+
10
+ if(cookie_regex.test(document.cookie)) {
11
+ url = '/login';
12
+ if(service) {
13
+ url += '?service=' + encodeURIComponent(service);
14
+ }
15
+ window.location = url;
16
+ } else {
17
+ setTimeout(checkCookieExists, 1000);
18
+ }
19
+ }
20
+
21
+ // Auto-login when logged-in in other browser window (9887c4e)
22
+ document.addEventListener('DOMContentLoaded', function() {
23
+ if(ready_bound) {
24
+ return;
25
+ }
26
+ ready_bound = true;
27
+ if(doc.getElementById('login-form')) {
28
+ checkCookieExists();
29
+ }
30
+ });
31
+
32
+ })(this, document);
@@ -0,0 +1,23 @@
1
+ require 'casino/authenticator'
2
+
3
+ # The static authenticator is just a simple example.
4
+ # Never ever us this authenticator in a productive environment!
5
+ class CASino::StaticAuthenticator < CASino::Authenticator
6
+
7
+ # @param [Hash] options
8
+ def initialize(options)
9
+ @users = options[:users] || {}
10
+ end
11
+
12
+ def validate(username, password)
13
+ username = :"#{username}"
14
+ if @users.include?(username) && @users[username][:password] == password
15
+ {
16
+ username: "#{username}",
17
+ extra_attributes: @users[username].except(:password)
18
+ }
19
+ else
20
+ false
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,84 @@
1
+ require 'builder'
2
+
3
+ class CASino::TicketValidationResponseBuilder
4
+ def initialize(success, options)
5
+ @success = success
6
+ @options = options
7
+ end
8
+
9
+ def build
10
+ xml = Builder::XmlMarkup.new(indent: 2)
11
+ xml.cas :serviceResponse, 'xmlns:cas' => 'http://www.yale.edu/tp/cas' do |service_response|
12
+ if @success
13
+ ticket = @options[:ticket]
14
+ if ticket.is_a?(CASino::ProxyTicket)
15
+ proxies = []
16
+ service_ticket = ticket
17
+ while service_ticket.is_a?(CASino::ProxyTicket)
18
+ proxy_granting_ticket = ticket.proxy_granting_ticket
19
+ proxies << proxy_granting_ticket.pgt_url
20
+ service_ticket = proxy_granting_ticket.granter
21
+ end
22
+ ticket_granting_ticket = service_ticket.ticket_granting_ticket
23
+ else
24
+ service_ticket = ticket
25
+ ticket_granting_ticket = ticket.ticket_granting_ticket
26
+ end
27
+
28
+ build_success_xml(service_response, ticket, service_ticket, ticket_granting_ticket, proxies)
29
+ else
30
+ build_failure_xml(service_response)
31
+ end
32
+ end
33
+ xml.target!
34
+ end
35
+
36
+ private
37
+ def serialize_extra_attribute(builder, key, value)
38
+ if value.kind_of?(String) || value.kind_of?(Numeric) || value.kind_of?(Symbol)
39
+ builder.cas key, "#{value}"
40
+ else
41
+ builder.cas key do |container|
42
+ container.cdata! value.to_yaml
43
+ end
44
+ end
45
+ end
46
+
47
+ def build_success_xml(service_response, ticket, service_ticket, ticket_granting_ticket, proxies)
48
+ user = ticket_granting_ticket.user
49
+ service_response.cas :authenticationSuccess do |authentication_success|
50
+ authentication_success.cas :user, user.username
51
+ unless user.extra_attributes.blank?
52
+ authentication_success.cas :attributes do |attributes|
53
+ attributes.cas :authenticationDate, ticket_granting_ticket.created_at.iso8601
54
+ attributes.cas :longTermAuthenticationRequestTokenUsed, ticket_granting_ticket.long_term?
55
+ attributes.cas :isFromNewLogin, service_ticket.issued_from_credentials?
56
+ # This would probably be the correct way, but current clients do not support this:
57
+ # attributes.cas :userAttributes do |user_attributes|
58
+ # user.extra_attributes.each do |key, value|
59
+ # serialize_extra_attribute(user_attributes, key, value)
60
+ # end
61
+ # end
62
+ user.extra_attributes.each do |key, value|
63
+ serialize_extra_attribute(attributes, key, value)
64
+ end
65
+ end
66
+ end
67
+ if @options[:proxy_granting_ticket]
68
+ proxy_granting_ticket = @options[:proxy_granting_ticket]
69
+ authentication_success.cas :proxyGrantingTicket, proxy_granting_ticket.iou
70
+ end
71
+ if ticket.is_a?(CASino::ProxyTicket)
72
+ authentication_success.cas :proxies do |proxies_container|
73
+ proxies.each do |proxy|
74
+ proxies_container.cas :proxy, proxy
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ def build_failure_xml(service_response)
82
+ service_response.cas :authenticationFailure, @options[:error_message], code: @options[:error_code]
83
+ end
84
+ end
@@ -1,18 +1,18 @@
1
- class CASino::API::V1::TicketsController < CASino::ApplicationController
1
+ class CASino::Api::V1::TicketsController < CASino::ApplicationController
2
2
 
3
3
  # POST /cas/v1/tickets
4
4
  def create
5
- CASinoCore::Processor::API::LoginCredentialAcceptor.new(self).process(params, request.user_agent)
5
+ CASino::API::LoginCredentialAcceptorProcessor.new(self).process(params, request.user_agent)
6
6
  end
7
7
 
8
8
  # POST /cas/v1/tickets/{TGT id}
9
9
  def update
10
- CASinoCore::Processor::API::ServiceTicketProvider.new(self).process(params[:id], params, request.user_agent)
10
+ CASino::API::ServiceTicketProviderProcessor.new(self).process(params[:id], params, request.user_agent)
11
11
  end
12
12
 
13
13
  # DELETE /cas/v1/tickets/TGT-fdsjfsdfjkalfewrihfdhfaie
14
14
  def destroy
15
- CASinoCore::Processor::API::Logout.new(self).process(params[:id], request.user_agent)
15
+ CASino::API::LogoutProcessor.new(self).process(params[:id], request.user_agent)
16
16
  end
17
17
 
18
18
  # callbacks
@@ -50,3 +50,6 @@ class CASino::API::V1::TicketsController < CASino::ApplicationController
50
50
  end
51
51
 
52
52
  end
53
+
54
+ # Inflector alias
55
+ CASino::API = CASino::Api
@@ -1,5 +1,4 @@
1
1
  require 'casino'
2
- require 'casino_core'
3
2
  require 'http_accept_language'
4
3
 
5
4
  class CASino::ApplicationController < ::ApplicationController
@@ -15,8 +14,8 @@ class CASino::ApplicationController < ::ApplicationController
15
14
  protected
16
15
  def processor(processor_name, listener_name = nil)
17
16
  listener_name ||= processor_name
18
- listener = CASino::Listener.const_get(listener_name).new(self)
19
- @processor = CASinoCore::Processor.const_get(processor_name).new(listener)
17
+ listener = CASino.const_get(:"#{listener_name}Listener").new(self)
18
+ @processor = CASino.const_get(:"#{processor_name}Processor").new(listener)
20
19
  end
21
20
 
22
21
  def set_locale
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::LegacyValidator < CASino::Listener
3
+ class CASino::LegacyValidatorListener < CASino::Listener
4
4
  def validation_failed(text)
5
5
  @controller.render text: text, content_type: 'text/plain'
6
6
  end
@@ -0,0 +1,16 @@
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,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::LoginCredentialAcceptor < CASino::Listener
3
+ class CASino::LoginCredentialAcceptorListener < CASino::Listener
4
4
  def user_logged_in(url, ticket_granting_ticket, cookie_expiry_time = nil)
5
5
  @controller.cookies[:tgt] = { value: ticket_granting_ticket, expires: cookie_expiry_time }
6
6
  if url.nil?
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::LoginCredentialRequestor < CASino::Listener
3
+ class CASino::LoginCredentialRequestorListener < CASino::Listener
4
4
  def user_not_logged_in(login_ticket)
5
5
  assign(:login_ticket, login_ticket)
6
6
  @controller.cookies.delete :tgt
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::Logout < CASino::Listener
3
+ class CASino::LogoutListener < CASino::Listener
4
4
  def user_logged_out(url, redirect_immediately = false)
5
5
  if redirect_immediately
6
6
  @controller.redirect_to url, status: :see_other
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::OtherSessionsDestroyer < CASino::Listener
3
+ class CASino::OtherSessionsDestroyerListener < CASino::Listener
4
4
  def other_sessions_destroyed(url)
5
5
  @controller.redirect_to(url || sessions_path)
6
6
  end
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::ProxyTicketProvider < CASino::Listener
3
+ class CASino::ProxyTicketProviderListener < CASino::Listener
4
4
  def request_failed(xml)
5
5
  @controller.render xml: xml
6
6
  end
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::SecondFactorAuthenticationAcceptor < CASino::Listener
3
+ class CASino::SecondFactorAuthenticationAcceptorListener < CASino::Listener
4
4
 
5
5
  def user_not_logged_in
6
6
  @controller.redirect_to login_path
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::SessionDestroyer < CASino::Listener
3
+ class CASino::SessionDestroyerListener < CASino::Listener
4
4
  def ticket_deleted
5
5
  @controller.redirect_to(sessions_path)
6
6
  end
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::SessionOverview < CASino::Listener
3
+ class CASino::SessionOverviewListener < CASino::Listener
4
4
  def user_not_logged_in
5
5
  @controller.redirect_to login_path
6
6
  end
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::TicketValidator < CASino::Listener
3
+ class CASino::TicketValidatorListener < CASino::Listener
4
4
  def validation_failed(xml)
5
5
  @controller.render xml: xml
6
6
  end
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::TwoFactorAuthenticatorActivator < CASino::Listener
3
+ class CASino::TwoFactorAuthenticatorActivatorListener < CASino::Listener
4
4
  def user_not_logged_in
5
5
  @controller.redirect_to login_path
6
6
  end
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::TwoFactorAuthenticatorDestroyer < CASino::Listener
3
+ class CASino::TwoFactorAuthenticatorDestroyerListener < CASino::Listener
4
4
  def user_not_logged_in
5
5
  @controller.redirect_to login_path
6
6
  end
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::TwoFactorAuthenticatorOverview < CASino::Listener
3
+ class CASino::TwoFactorAuthenticatorOverviewListener < CASino::Listener
4
4
  def user_not_logged_in
5
5
  # nothing to do here
6
6
  end
@@ -1,6 +1,6 @@
1
- require 'casino/listener'
1
+ require_relative 'listener'
2
2
 
3
- class CASino::Listener::TwoFactorAuthenticatorRegistrator < CASino::Listener
3
+ class CASino::TwoFactorAuthenticatorRegistratorListener < CASino::Listener
4
4
  def user_not_logged_in
5
5
  @controller.redirect_to login_path
6
6
  end
@@ -0,0 +1,12 @@
1
+ class CASino::LoginTicket < ActiveRecord::Base
2
+ attr_accessible :ticket
3
+ validates :ticket, uniqueness: true
4
+
5
+ def self.cleanup
6
+ self.delete_all(['created_at < ?', CASino.config.login_ticket[:lifetime].seconds.ago])
7
+ end
8
+
9
+ def to_s
10
+ self.ticket
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+
2
+ class CASino::ProxyGrantingTicket < ActiveRecord::Base
3
+ attr_accessible :iou, :ticket, :pgt_url
4
+ validates :ticket, uniqueness: true
5
+ validates :iou, uniqueness: true
6
+ belongs_to :granter, polymorphic: true
7
+ has_many :proxy_tickets, dependent: :destroy
8
+ end
@@ -0,0 +1,25 @@
1
+ require 'addressable/uri'
2
+
3
+ class CASino::ProxyTicket < ActiveRecord::Base
4
+ attr_accessible :ticket, :service
5
+ validates :ticket, uniqueness: true
6
+ belongs_to :proxy_granting_ticket
7
+ has_many :proxy_granting_tickets, as: :granter, dependent: :destroy
8
+
9
+ def self.cleanup_unconsumed
10
+ self.destroy_all(['created_at < ? AND consumed = ?', CASino.config.proxy_ticket[:lifetime_unconsumed].seconds.ago, false])
11
+ end
12
+
13
+ def self.cleanup_consumed
14
+ self.destroy_all(['created_at < ? AND consumed = ?', CASino.config.proxy_ticket[:lifetime_consumed].seconds.ago, true])
15
+ end
16
+
17
+ def expired?
18
+ lifetime = if consumed?
19
+ CASino.config.proxy_ticket[:lifetime_consumed]
20
+ else
21
+ CASino.config.proxy_ticket[:lifetime_unconsumed]
22
+ end
23
+ (Time.now - (self.created_at || Time.now)) > lifetime
24
+ end
25
+ end