module Sequel::Simple::OAuth2::AccessToken

AccessToken role mixin for Sequel. Includes all the required API, associations, validations and callbacks.

Public Class Methods

by_refresh_token(refresh_token) click to toggle source

Returns an instance of the AccessToken with specific `#refresh_token` value.

@param refresh_token [#to_s] refresh token value (any object that responds to `#to_s`).

@return [Object, nil] AccessToken object or nil if there is no record with such `#refresh_token`.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 62
def by_refresh_token(refresh_token)
  first(refresh_token: refresh_token.to_s)
end
by_token(token) click to toggle source

Searches for AccessToken record with the specific `#token` value.

@param token [#to_s] token value (any object that responds to `#to_s`).

@return [Object, nil] AccessToken object or nil if there is no record with such `#token`.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 52
def by_token(token)
  first(token: token.to_s)
end
create_for(client, resource_owner, scopes = nil) click to toggle source

Create a new AccessToken object.

@param client [Object] Client instance. @param resource_owner [Object] ResourceOwner instance. @param scopes [String] set of scopes.

@return [Object] AccessToken object.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 74
def create_for(client, resource_owner, scopes = nil)
  create(
    client_id: client.id,
    resource_owner_id: resource_owner.id,
    scopes: scopes
  )
end

Public Instance Methods

before_validation() click to toggle source
Calls superclass method
# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 26
def before_validation
  if new?
    # Setup lifetime for `#token` value.
    setup_expiration

    # Generate tokens
    generate_tokens
  end

  super
end
expired?() click to toggle source

Indicates whether the object is expired (`#expires_at` present and expiration time has come).

@return [Boolean] true if object expired and false in other case.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 87
def expired?
  expires_at && Time.now.utc > expires_at
end
generate_tokens() click to toggle source

Generate tokens

@return token [String] string object. @return refresh_token [String] string object.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 130
def generate_tokens
  self.token = ::Simple::OAuth2.config.token_generator.generate if token.blank?
  self.refresh_token = ::Simple::OAuth2::UniqToken.generate if ::Simple::OAuth2.config.issue_refresh_token
end
revoke!(revoked_at = Time.now) click to toggle source

Revokes the object (updates `:revoked_at` attribute setting its value to the specific time).

@param revoked_at [Time] time object.

@return [Object] AccessToken object or raise Sequel::Error::DocumentInvalid.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 105
def revoke!(revoked_at = Time.now)
  set(revoked_at: revoked_at.utc)
  save(columns: [:revoked_at], validate: false)
end
revoked?() click to toggle source

Indicates whether the object has been revoked.

@return [Boolean] true if revoked, false in other case.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 95
def revoked?
  revoked_at && revoked_at <= Time.now.utc
end
setup_expiration() click to toggle source

Set lifetime for token value during creating a new record.

@return clock [Time] time object.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 139
def setup_expiration
  expires_in = ::Simple::OAuth2.config.access_token_lifetime.to_i
  self.expires_at = Time.now.utc + expires_in if expires_at.nil? && !expires_in.nil?
end
to_bearer_token() click to toggle source

Exposes token object to Bearer token.

@return [Hash] bearer token instance.

# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 114
def to_bearer_token
  {
    access_token: token,
    expires_in: expires_at && ::Simple::OAuth2.config.access_token_lifetime.to_i,
    refresh_token: refresh_token,
    scope: scopes
  }
end
validate() click to toggle source

Required fields!

Calls superclass method
# File lib/sequel_simple_oauth2/mixins/access_token.rb, line 39
def validate
  super
  validates_presence :token
  validates_unique :token
end