devise_cas_authenticatable 1.0.0.alpha1 → 1.0.0.alpha2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0.alpha1
1
+ 1.0.0.alpha2
@@ -1,7 +1,17 @@
1
1
  class CasSessionsController < ApplicationController
2
- prepend_before_filter :require_no_authentication, :only => [:login]
3
2
  include Devise::Controllers::InternalHelpers
4
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
+
5
15
  def destroy
6
16
  sign_out(resource_name)
7
17
  destination = request.protocol
@@ -0,0 +1,55 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{devise_cas_authenticatable}
8
+ s.version = "1.0.0.alpha2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Nat Budin"]
12
+ s.date = %q{2010-05-06}
13
+ s.description = %q{CAS authentication module for Devise}
14
+ s.email = %q{natbudin@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ ".project",
20
+ "README.md",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "app/controllers/cas_sessions_controller.rb",
24
+ "devise_cas_authenticatable.gemspec",
25
+ "lib/devise_cas_authenticatable.rb",
26
+ "lib/devise_cas_authenticatable/exceptions.rb",
27
+ "lib/devise_cas_authenticatable/model.rb",
28
+ "lib/devise_cas_authenticatable/routes.rb",
29
+ "lib/devise_cas_authenticatable/schema.rb",
30
+ "lib/devise_cas_authenticatable/strategy.rb",
31
+ "rails/init.rb"
32
+ ]
33
+ s.homepage = %q{http://github.com/nbudin/devise_cas_authenticatable}
34
+ s.rdoc_options = ["--charset=UTF-8"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = %q{1.3.6}
37
+ s.summary = %q{CAS authentication module for Devise}
38
+
39
+ if s.respond_to? :specification_version then
40
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
41
+ s.specification_version = 3
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"])
45
+ s.add_runtime_dependency(%q<rubycas-client>, ["~> 2.1.0"])
46
+ else
47
+ s.add_dependency(%q<devise>, ["~> 1.0.6"])
48
+ s.add_dependency(%q<rubycas-client>, ["~> 2.1.0"])
49
+ end
50
+ else
51
+ s.add_dependency(%q<devise>, ["~> 1.0.6"])
52
+ s.add_dependency(%q<rubycas-client>, ["~> 2.1.0"])
53
+ end
54
+ end
55
+
@@ -0,0 +1,8 @@
1
+ class InvalidCasTicketException < Exception
2
+ attr_reader :ticket
3
+
4
+ def initialize(ticket, msg=nil)
5
+ super(msg)
6
+ @ticket = ticket
7
+ end
8
+ end
@@ -4,12 +4,13 @@ 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}"
13
14
  conditions = {:username => ticket.response.user}
14
15
  puts conditions.inspect
15
16
 
@@ -18,27 +19,30 @@ module Devise
18
19
  return nil unless resource
19
20
 
20
21
  if resource.new_record?
22
+ logger.debug "Creating new user record"
21
23
  if resource.respond_to? :cas_extra_attributes=
22
24
  resource.cas_extra_attributes = ticket.response.extra_attributes
23
25
  end
24
26
 
25
27
  create(conditions)
26
28
  else
27
- if ::Devise.cas_update_user
28
- if resource.respond_to? :cas_extra_attributes=
29
- resource.cas_extra_attributes = ticket.response.extra_attributes
30
- resource.save
31
- end
29
+ if resource.respond_to? :cas_extra_attributes=
30
+ logger.debug "Updating existing user record"
31
+ resource.cas_extra_attributes = ticket.response.extra_attributes
32
+ resource.save
32
33
  end
33
34
 
34
35
  resource
35
36
  end
37
+ else
38
+ logger.debug "Ticket is invalid"
39
+ return nil
36
40
  end
37
41
  end
38
42
 
39
43
  protected
40
44
  def find_for_cas_authentication(conditions)
41
- find(:first, :conditions => conditions)
45
+ self.find(:first, :conditions => conditions)
42
46
  end
43
47
  end
44
48
  end
@@ -3,6 +3,8 @@ ActionController::Routing::RouteSet::Mapper.class_eval do
3
3
 
4
4
  def cas_authenticatable(routes, mapping)
5
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})
6
8
  session.send(:"destroy_#{mapping.name}_session", mapping.path_names[:sign_out], :action => 'destroy', :conditions => { :method => :get })
7
9
  end
8
10
  end
@@ -9,6 +9,7 @@ module Devise
9
9
 
10
10
  def authenticate!
11
11
  ticket = read_ticket(params)
12
+ RAILS_DEFAULT_LOGGER.debug "Received CAS ticket: #{ticket.inspect}"
12
13
  if ticket
13
14
  if resource = mapping.to.authenticate_with_cas_ticket(ticket)
14
15
  success!(resource)
@@ -26,9 +27,16 @@ module Devise
26
27
  def returning_from_cas?
27
28
  request.referer =~ /^#{::Devise.cas_client.cas_base_url}/
28
29
  end
29
-
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
+
30
38
  def login_url
31
- ::Devise.cas_client.add_service_to_login_url(request.url)
39
+ ::Devise.cas_client.add_service_to_login_url(service_url)
32
40
  end
33
41
 
34
42
  def read_ticket(params)
@@ -36,9 +44,9 @@ module Devise
36
44
  return nil unless ticket
37
45
 
38
46
  if ticket =~ /^PT-/
39
- ::CASClient::ProxyTicket.new(ticket, request.url, params[:renew])
47
+ ::CASClient::ProxyTicket.new(ticket, service_url, params[:renew])
40
48
  else
41
- ::CASClient::ServiceTicket.new(ticket, request.url, params[:renew])
49
+ ::CASClient::ServiceTicket.new(ticket, service_url, params[:renew])
42
50
  end
43
51
  end
44
52
  end
@@ -3,6 +3,7 @@ require 'devise'
3
3
  require 'devise_cas_authenticatable/schema'
4
4
  require 'devise_cas_authenticatable/routes'
5
5
  require 'devise_cas_authenticatable/strategy'
6
+ require 'devise_cas_authenticatable/exceptions'
6
7
 
7
8
  require 'rubycas-client'
8
9
 
metadata CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
6
6
  - 1
7
7
  - 0
8
8
  - 0
9
- - alpha1
10
- version: 1.0.0.alpha1
9
+ - alpha2
10
+ version: 1.0.0.alpha2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nat Budin
@@ -60,7 +60,9 @@ files:
60
60
  - Rakefile
61
61
  - VERSION
62
62
  - app/controllers/cas_sessions_controller.rb
63
+ - devise_cas_authenticatable.gemspec
63
64
  - lib/devise_cas_authenticatable.rb
65
+ - lib/devise_cas_authenticatable/exceptions.rb
64
66
  - lib/devise_cas_authenticatable/model.rb
65
67
  - lib/devise_cas_authenticatable/routes.rb
66
68
  - lib/devise_cas_authenticatable/schema.rb