Sha256: 73e24ac3371b7c95061962ffcb841af83d37e81a4696e6499443febc885a6d9d

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

require 'oauth2/rack'

# Authenticate resource owner with request params
class OAuth2::Rack::Authentication::ResourceOwner::RequestParams
  def initialize(app, opts = {}, &authenticator)
    @app = app
    @required = opts.fetch(:required, true)
    @authenticator = authenticator || opts[:authenticator]
  end

  def call(env)
    return @app.call(env) if env.has_key?('oauth2.resource_owner')

    @request = Rack::Request.new(env)

    username = @request['username']
    password = @request['password']
    if username.nil? && password.nil?
      return @required ? unauthorized : @app.call(env)
    elsif username.nil? || password.nil?
      return bad_request
    end

    credentials = {
      :username => username,
      :password => password
    }
    credentials[:client] = env['oauth2.client'] if env['oauth2.client']
    resource_owner = @authenticator.call credentials

    if resource_owner
      env['oauth2.resource_owner'] = resource_owner
      @app.call(env)
    else
      unauthorized
    end
  end

  private
  def authenticate(opts)
    @authenticator && @authenticator.call(opts)
  end

  def unauthorized
    [ 401,
      { 'Content-Type' => 'text/plain',
        'Content-Length' => '0' },
      []
    ]
  end
  
  def bad_request
    [ 400,
      { 'Content-Type' => 'text/plain',
        'Content-Length' => '0' },
      []
    ]
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
oauth2-rack-1.1.1 lib/oauth2/rack/authentication/resource_owner/request_params.rb
oauth2-rack-1.0.0 lib/oauth2/rack/authentication/resource_owner/request_params.rb
oauth2-rack-0.0.5 lib/oauth2/rack/authentication/resource_owner/request_params.rb
oauth2-rack-0.0.4 lib/oauth2/rack/authentication/resource_owner/request_params.rb