class Doorkeeper::OAuth::AuthorizationRequest

def access_token

def access_token
  AccessToken.accessible.where(:application_id => client.id, :resource_owner_id => resource_owner.id).first
end

def access_token_exists?

def access_token_exists?
  access_token.present? && access_token_scope_matches?
end

def access_token_scope_matches?

def access_token_scope_matches?
  (access_token.scopes - scope.split(" ").map(&:to_sym)).empty?
end

def authorize

def authorize
  create_authorization if valid?
end

def build_uri

def build_uri
  uri = URI.parse(client.redirect_uri)
  yield uri
  uri.to_s
end

def client

def client
  @client ||= Application.find_by_uid(client_id)
end

def create_authorization

def create_authorization
  @grant = AccessGrant.create!(
    :application_id    => client.id,
    :resource_owner_id => resource_owner.id,
    :expires_in        => DEFAULT_EXPIRATION_TIME,
    :redirect_uri      => redirect_uri,
    :scopes            => scope
  )
end

def deny

def deny
  self.error = :access_denied
end

def has_scope?

def has_scope?
  Doorkeeper.configuration.scopes.all.present?
end

def has_state?

def has_state?
  state.present?
end

def initialize(resource_owner, attributes)

def initialize(resource_owner, attributes)
  ATTRIBUTES.each { |attr| instance_variable_set("@#{attr}", attributes[attr]) }
  @resource_owner = resource_owner
  @grant          = nil
  @scope          ||= Doorkeeper.configuration.default_scope_string
  validate
end

def invalid_redirect_uri

def invalid_redirect_uri
  build_uri do |uri|
    query = "error=#{error}"
    query << "&state=#{state}" if has_state?
    uri.query = query
  end
end

def scopes

def scopes
  Doorkeeper.configuration.scopes.with_names(*scope.split(" ")) if has_scope?
end

def success_redirect_uri

def success_redirect_uri
  build_uri do |uri|
    query = "code=#{token}"
    query << "&state=#{state}" if has_state?
    uri.query = query
  end
end

def token

def token
  @grant.token
end

def validate_attributes

def validate_attributes
  %w(response_type client_id redirect_uri).all? { |attr| send(attr).present? }
end

def validate_client

def validate_client
  !!client
end

def validate_redirect_uri

def validate_redirect_uri
  client.redirect_uri == redirect_uri
end

def validate_response_type

def validate_response_type
  response_type == "code"
end

def validate_scope

def validate_scope
  return true unless has_scope?
  scope.present? && scope !~ /[\n|\r|\t]/ && scope.split(" ").all? { |s| Doorkeeper.configuration.scopes.exists?(s) }
end