Sha256: 459c5b8acff2d507c5fc1d21b5c4f668d5acc82cbad1784cd8495a93f236668b

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

# @see 4.4.1 Client Credentials
require 'oauth2/rack'
require 'multi_json'

class OAuth2::Rack::Authorization::ClientCredentials::AccessTokenIssuer
  def initialize(app, opts = {}, &issuer)
    @app = app

    @issuer = issuer || opts[:issuer]
  end

  def call(env)
    client = env['oauth2.client']
    unless client
      return error_response(:error => 'invalid_client')
    end

    request = Rack::Request.new(env)
    unless request['grant_type'] == 'client_credentials'
      return error_response(:error => 'invalid_request')
    end

    access_token = find_acccess_token(:grant_type => 'client_credentials',
                                      :client => client,
                                      :scope => request['scope'])

    if access_token['error']
      error_response(access_token)
    else
      successful_response(access_token)
    end
  end

  private
  def find_acccess_token(opts)
    if @issuer
      @issuer.call(opts)
    end || { 'error' => 'invalid_grant' }
  end

  def successful_response(response_object)
    headers = {
      'Content-Type' => 'application/json;charset=UTF-8',
      'Cache-Control' => 'no-store',
      'Pragma' => 'no-cache'
    }

    [200, headers, [MultiJson.encode(response_object)]]
  end

  def error_response(response_object)
    headers = {
      'Content-Type' => 'application/json;charset=UTF-8'
    }

    [400, headers, [MultiJson.encode(response_object)]]
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
oauth2-rack-0.0.5 lib/oauth2/rack/authorization/client_credentials/access_token_issuer.rb