devise_cas_authenticatable 1.0.0.alpha1
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/.project +12 -0
 - data/README.md +104 -0
 - data/Rakefile +41 -0
 - data/VERSION +1 -0
 - data/app/controllers/cas_sessions_controller.rb +13 -0
 - data/lib/devise_cas_authenticatable/model.rb +46 -0
 - data/lib/devise_cas_authenticatable/routes.rb +9 -0
 - data/lib/devise_cas_authenticatable/schema.rb +5 -0
 - data/lib/devise_cas_authenticatable/strategy.rb +48 -0
 - data/lib/devise_cas_authenticatable.rb +38 -0
 - data/rails/init.rb +1 -0
 - metadata +102 -0
 
    
        data/.project
    ADDED
    
    | 
         @@ -0,0 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <?xml version="1.0" encoding="UTF-8"?>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <projectDescription>
         
     | 
| 
      
 3 
     | 
    
         
            +
            	<name>devise_cas_authenticatable</name>
         
     | 
| 
      
 4 
     | 
    
         
            +
            	<comment></comment>
         
     | 
| 
      
 5 
     | 
    
         
            +
            	<projects>
         
     | 
| 
      
 6 
     | 
    
         
            +
            	</projects>
         
     | 
| 
      
 7 
     | 
    
         
            +
            	<buildSpec>
         
     | 
| 
      
 8 
     | 
    
         
            +
            	</buildSpec>
         
     | 
| 
      
 9 
     | 
    
         
            +
            	<natures>
         
     | 
| 
      
 10 
     | 
    
         
            +
            		<nature>org.radrails.rails.core.railsnature</nature>
         
     | 
| 
      
 11 
     | 
    
         
            +
            	</natures>
         
     | 
| 
      
 12 
     | 
    
         
            +
            </projectDescription>
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,104 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            devise_cas_authenticatable
         
     | 
| 
      
 2 
     | 
    
         
            +
            ==========================
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            Written by Nat Budin<br/>
         
     | 
