Sha256: f6fab400a6d2a9f2946e4e7a63bdf5ed235bb0da033aea261da4a10d1af77993

Contents?: true

Size: 1.66 KB

Versions: 25

Compression:

Stored size: 1.66 KB

Contents

class AuthorizationsController < ApplicationController
  before_filter :authenticate_user!

  rescue_from Rack::OAuth2::Server::Authorize::BadRequest do |e|
    @error = e
    render :error, :status => e.status
  end

  def new
    respond *authorize_endpoint.call(request.env)
  end

  def create
    respond *authorize_endpoint(:allow_approval).call(request.env)
  end

  private

  def respond(status, header, response)
    ["WWW-Authenticate"].each do |key|
      headers[key] = header[key] if header[key].present?
    end

    if response.redirect?
      redirect_to header['Location']
    else
      render :new
    end
  end

  def authorize_endpoint(allow_approval = false)
    Rack::OAuth2::Server::Authorize.new do |req, res|
      @client = Site::Client.find(req.client_id) || req.bad_request!

      res.redirect_uri = @redirect_uri = req.verify_redirect_uri!(@client.callback_url)

      if allow_approval
        if params[:accept]
          current_user.client_authorize!(@client)

          approve!(req, res, @client)
        else
          req.access_denied!
        end
      else
        if current_user.client_authorized?(@client)
          approve!(req, res, @client)
        else
          @response_type = req.response_type
          @state = req.state
        end
      end
    end
  end

  def approve!(req, res, client)
    case req.response_type
    when :code
      authorization_code = current_user.authorization_codes.create!(:client => client, :redirect_uri => res.redirect_uri)
      res.code = authorization_code.token
    when :token
      res.access_token = current_user.access_tokens.create!(:client => client).to_bearer_token
    end

    res.approve!
  end
end

Version data entries

25 entries across 25 versions & 2 rubygems

Version Path
social_stream-2.2.2 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.2.2 app/controllers/authorizations_controller.rb
social_stream-2.2.1 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.2.1 app/controllers/authorizations_controller.rb
social_stream-2.2.0 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.2.0 app/controllers/authorizations_controller.rb
social_stream-2.1.1 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.1.1 app/controllers/authorizations_controller.rb
social_stream-2.1.0 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.1.0 app/controllers/authorizations_controller.rb
social_stream-2.0.4 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.0.3 app/controllers/authorizations_controller.rb
social_stream-2.0.3 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.0.2 app/controllers/authorizations_controller.rb
social_stream-2.0.2 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.0.1 app/controllers/authorizations_controller.rb
social_stream-2.0.1 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-2.0.0 oauth2_server/app/controllers/authorizations_controller.rb
social_stream-oauth2_server-2.0.0 app/controllers/authorizations_controller.rb
social_stream-2.0.0.beta3 oauth2_server/app/controllers/authorizations_controller.rb