Sha256: 6f4bba5f68bca187b55f81f9b64fff053313bbf4e25c4839b8c3c26248000091

Contents?: true

Size: 1.27 KB

Versions: 5

Compression:

Stored size: 1.27 KB

Contents

require 'digest/sha1'
require 'omniauth/core'

module OmniAuth
  module Strategies
    class Password
      include OmniAuth::Strategy
      
      def initialize(app, secret = 'changethisappsecret', options = {}, &block)
        @secret = secret
        super(app, :password, options, &block)
      end

      attr_reader :secret
      
      def request_phase
        return fail!(:missing_information) unless request[:identifier] && request[:password]
        return fail!(:password_mismatch) if request[:password_confirmation] && request[:password_confirmation] != '' && request[:password] != request[:password_confirmation]
        env['REQUEST_METHOD'] = 'GET'
        env['PATH_INFO'] = request.path + '/callback'
        env['omniauth.auth'] = auth_hash(encrypt(request[:identifier], request[:password]))
        call_app!
      end
      
      def auth_hash(crypted_password)
        OmniAuth::Utils.deep_merge(super(), {
          'uid' => crypted_password,
          'user_info' => {
            @options[:identifier_key] => request[:identifier]
          }
        })
      end
      
      def callback_phase
        call_app!
      end
      
      def encrypt(identifier, password)
        Digest::SHA1.hexdigest([identifier, password, secret].join('::'))
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
oa-core-0.2.1 lib/omniauth/strategies/password.rb
oa-core-0.2.0 lib/omniauth/strategies/password.rb
oa-core-0.2.0.beta5 lib/omniauth/strategies/password.rb
oa-core-0.2.0.beta4 lib/omniauth/strategies/password.rb
oa-core-0.2.0.beta3 lib/omniauth/strategies/password.rb