| 
      
 5 
     | 
    
         
            +
            Taking a lot of inspiration from [devise_ldap_authenticatable](http://github.com/cschiewek/devise_ldap_authenticatable)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            devise_cas_authenticatable is [CAS](http://www.jasig.org/cas) single sign-on support for
         
     | 
| 
      
 8 
     | 
    
         
            +
            [Devise](http://github.com/plataformatec/devise) applications.  It acts as a replacement for
         
     | 
| 
      
 9 
     | 
    
         
            +
            database_authenticatable.  It builds on [rubycas-client](http://github.com/gunark/rubycas-client)
         
     | 
| 
      
 10 
     | 
    
         
            +
            and should support just about any conformant CAS server (although I have personally tested it
         
     | 
| 
      
 11 
     | 
    
         
            +
            using [rubycas-server](http://github.com/gunark/rubycas-server)).
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            Requirements
         
     | 
| 
      
 14 
     | 
    
         
            +
            ------------
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            - Rails 2.3
         
     | 
| 
      
 17 
     | 
    
         
            +
            - Devise 1.0 (tested on 1.0.6)
         
     | 
| 
      
 18 
     | 
    
         
            +
            - rubycas-client 2.1
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            Installation
         
     | 
| 
      
 21 
     | 
    
         
            +
            ------------
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                gem install --pre devise_cas_authenticatable
         
     | 
| 
      
 24 
     | 
    
         
            +
                
         
     | 
| 
      
 25 
     | 
    
         
            +
            and in your config/environment.rb:
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                config.gem 'devise_cas_authenticatable'
         
     | 
| 
      
 28 
     | 
    
         
            +
                
         
     | 
| 
      
 29 
     | 
    
         
            +
            Setup
         
     | 
| 
      
 30 
     | 
    
         
            +
            -----
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            Once devise\_cas\_authenticatable is installed, add the following to your user model:
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                devise :cas_authenticatable
         
     | 
| 
      
 35 
     | 
    
         
            +
                
         
     | 
| 
      
 36 
     | 
    
         
            +
            You can also add other modules such as token_authenticatable, trackable, etc.  Please do not
         
     | 
| 
      
 37 
     | 
    
         
            +
            add database_authenticatable as this module is intended to replace it.
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            You'll also need to set up the database schema for this:
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                create_table :users do |t|
         
     | 
| 
      
 42 
     | 
    
         
            +
                  t.cas_authenticatable
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            and, optionally, indexes:
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                add_index :username, :unique => true
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            Finally, you'll need to add some configuration to your config/initializers/devise.rb in order
         
     | 
| 
      
 50 
     | 
    
         
            +
            to tell your app how to talk to your CAS server:
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                Devise.setup do |config|
         
     | 
| 
      
 53 
     | 
    
         
            +
                  ...
         
     | 
| 
      
 54 
     | 
    
         
            +
                  config.cas_base_url = "https://cas.myorganization.com"
         
     | 
| 
      
 55 
     | 
    
         
            +
                  
         
     | 
| 
      
 56 
     | 
    
         
            +
                  # you can override these if you need to, but cas_base_url is usually enough
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # config.cas_login_url = "https://cas.myorganization.com/login"
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # config.cas_logout_url = "https://cas.myorganization.com/logout"
         
     | 
| 
      
 59 
     | 
    
         
            +
                  # config.cas_validate_url = "https://cas.myorganization.com/serviceValidate"
         
     | 
| 
      
 60 
     | 
    
         
            +
                  
         
     | 
| 
      
 61 
     | 
    
         
            +
                  # By default, devise_cas_authenticatable will create users.  If you would rather
         
     | 
| 
      
 62 
     | 
    
         
            +
                  # require user records to already exist locally before they can authenticate via
         
     | 
| 
      
 63 
     | 
    
         
            +
                  # CAS, uncomment the following line.
         
     | 
| 
      
 64 
     | 
    
         
            +
                  # config.cas_create_user = false  
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            Extra attributes
         
     | 
| 
      
 68 
     | 
    
         
            +
            ----------------
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            If your CAS server passes along extra attributes you'd like to save in your user records,
         
     | 
| 
      
 71 
     | 
    
         
            +
            using the CAS extra_attributes parameter, you can define a method in your user model called
         
     | 
| 
      
 72 
     | 
    
         
            +
            cas_extra_attributes= to accept these.  For example:
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                class User < ActiveRecord::Base
         
     | 
| 
      
 75 
     | 
    
         
            +
                  devise :cas_authenticatable
         
     | 
| 
      
 76 
     | 
    
         
            +
                  
         
     | 
| 
      
 77 
     | 
    
         
            +
                  def cas_extra_attributes=(extra_attributes)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    extra_attributes.each do |name, value|
         
     | 
| 
      
 79 
     | 
    
         
            +
                      case name.to_sym
         
     | 
| 
      
 80 
     | 
    
         
            +
                      when :fullname
         
     | 
| 
      
 81 
     | 
    
         
            +
                        self.fullname = value
         
     | 
| 
      
 82 
     | 
    
         
            +
                      when :email
         
     | 
| 
      
 83 
     | 
    
         
            +
                        self.email = value
         
     | 
| 
      
 84 
     | 
    
         
            +
                      end
         
     | 
| 
      
 85 
     | 
    
         
            +
                    end
         
     | 
| 
      
 86 
     | 
    
         
            +
                  end
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            See also
         
     | 
| 
      
 90 
     | 
    
         
            +
            --------
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            * [CAS](http://www.jasig.org/cas)
         
     | 
| 
      
 93 
     | 
    
         
            +
            * [rubycas-server](http://github.com/gunark/rubycas-server)
         
     | 
| 
      
 94 
     | 
    
         
            +
            * [rubycas-client](http://github.com/gunark/rubycas-client)
         
     | 
| 
      
 95 
     | 
    
         
            +
            * [Devise](http://github.com/plataformatec/devise)
         
     | 
| 
      
 96 
     | 
    
         
            +
            * [Warden](http://github.com/hassox/warden)
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            TODO
         
     | 
| 
      
 99 
     | 
    
         
            +
            ----
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
            * Implement CAS single sign-off support (maybe via a Rack middleware?)
         
     | 
| 
      
 102 
     | 
    
         
            +
            * Write test suite
         
     | 
| 
      
 103 
     | 
    
         
            +
            * Test on non-ActiveRecord ORMs
         
     | 
| 
      
 104 
     | 
    
         
            +
            * Test on Rails 3/Devise 1.1            
         
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rake'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rake/testtask'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rake/rdoctask'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            desc 'Default: run unit tests.'
         
     | 
| 
      
 6 
     | 
    
         
            +
            task :default => :test
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            desc 'Test the devise_cas_authenticatable plugin.'
         
     | 
| 
      
 9 
     | 
    
         
            +
            Rake::TestTask.new(:test) do |t|
         
     | 
| 
      
 10 
     | 
    
         
            +
              t.libs << 'lib'
         
     | 
| 
      
 11 
     | 
    
         
            +
              t.libs << 'test'
         
     | 
| 
      
 12 
     | 
    
         
            +
              t.pattern = 'test/**/*_test.rb'
         
     | 
| 
      
 13 
     | 
    
         
            +
              t.verbose = true
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            desc 'Generate documentation for the devise_cas_authenticatable plugin.'
         
     | 
| 
      
 17 
     | 
    
         
            +
            Rake::RDocTask.new(:rdoc) do |rdoc|
         
     | 
| 
      
 18 
     | 
    
         
            +
              rdoc.rdoc_dir = 'rdoc'
         
     | 
| 
      
 19 
     | 
    
         
            +
              rdoc.title    = 'devise_cas_authenticatable'
         
     | 
| 
      
 20 
     | 
    
         
            +
              rdoc.options << '--line-numbers' << '--inline-source'
         
     | 
| 
      
 21 
     | 
    
         
            +
              rdoc.rdoc_files.include('README')
         
     | 
| 
      
 22 
     | 
    
         
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            begin
         
     | 
| 
      
 27 
     | 
    
         
            +
              require 'jeweler'
         
     | 
| 
      
 28 
     | 
    
         
            +
              Jeweler::Tasks.new do |gemspec|
         
     | 
| 
      
 29 
     | 
    
         
            +
                gemspec.name = "devise_cas_authenticatable"
         
     | 
| 
      
 30 
     | 
    
         
            +
                gemspec.summary = "CAS authentication module for Devise"
         
     | 
| 
      
 31 
     | 
    
         
            +
                gemspec.description = "CAS authentication module for Devise"
         
     | 
| 
      
 32 
     | 
    
         
            +
                gemspec.email = "natbudin@gmail.com"
         
     | 
| 
      
 33 
     | 
    
         
            +
                gemspec.homepage = "http://github.com/nbudin/devise_cas_authenticatable"
         
     | 
| 
      
 34 
     | 
    
         
            +
                gemspec.authors = ["Nat Budin"]
         
     | 
| 
      
 35 
     | 
    
         
            +
                gemspec.add_runtime_dependency "devise", "~> 1.0.6"
         
     | 
| 
      
 36 
     | 
    
         
            +
                gemspec.add_runtime_dependency "rubycas-client", "~> 2.1.0"
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
              Jeweler::GemcutterTasks.new
         
     | 
| 
      
 39 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 40 
     | 
    
         
            +
              puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
    
        data/VERSION
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            1.0.0.alpha1
         
     | 
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CasSessionsController < ApplicationController
         
     | 
| 
      
 2 
     | 
    
         
            +
              prepend_before_filter :require_no_authentication, :only => [:login]
         
     | 
| 
      
 3 
     | 
    
         
            +
              include Devise::Controllers::InternalHelpers
         
     | 
| 
      
 4 
     | 
    
         
            +
              
         
     | 
| 
      
 5 
     | 
    
         
            +
              def destroy
         
     | 
| 
      
 6 
     | 
    
         
            +
                sign_out(resource_name)
         
     | 
| 
      
 7 
     | 
    
         
            +
                destination = request.protocol
         
     | 
| 
      
 8 
     | 
    
         
            +
                destination << request.host
         
     | 
| 
      
 9 
     | 
    
         
            +
                destination << ":#{request.port.to_s}" unless request.port == 80
         
     | 
| 
      
 10 
     | 
    
         
            +
                destination << after_sign_out_path_for(resource_name)
         
     | 
| 
      
 11 
     | 
    
         
            +
                redirect_to(::Devise.cas_client.logout_url(destination))
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,46 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Devise
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Models
         
     | 
| 
      
 3 
     | 
    
         
            +
                module CasAuthenticatable
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def self.included(base)
         
     | 
| 
      
 5 
     | 
    
         
            +
                    base.extend ClassMethods
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
      
 8 
     | 
    
         
            +
                  module ClassMethods
         
     | 
| 
      
 9 
     | 
    
         
            +
                    def authenticate_with_cas_ticket(ticket)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      ::Devise.cas_client.validate_service_ticket(ticket) unless ticket.has_been_validated?
         
     | 
| 
      
 11 
     | 
    
         
            +
                      
         
     | 
| 
      
 12 
     | 
    
         
            +
                      if ticket.is_valid?
         
     | 
| 
      
 13 
     | 
    
         
            +
                        conditions = {:username => ticket.response.user}
         
     | 
| 
      
 14 
     | 
    
         
            +
                        puts conditions.inspect
         
     | 
| 
      
 15 
     | 
    
         
            +
                        
         
     | 
| 
      
 16 
     | 
    
         
            +
                        resource = find_for_cas_authentication(conditions)
         
     | 
| 
      
 17 
     | 
    
         
            +
                        resource = new(conditions) if (resource.nil? and ::Devise.cas_create_user)
         
     | 
| 
      
 18 
     | 
    
         
            +
                        return nil unless resource
         
     | 
| 
      
 19 
     | 
    
         
            +
                        
         
     | 
| 
      
 20 
     | 
    
         
            +
                        if resource.new_record?
         
     | 
| 
      
 21 
     | 
    
         
            +
                          if resource.respond_to? :cas_extra_attributes=
         
     | 
| 
      
 22 
     | 
    
         
            +
                            resource.cas_extra_attributes = ticket.response.extra_attributes
         
     | 
| 
      
 23 
     | 
    
         
            +
                          end
         
     | 
| 
      
 24 
     | 
    
         
            +
                          
         
     | 
| 
      
 25 
     | 
    
         
            +
                          create(conditions)
         
     | 
| 
      
 26 
     | 
    
         
            +
                        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
         
     | 
| 
      
 32 
     | 
    
         
            +
                          end
         
     | 
| 
      
 33 
     | 
    
         
            +
                          
         
     | 
| 
      
 34 
     | 
    
         
            +
                          resource
         
     | 
| 
      
 35 
     | 
    
         
            +
                        end
         
     | 
| 
      
 36 
     | 
    
         
            +
                      end
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                    
         
     | 
| 
      
 39 
     | 
    
         
            +
                    protected
         
     | 
| 
      
 40 
     | 
    
         
            +
                    def find_for_cas_authentication(conditions)
         
     | 
| 
      
 41 
     | 
    
         
            +
                      find(:first, :conditions => conditions)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ActionController::Routing::RouteSet::Mapper.class_eval do
         
     | 
| 
      
 2 
     | 
    
         
            +
              protected
         
     | 
| 
      
 3 
     | 
    
         
            +
              
         
     | 
| 
      
 4 
     | 
    
         
            +
              def cas_authenticatable(routes, mapping)
         
     | 
| 
      
 5 
     | 
    
         
            +
                routes.with_options(:controller => 'cas_sessions', :name_prefix => nil) do |session|
         
     | 
| 
      
 6 
     | 
    
         
            +
                  session.send(:"destroy_#{mapping.name}_session", mapping.path_names[:sign_out], :action => 'destroy', :conditions => { :method => :get })
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'devise/strategies/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Devise
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Strategies
         
     | 
| 
      
 5 
     | 
    
         
            +
                class CasAuthenticatable < Base
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def valid?
         
     | 
| 
      
 7 
     | 
    
         
            +
                    mapping.to.respond_to?(:authenticate_with_cas_ticket)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
                  
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def authenticate!
         
     | 
| 
      
 11 
     | 
    
         
            +
                    ticket = read_ticket(params)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    if ticket
         
     | 
| 
      
 13 
     | 
    
         
            +
                      if resource = mapping.to.authenticate_with_cas_ticket(ticket)
         
     | 
| 
      
 14 
     | 
    
         
            +
                        success!(resource)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      else
         
     | 
| 
      
 16 
     | 
    
         
            +
                        fail(:invalid)
         
     | 
| 
      
 17 
     | 
    
         
            +
                      end
         
     | 
| 
      
 18 
     | 
    
         
            +
                    elsif returning_from_cas?
         
     | 
| 
      
 19 
     | 
    
         
            +
                      fail(:invalid)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    else
         
     | 
| 
      
 21 
     | 
    
         
            +
                      redirect!(login_url)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  
         
     | 
| 
      
 25 
     | 
    
         
            +
                  protected
         
     | 
| 
      
 26 
     | 
    
         
            +
                  def returning_from_cas?
         
     | 
| 
      
 27 
     | 
    
         
            +
                    request.referer =~ /^#{::Devise.cas_client.cas_base_url}/
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                 
         
     | 
| 
      
 30 
     | 
    
         
            +
                  def login_url
         
     | 
| 
      
 31 
     | 
    
         
            +
                    ::Devise.cas_client.add_service_to_login_url(request.url)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
              
         
     | 
| 
      
 34 
     | 
    
         
            +
                  def read_ticket(params)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    ticket = params[:ticket]
         
     | 
| 
      
 36 
     | 
    
         
            +
                    return nil unless ticket
         
     | 
| 
      
 37 
     | 
    
         
            +
                  
         
     | 
| 
      
 38 
     | 
    
         
            +
                    if ticket =~ /^PT-/
         
     | 
| 
      
 39 
     | 
    
         
            +
                      ::CASClient::ProxyTicket.new(ticket, request.url, params[:renew])
         
     | 
| 
      
 40 
     | 
    
         
            +
                    else
         
     | 
| 
      
 41 
     | 
    
         
            +
                      ::CASClient::ServiceTicket.new(ticket, request.url, params[:renew])
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            Warden::Strategies.add(:cas_authenticatable, Devise::Strategies::CasAuthenticatable)
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'devise'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'devise_cas_authenticatable/schema'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'devise_cas_authenticatable/routes'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'devise_cas_authenticatable/strategy'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            require 'rubycas-client'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            module Devise
         
     | 
| 
      
 10 
     | 
    
         
            +
              mattr_accessor :cas_base_url
         
     | 
| 
      
 11 
     | 
    
         
            +
              @@cas_base_url = nil
         
     | 
| 
      
 12 
     | 
    
         
            +
              
         
     | 
| 
      
 13 
     | 
    
         
            +
              mattr_accessor :cas_login_url
         
     | 
| 
      
 14 
     | 
    
         
            +
              @@cas_login_url = nil
         
     | 
| 
      
 15 
     | 
    
         
            +
              
         
     | 
| 
      
 16 
     | 
    
         
            +
              mattr_accessor :cas_logout_url
         
     | 
| 
      
 17 
     | 
    
         
            +
              @@cas_logout_url = nil
         
     | 
| 
      
 18 
     | 
    
         
            +
              
         
     | 
| 
      
 19 
     | 
    
         
            +
              mattr_accessor :cas_validate_url
         
     | 
| 
      
 20 
     | 
    
         
            +
              @@cas_validate_url = nil
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              mattr_accessor :cas_create_user
         
     | 
| 
      
 23 
     | 
    
         
            +
              @@cas_create_user = true
         
     | 
| 
      
 24 
     | 
    
         
            +
              
         
     | 
| 
      
 25 
     | 
    
         
            +
              def self.cas_client
         
     | 
| 
      
 26 
     | 
    
         
            +
                @@cas_client ||= CASClient::Client.new(
         
     | 
| 
      
 27 
     | 
    
         
            +
                    :cas_base_url => @@cas_base_url,
         
     | 
| 
      
 28 
     | 
    
         
            +
                    :login_url => @@cas_login_url,
         
     | 
| 
      
 29 
     | 
    
         
            +
                    :logout_url => @@cas_logout_url,
         
     | 
| 
      
 30 
     | 
    
         
            +
                    :validate_url => @@cas_validate_url
         
     | 
| 
      
 31 
     | 
    
         
            +
                  )
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            Devise.add_module(:cas_authenticatable,
         
     | 
| 
      
 36 
     | 
    
         
            +
              :strategy => true,
         
     | 
| 
      
 37 
     | 
    
         
            +
              :controller => :cas_sessions,
         
     | 
| 
      
 38 
     | 
    
         
            +
              :model => 'devise_cas_authenticatable/model')
         
     | 
    
        data/rails/init.rb
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "devise_cas_authenticatable"
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,102 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: devise_cas_authenticatable
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 4 
     | 
    
         
            +
              prerelease: true
         
     | 
| 
      
 5 
     | 
    
         
            +
              segments: 
         
     | 
| 
      
 6 
     | 
    
         
            +
              - 1
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 9 
     | 
    
         
            +
              - alpha1
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 1.0.0.alpha1
         
     | 
| 
      
 11 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 12 
     | 
    
         
            +
            authors: 
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Nat Budin
         
     | 
| 
      
 14 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 15 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 16 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2010-05-06 00:00:00 -04:00
         
     | 
| 
      
 19 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 20 
     | 
    
         
            +
            dependencies: 
         
     | 
| 
      
 21 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 22 
     | 
    
         
            +
              name: devise
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 24 
     | 
    
         
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 25 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 26 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 27 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 28 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 29 
     | 
    
         
            +
                    - 1
         
     | 
| 
      
 30 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 31 
     | 
    
         
            +
                    - 6
         
     | 
| 
      
 32 
     | 
    
         
            +
                    version: 1.0.6
         
     | 
| 
      
 33 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 34 
     | 
    
         
            +
              version_requirements: *id001
         
     | 
| 
      
 35 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 36 
     | 
    
         
            +
              name: rubycas-client
         
     | 
| 
      
 37 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 39 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 40 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 41 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 42 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 43 
     | 
    
         
            +
                    - 2
         
     | 
| 
      
 44 
     | 
    
         
            +
                    - 1
         
     | 
| 
      
 45 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 46 
     | 
    
         
            +
                    version: 2.1.0
         
     | 
| 
      
 47 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 48 
     | 
    
         
            +
              version_requirements: *id002
         
     | 
| 
      
 49 
     | 
    
         
            +
            description: CAS authentication module for Devise
         
     | 
| 
      
 50 
     | 
    
         
            +
            email: natbudin@gmail.com
         
     | 
| 
      
 51 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            extra_rdoc_files: 
         
     | 
| 
      
 56 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 57 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 58 
     | 
    
         
            +
            - .project
         
     | 
| 
      
 59 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 60 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 61 
     | 
    
         
            +
            - VERSION
         
     | 
| 
      
 62 
     | 
    
         
            +
            - app/controllers/cas_sessions_controller.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/devise_cas_authenticatable.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/devise_cas_authenticatable/model.rb
         
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/devise_cas_authenticatable/routes.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/devise_cas_authenticatable/schema.rb
         
     | 
| 
      
 67 
     | 
    
         
            +
            - lib/devise_cas_authenticatable/strategy.rb
         
     | 
| 
      
 68 
     | 
    
         
            +
            - rails/init.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            has_rdoc: true
         
     | 
| 
      
 70 
     | 
    
         
            +
            homepage: http://github.com/nbudin/devise_cas_authenticatable
         
     | 
| 
      
 71 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 74 
     | 
    
         
            +
            rdoc_options: 
         
     | 
| 
      
 75 
     | 
    
         
            +
            - --charset=UTF-8
         
     | 
| 
      
 76 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 77 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 78 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 79 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 80 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 81 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 82 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 83 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 84 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 85 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 86 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 87 
     | 
    
         
            +
              - - ">"
         
     | 
| 
      
 88 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 89 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 90 
     | 
    
         
            +
                  - 1
         
     | 
| 
      
 91 
     | 
    
         
            +
                  - 3
         
     | 
| 
      
 92 
     | 
    
         
            +
                  - 1
         
     | 
| 
      
 93 
     | 
    
         
            +
                  version: 1.3.1
         
     | 
| 
      
 94 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 97 
     | 
    
         
            +
            rubygems_version: 1.3.6
         
     | 
| 
      
 98 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 99 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 100 
     | 
    
         
            +
            summary: CAS authentication module for Devise
         
     | 
| 
      
 101 
     | 
    
         
            +
            test_files: []
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     |