Sha256: bc1485a8d9b9cd44d5e6efb57774704fea88fc01888ce9b189a824c7d5032b98

Contents?: true

Size: 1.35 KB

Versions: 5

Compression:

Stored size: 1.35 KB

Contents

require 'rest-client'
require 'omniauth/basic'

module OmniAuth
  module Strategies
    class HttpBasic
      include OmniAuth::Strategy
      
      def initialize(app, name, endpoint = nil, headers = {}, &block)
        super
        @endpoint = endpoint
        @request_headers = headers
      end
      
      attr_reader :endpoint, :request_headers
      
      def request_phase
        if env['REQUEST_METHOD'] == 'GET'
          get_credentials
        else
          perform
        end
      end
      
      def title
        name.split('_').map{|s| s.capitalize}.join(' ')
      end
      
      def get_credentials
        OmniAuth::Form.build(:title => title) do
          text_field 'Username', 'username'
          password_field 'Password', 'password'
        end.to_response
      end
      
      def perform
        @response = perform_authentication(endpoint)
        @env['omniauth.auth'] = auth_hash
        @env['REQUEST_METHOD'] = 'GET'
        @env['PATH_INFO'] = "#{OmniAuth.config.path_prefix}/#{name}/callback"
        
        call_app!
      rescue RestClient::Request::Unauthorized => e
        fail!(:invalid_credentials, e)
      end
      
      def perform_authentication(uri, headers = request_headers)
        RestClient.get(uri, headers)
      end
      
      def callback_phase
        fail!(:invalid_credentials)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
oa-basic-0.2.4 lib/omniauth/strategies/http_basic.rb
oa-basic-0.2.3 lib/omniauth/strategies/http_basic.rb
oa-basic-0.2.2 lib/omniauth/strategies/http_basic.rb
oa-basic-0.2.1 lib/omniauth/strategies/http_basic.rb
oa-basic-0.2.0 lib/omniauth/strategies/http_basic.rb