Sha256: eeb6acf6587a21b4038d9da5867e55ba67c1d023241b7102640ce82aea27e17d

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 KB

Contents

require 'omniauth'

module OmniAuth
  module Strategies
    class Crowd
      include OmniAuth::Strategy
    
      autoload :Configuration, 'omniauth/strategies/crowd/configuration'
      autoload :CrowdValidator, 'omniauth/strategies/crowd/crowd_validator'
      def initialize(app, options = {}, &block)
        super(app, {:name=> :crowd}.merge(options), &block)
        @configuration = OmniAuth::Strategies::Crowd::Configuration.new(options)
      end
      
      protected

      def request_phase
        if env['REQUEST_METHOD'] == 'GET'
          get_credentials
        else
          session['omniauth.crowd'] = {'username' => request['username'], 'password' => request['password']}
          redirect callback_url
        end
      end
    
      def get_credentials
        OmniAuth::Form.build(:title => (options[:title] || "Crowd Authentication")) do
          text_field 'Login', 'username'
          password_field 'Password', 'password'
        end.to_response
      end
    
      def callback_phase 
        creds = session.delete 'omniauth.crowd'
        return fail!(:no_credentials) unless creds
        validator = CrowdValidator.new(@configuration, creds['username'], creds['password'])
        @user_info = validator.user_info
        
        return fail!(:invalid_credentials) if @user_info.nil? || @user_info.empty?
    
        super
      end
    
      def auth_hash
        OmniAuth::Utils.deep_merge(super, {
          'uid' => @user_info.delete("user"),
          'user_info' => @user_info
        })
      end   
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
omniauth_crowd-2.1.3 lib/omniauth/strategies/crowd.rb
omniauth_crowd-2.1.2 lib/omniauth/strategies/crowd.rb