Sha256: ffdf0ccfb3b507a76f16c6f642c24f0ee971c1eb84d43853f793e65a692c49d7

Contents?: true

Size: 1.9 KB

Versions: 10

Compression:

Stored size: 1.9 KB

Contents

module Rack
  module OAuth2
    module Server
      module Resource
        class Bearer < Abstract::Handler
          ACCESS_TOKEN = 'rack.oauth2.bearer.oauth_token'

          def initialize(app, &authenticator)
            @app = app
            super(&authenticator)
          end

          def call(env)
            request = Request.new(env)
            if request.bearer?
              authenticate!(request)
              env[ACCESS_TOKEN] = request.access_token
            end
            @app.call(env)
          rescue Rack::OAuth2::Server::Abstract::Error => e
            e.finish
          end

          private

          def authenticate!(request)
            @authenticator.call(request)
          end

          class Request < Rack::Request
            def initialize(env)
              @env = env
              @auth_header = Rack::Auth::AbstractRequest.new(env)
            end

            def bearer?
              access_token.present?
            end

            def access_token
              tokens = [access_token_in_haeder, access_token_in_payload].compact
              case Array(tokens).size
              when 0
                nil
              when 1
                tokens.first
              else
                invalid_request!('Both Authorization header and payload includes access token.')
              end
            end

            def access_token_in_haeder
              if @auth_header.provided? && @auth_header.scheme == :bearer
                @auth_header.params
              else
                nil
              end
            end

            def access_token_in_payload
              if params['oauth_token'] && !params['oauth_signature_method']
                params['oauth_token']
              else
                nil # This is OAuth1 request
              end
            end
          end
        end
      end
    end
  end
end

require 'rack/oauth2/server/resource/bearer/error'

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
rack-oauth2-0.4.6 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.4.5 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.4.4 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.4.3 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.4.2 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.4.1 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.4.0 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.3.1 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.3.0 lib/rack/oauth2/server/resource/bearer.rb
rack-oauth2-0.3.0.alpha lib/rack/oauth2/server/resource/bearer.rb