devise_cas_authenticatable 1.0.0.alpha1 → 1.0.0.alpha2

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/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