module Doorkeeper::AccessTokenMixin

def acceptable?(scopes)

Returns:
  • (Boolean) - true if record is accessible and includes scopes or

Parameters:
  • scopes (Array) -- scopes
def acceptable?(scopes)
  accessible? && includes_scope?(*scopes)
end

def as_json(_options = {})

Returns:
  • (Hash) - hash with token data
def as_json(_options = {})
  {
    resource_owner_id: resource_owner_id,
    scope: scopes,
    expires_in: expires_in_seconds,
    application: { uid: application.try(:uid) },
    created_at: created_at.to_i,
  }
end

def generate_refresh_token

Returns:
  • (String) - refresh token value
def generate_refresh_token
  @raw_refresh_token = UniqueToken.generate
  secret_strategy.store_secret(self, :refresh_token, @raw_refresh_token)
end

def generate_token

Raises:
  • (Doorkeeper::Errors::TokenGeneratorNotFound) -
  • (Doorkeeper::Errors::UnableToGenerateToken) -

Returns:
  • (String) - generated token value
def generate_token
  self.created_at ||= Time.now.utc
  @raw_token = token_generator.generate(
    resource_owner_id: resource_owner_id,
    scopes: scopes,
    application: application,
    expires_in: expires_in,
    created_at: created_at
  )
  secret_strategy.store_secret(self, :token, @raw_token)
  @raw_token
end

def plaintext_refresh_token

The stored refresh_token may be mapped and not available in cleartext.
We keep a volatile copy of the raw refresh token for initial communication
def plaintext_refresh_token
  if secret_strategy.allows_restoring_secrets?
    secret_strategy.restore_secret(self, :refresh_token)
  else
    @raw_refresh_token
  end
end

def plaintext_token

returning a present value for persisted tokens.
while hashing strategies do not, so you cannot rely on this value
Some strategies allow restoring stored secrets (e.g. symmetric encryption)

The stored refresh_token may be mapped and not available in cleartext.
We keep a volatile copy of the raw token for initial communication
def plaintext_token
  if secret_strategy.allows_restoring_secrets?
    secret_strategy.restore_secret(self, :token)
  else
    @raw_token
  end
end

def same_credential?(access_token)

Returns:
  • (Boolean) - true if credentials are same of false in other cases

Parameters:
  • access_token (Doorkeeper::AccessToken) -- other token
def same_credential?(access_token)
  application_id == access_token.application_id &&
    resource_owner_id == access_token.resource_owner_id
end

def token_generator

def token_generator
  generator_name = Doorkeeper.configuration.access_token_generator
  generator = generator_name.constantize
  return generator if generator.respond_to?(:generate)
  raise Errors::UnableToGenerateToken, "#{generator} does not respond to `.generate`."
rescue NameError
  raise Errors::TokenGeneratorNotFound, "#{generator_name} not found"
end

def token_type

Other tags:
    See: https://tools.ietf.org/html/rfc6750 -
def token_type
  "Bearer"
end

def use_refresh_token?

def use_refresh_token?
  @use_refresh_token ||= false
  !!@use_refresh_token
end