module DoorkeeperNobrainer::AccessTokenMixin

Attributes

use_refresh_token[W]

Public Instance Methods

acceptable?(scopes) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 119
def acceptable?(scopes)
  accessible? && includes_scope?(*scopes)
end
as_json(_options = {}) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 103
def as_json(_options = {})
  {
    resource_owner_id:  resource_owner_id,
    scopes:             scopes,
    expires_in_seconds: expires_in_seconds,
    application:        { uid: application.try(:uid) },
    created_at:         created_at.to_i,
  }
end
by_refresh_token(refresh_token) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 36
def by_refresh_token(refresh_token)
  where(refresh_token: refresh_token.to_s).first
end
by_token(token) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 32
def by_token(token)
  where(token: token.to_s).limit(1).to_a.first
end
find_or_create_for(application, resource_owner_id, scopes, expires_in, use_refresh_token) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 68
def find_or_create_for(application, resource_owner_id, scopes, expires_in, use_refresh_token)
  if Doorkeeper.configuration.reuse_access_token
    access_token = matching_token_for(application, resource_owner_id, scopes)
    if access_token && !access_token.expired?
      return access_token
    end
  end
  create!(
    application_id:    application.try(:id),
    resource_owner_id: resource_owner_id,
    scopes:            scopes.to_s,
    expires_in:        expires_in,
    use_refresh_token: use_refresh_token
  )
end
last_authorized_token_for(application_id, resource_owner_id) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 84
def last_authorized_token_for(application_id, resource_owner_id)
  where(application_id: application_id,
        resource_owner_id: resource_owner_id,
        revoked_at: nil).
        send(order_method, created_at_desc).
        limit(1).
        to_a.
        first
end
matching_token_for(application, resource_owner_or_id, scopes) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 47
def matching_token_for(application, resource_owner_or_id, scopes)
  resource_owner_id = if resource_owner_or_id.respond_to?(:to_key)
                        resource_owner_or_id.id
                      else
                        resource_owner_or_id
                      end
  token = last_authorized_token_for(application.try(:id), resource_owner_id)
  if token && scopes_match?(token.scopes, scopes, application.try(:scopes))
    token
  end
end
revoke_all_for(application_id, resource_owner) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 40
def revoke_all_for(application_id, resource_owner)
  where(application_id: application_id,
        resource_owner_id: resource_owner.id,
        revoked_at: nil).
        map(&:revoke)
end
same_credential?(access_token) click to toggle source

It indicates whether the tokens have the same credential

# File lib/doorkeeper/mixin/access_token_mixin.rb, line 114
def same_credential?(access_token)
  application_id == access_token.application_id &&
    resource_owner_id == access_token.resource_owner_id
end
scopes_match?(token_scopes, param_scopes, app_scopes) click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 59
def scopes_match?(token_scopes, param_scopes, app_scopes)
  (!token_scopes.present? && !param_scopes.present?) ||
    Doorkeeper::OAuth::Helpers::ScopeChecker.match?(
      token_scopes.to_s,
      param_scopes,
      app_scopes
  )
end
token_type() click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 95
def token_type
  'bearer'
end
use_refresh_token?() click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 99
def use_refresh_token?
  !!@use_refresh_token
end

Private Instance Methods

generate_refresh_token() click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 125
def generate_refresh_token
  write_attribute :refresh_token, UniqueToken.generate
end
generate_token() click to toggle source
# File lib/doorkeeper/mixin/access_token_mixin.rb, line 129
def generate_token
  generator = Doorkeeper.configuration.access_token_generator.constantize
  self.token = generator.generate(resource_owner_id: resource_owner_id,
                                  scopes: scopes, application: application,
                                  expires_in: expires_in)
rescue NoMethodError
  raise Errors::UnableToGenerateToken, "{generator} does not respond to `.generate`."
rescue NameError
  raise Errors::TokenGeneratorNotFound, "{generator} not found"
end