Sha256: b977b5ac95c3db591e38f7de6350efdc83f8276a2f269198c62834c83eb3cb70

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

module Doorkeeper
  module OAuth
    class RefreshTokenRequest
      include Doorkeeper::Validations

      validate :token,  :error => :invalid_request
      validate :client, :error => :invalid_client

      attr_accessor :server, :refresh_token, :client, :access_token

      # TODO: refresh token can receive scope as parameters
      def initialize(server, refresh_token, client)
        @server        = server
        @refresh_token = refresh_token
        @client        = client
      end

      def authorize
        validate
        @response = if valid?
          revoke_and_create_access_token
          OAuth::TokenResponse.new access_token
        else
          OAuth::ErrorResponse.from_request(self)
        end
      end

      def valid?
        self.error.nil?
      end

    private

      def revoke_and_create_access_token
        refresh_token.revoke
        create_access_token
      end

      def create_access_token
        @access_token = Doorkeeper::AccessToken.create!({
          :application_id    => refresh_token.application_id,
          :resource_owner_id => refresh_token.resource_owner_id,
          :scopes            => refresh_token.scopes_string,
          :expires_in        => server.access_token_expires_in,
          :use_refresh_token => true
        })
      end

      def validate_token
        refresh_token.present? && !refresh_token.revoked?
      end

      def validate_client
        client.present? && refresh_token.application_id == client.id
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
couchkeeper-0.6.7 lib/doorkeeper/oauth/refresh_token_request.rb