devise_cas_authenticatable 1.0.0.alpha2 → 1.0.0.alpha3

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.
data/README.md CHANGED
@@ -13,18 +13,28 @@ using [rubycas-server](http://github.com/gunark/rubycas-server)).
13
13
  Requirements
14
14
  ------------
15
15
 
16
- - Rails 2.3
17
- - Devise 1.0 (tested on 1.0.6)
18
- - rubycas-client 2.1
16
+ - Rails 2.3 or 3.0
17
+ - Devise 1.0 (for Rails 2.3) or 1.1 (for Rails 3.0)
18
+ - rubycas-client
19
19
 
20
20
  Installation
21
21
  ------------
22
22
 
23
23
  gem install --pre devise_cas_authenticatable
24
24
 
25
- and in your config/environment.rb:
25
+ and in your config/environment.rb (on Rails 2.3):
26
26
 
27
27
  config.gem 'devise_cas_authenticatable'
28
+
29
+ or Gemfile (Rails 3.0):
30
+
31
+ gem 'devise_cas_authenticatable'
32
+
33
+ Example
34
+ -------
35
+
36
+ I've modified the devise_example application to work with this gem. You can find the results
37
+ [here](http://github.com/nbudin/devise_cas_example).
28
38
 
29
39
  Setup
30
40
  -----
@@ -101,4 +111,3 @@ TODO
101
111
  * Implement CAS single sign-off support (maybe via a Rack middleware?)
102
112
  * Write test suite
103
113
  * Test on non-ActiveRecord ORMs
104
- * Test on Rails 3/Devise 1.1
data/Rakefile CHANGED
@@ -32,10 +32,10 @@ begin
32
32
  gemspec.email = "natbudin@gmail.com"
33
33
  gemspec.homepage = "http://github.com/nbudin/devise_cas_authenticatable"
34
34
  gemspec.authors = ["Nat Budin"]
35
- gemspec.add_runtime_dependency "devise", "~> 1.0.6"
35
+ gemspec.add_runtime_dependency "devise", ">= 1.0.6"
36
36
  gemspec.add_runtime_dependency "rubycas-client", "~> 2.1.0"
37
37
  end
38
38
  Jeweler::GemcutterTasks.new
39
39
  rescue LoadError
40
40
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
41
- end
41
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0.alpha2
1
+ 1.0.0.alpha3
@@ -0,0 +1,18 @@
1
+ class Devise::CasSessionsController < Devise::SessionsController
2
+ def service
3
+ if signed_in?(resource_name)
4
+ redirect_to after_sign_in_path_for(resource_name)
5
+ else
6
+ redirect_to root_url
7
+ end
8
+ end
9
+
10
+ def destroy
11
+ sign_out(resource_name)
12
+ destination = request.protocol
13
+ destination << request.host
14
+ destination << ":#{request.port.to_s}" unless request.port == 80
15
+ destination << after_sign_out_path_for(resource_name)
16
+ redirect_to(::Devise.cas_client.logout_url(destination))
17
+ end
18
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{devise_cas_authenticatable}
8
- s.version = "1.0.0.alpha2"
8
+ s.version = "1.0.0.alpha3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nat Budin"]
12
- s.date = %q{2010-05-06}
12
+ s.date = %q{2010-08-27}
13
13
  s.description = %q{CAS authentication module for Devise}
14
14
  s.email = %q{natbudin@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  "README.md",
21
21
  "Rakefile",
22
22
  "VERSION",
23
- "app/controllers/cas_sessions_controller.rb",
23
+ "app/controllers/devise/cas_sessions_controller.rb",
24
24
  "devise_cas_authenticatable.gemspec",
25
25
  "lib/devise_cas_authenticatable.rb",
26
26
  "lib/devise_cas_authenticatable/exceptions.rb",
@@ -33,22 +33,22 @@ Gem::Specification.new do |s|
33
33
  s.homepage = %q{http://github.com/nbudin/devise_cas_authenticatable}
34
34
  s.rdoc_options = ["--charset=UTF-8"]
35
35
  s.require_paths = ["lib"]
36
- s.rubygems_version = %q{1.3.6}
36
+ s.rubygems_version = %q{1.3.7}
37
37
  s.summary = %q{CAS authentication module for Devise}
38
38
 
39
39
  if s.respond_to? :specification_version then
40
40
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
41
41
  s.specification_version = 3
42
42
 
43
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
44
- s.add_runtime_dependency(%q<devise>, ["~> 1.0.6"])
43
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<devise>, [">= 1.0.6"])
45
45
  s.add_runtime_dependency(%q<rubycas-client>, ["~> 2.1.0"])
46
46
  else
47
- s.add_dependency(%q<devise>, ["~> 1.0.6"])
47
+ s.add_dependency(%q<devise>, [">= 1.0.6"])
48
48
  s.add_dependency(%q<rubycas-client>, ["~> 2.1.0"])
49
49
  end
50
50
  else
51
- s.add_dependency(%q<devise>, ["~> 1.0.6"])
51
+ s.add_dependency(%q<devise>, [">= 1.0.6"])
52
52
  s.add_dependency(%q<rubycas-client>, ["~> 2.1.0"])
53
53
  end
54
54
  end
@@ -7,7 +7,18 @@ require 'devise_cas_authenticatable/exceptions'
7
7
 
8
8
  require 'rubycas-client'
9
9
 
10
- module Devise
10
+ # Register as a Rails engine if Rails::Engine exists
11
+ begin
12
+ Rails::Engine
13
+ rescue
14
+ else
15
+ module DeviseCasAuthenticatable
16
+ class Engine < Rails::Engine
17
+ end
18
+ end
19
+ end
20
+
21
+ module Devise
11
22
  mattr_accessor :cas_base_url
12
23
  @@cas_base_url = nil
13
24
 
@@ -36,4 +47,5 @@ end
36
47
  Devise.add_module(:cas_authenticatable,
37
48
  :strategy => true,
38
49
  :controller => :cas_sessions,
50
+ :route => :cas_authenticatable,
39
51
  :model => 'devise_cas_authenticatable/model')
@@ -4,22 +4,25 @@ module Devise
4
4
  def self.included(base)
5
5
  base.extend ClassMethods
6
6
  end
7
-
7
+
8
8
  module ClassMethods
9
9
  def authenticate_with_cas_ticket(ticket)
10
10
  ::Devise.cas_client.validate_service_ticket(ticket) unless ticket.has_been_validated?
11
11
 
12
12
  if ticket.is_valid?
13
- logger.debug "Ticket is valid and is for user #{ticket.response.user}"
14
13
  conditions = {:username => ticket.response.user}
15
- puts conditions.inspect
16
14
 
17
- resource = find_for_cas_authentication(conditions)
15
+ # We don't want to override Devise 1.1's find_for_authentication
16
+ resource = if respond_to?(:find_for_authentication)
17
+ find_for_authentication(conditions)
18
+ else
19
+ find(:first, :conditions => conditions)
20
+ end
21
+
18
22
  resource = new(conditions) if (resource.nil? and ::Devise.cas_create_user)
19
23
  return nil unless resource
20
24
 
21
25
  if resource.new_record?
22
- logger.debug "Creating new user record"
23
26
  if resource.respond_to? :cas_extra_attributes=
24
27
  resource.cas_extra_attributes = ticket.response.extra_attributes
25
28
  end
@@ -27,23 +30,14 @@ module Devise
27
30
  create(conditions)
28
31
  else
29
32
  if resource.respond_to? :cas_extra_attributes=
30
- logger.debug "Updating existing user record"
31
33
  resource.cas_extra_attributes = ticket.response.extra_attributes
32
34
  resource.save
33
35
  end
34
36
 
35
37
  resource
36
38
  end
37
- else
38
- logger.debug "Ticket is invalid"
39
- return nil
40
39
  end
41
40
  end
42
-
43
- protected
44
- def find_for_cas_authentication(conditions)
45
- self.find(:first, :conditions => conditions)
46
- end
47
41
  end
48
42
  end
49
43
  end
@@ -1,11 +1,33 @@
1
- ActionController::Routing::RouteSet::Mapper.class_eval do
2
- protected
1
+ if ActionController::Routing.name =~ /ActionDispatch/
2
+ # Rails 3
3
3
 
4
- def cas_authenticatable(routes, mapping)
5
- routes.with_options(:controller => 'cas_sessions', :name_prefix => nil) do |session|
6
- session.send(:"new_#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => {:method => :get})
7
- session.send(:"#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => {:method => :post})
8
- session.send(:"destroy_#{mapping.name}_session", mapping.path_names[:sign_out], :action => 'destroy', :conditions => { :method => :get })
4
+ ActionDispatch::Routing::Mapper.class_eval do
5
+ protected
6
+
7
+ def devise_cas_authenticatable(mapping, controllers)
8
+ scope :controller => controllers[:cas_sessions], :as => :session do
9
+ # service endpoint for CAS server
10
+ get "/", :to => "#{controllers[:cas_sessions]}#service"
11
+
12
+ get :new, :path => mapping.path_names[:sign_in], :to => "#{controllers[:cas_sessions]}#create"
13
+ get :create, :path => mapping.path_names[:sign_in], :as => ""
14
+ get :destroy, :path => mapping.path_names[:sign_out]
15
+ end
16
+ end
17
+ end
18
+ else
19
+ # Rails 2
20
+
21
+ ActionController::Routing::RouteSet::Mapper.class_eval do
22
+ protected
23
+
24
+ def cas_authenticatable(routes, mapping)
25
+ routes.with_options(:controller => 'devise/cas_sessions', :name_prefix => nil) do |session|
26
+ session.connect('/', :action => 'service', :conditions => {:method => :get})
27
+ session.send(:"new_#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => {:method => :get})
28
+ session.send(:"#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => {:method => :post})
29
+ session.send(:"destroy_#{mapping.name}_session", mapping.path_names[:sign_out], :action => 'destroy', :conditions => { :method => :get })
30
+ end
9
31
  end
10
32
  end
11
- end
33
+ end
@@ -1,5 +1,13 @@
1
- Devise::Schema.class_eval do
2
- def cas_authenticatable
3
- apply_schema :username, String
1
+ require 'devise/schema'
2
+
3
+ module Devise
4
+ module Schema
5
+ def cas_authenticatable
6
+ if respond_to? :apply_devise_schema
7
+ apply_devise_schema :username, String
8
+ else
9
+ apply_schema :username, String
10
+ end
11
+ end
4
12
  end
5
- end
13
+ end
@@ -9,7 +9,6 @@ module Devise
9
9
 
10
10
  def authenticate!
11
11
  ticket = read_ticket(params)
12
- RAILS_DEFAULT_LOGGER.debug "Received CAS ticket: #{ticket.inspect}"
13
12
  if ticket
14
13
  if resource = mapping.to.authenticate_with_cas_ticket(ticket)
15
14
  success!(resource)
@@ -27,22 +26,26 @@ module Devise
27
26
  def returning_from_cas?
28
27
  request.referer =~ /^#{::Devise.cas_client.cas_base_url}/
29
28
  end
30
-
31
- def service_url
32
- url = URI.parse(request.url)
33
- url.path = "#{mapping.parsed_path}/#{mapping.path_names[:sign_in]}"
34
- url.query = nil
35
- url.to_s
36
- end
37
-
29
+
38
30
  def login_url
39
31
  ::Devise.cas_client.add_service_to_login_url(service_url)
40
32
  end
33
+
34
+ def service_url
35
+ u = URI.parse(request.url)
36
+ u.query = nil
37
+ u.path = if mapping.respond_to?(:fullpath)
38
+ mapping.fullpath
39
+ else
40
+ mapping.raw_path
41
+ end
42
+ u.to_s
43
+ end
41
44
 
42
45
  def read_ticket(params)
43
46
  ticket = params[:ticket]
44
47
  return nil unless ticket
45
-
48
+
46
49
  if ticket =~ /^PT-/
47
50
  ::CASClient::ProxyTicket.new(ticket, service_url, params[:renew])
48
51
  else
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_cas_authenticatable
3
3
  version: !ruby/object:Gem::Version
4
+ hash: -1710980575
4
5
  prerelease: true
5
6
  segments:
6
7
  - 1
7
8
  - 0
8
9
  - 0
9
- - alpha2
10
- version: 1.0.0.alpha2
10
+ - alpha3
11
+ version: 1.0.0.alpha3
11
12
  platform: ruby
12
13
  authors:
13
14
  - Nat Budin
@@ -15,16 +16,18 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-05-06 00:00:00 -04:00
19
+ date: 2010-08-27 00:00:00 -04:00
19
20
  default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
23
  name: devise
23
24
  prerelease: false
24
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
25
27
  requirements:
26
- - - ~>
28
+ - - ">="
27
29
  - !ruby/object:Gem::Version
30
+ hash: 27
28
31
  segments:
29
32
  - 1
30
33
  - 0
@@ -36,9 +39,11 @@ dependencies:
36
39
  name: rubycas-client
37
40
  prerelease: false
38
41
  requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
39
43
  requirements:
40
44
  - - ~>
41
45
  - !ruby/object:Gem::Version
46
+ hash: 11
42
47
  segments:
43
48
  - 2
44
49
  - 1
@@ -59,7 +64,7 @@ files:
59
64
  - README.md
60
65
  - Rakefile
61
66
  - VERSION
62
- - app/controllers/cas_sessions_controller.rb
67
+ - app/controllers/devise/cas_sessions_controller.rb
63
68
  - devise_cas_authenticatable.gemspec
64
69
  - lib/devise_cas_authenticatable.rb
65
70
  - lib/devise_cas_authenticatable/exceptions.rb
@@ -78,16 +83,20 @@ rdoc_options:
78
83
  require_paths:
79
84
  - lib
80
85
  required_ruby_version: !ruby/object:Gem::Requirement
86
+ none: false
81
87
  requirements:
82
88
  - - ">="
83
89
  - !ruby/object:Gem::Version
90
+ hash: 3
84
91
  segments:
85
92
  - 0
86
93
  version: "0"
87
94
  required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
88
96
  requirements:
89
97
  - - ">"
90
98
  - !ruby/object:Gem::Version
99
+ hash: 25
91
100
  segments:
92
101
  - 1
93
102
  - 3
@@ -96,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
105
  requirements: []
97
106
 
98
107
  rubyforge_project:
99
- rubygems_version: 1.3.6
108
+ rubygems_version: 1.3.7
100
109
  signing_key:
101
110
  specification_version: 3
102
111
  summary: CAS authentication module for Devise
@@ -1,23 +0,0 @@
1
- class CasSessionsController < ApplicationController
2
- include Devise::Controllers::InternalHelpers
3
-
4
- def create
5
- resource = authenticate(resource_name)
6
- if resource
7
- sign_in_and_redirect(resource)
8
- elsif warden.result == :redirect
9
- throw :warden, :scope => resource_name
10
- else
11
- throw InvalidCasTicketException.new(params[:ticket])
12
- end
13
- end
14
-
15
- def destroy
16
- sign_out(resource_name)
17
- destination = request.protocol
18
- destination << request.host
19
- destination << ":#{request.port.to_s}" unless request.port == 80
20
- destination << after_sign_out_path_for(resource_name)
21
- redirect_to(::Devise.cas_client.logout_url(destination))
22
- end
23
- end