class OauthBwergemn::Oauth2

Attributes

auth_strategy[R]

Public Instance Methods

access_scopes(access) click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 59
def access_scopes access
  if OauthBwergemn.is_custom_scopes
    access.scopes.map!(&:to_sym) rescue []
  else
    access.scopes.all.map!(&:to_sym) rescue []
  end
end
args() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 43
def args
  results = {}
  auth_strategy.auth_scopes.map { |s| (results = results.merge(s)) if s.is_a?(Hash) }
  results
end
authorize!() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 94
def authorize!
  access = Doorkeeper::AccessToken.find_by(token: token)
  if access.present?
    if access.expired?
      raise OauthBwergemn::Errors::ExpiredToken
    end
    if access.revoked?
      raise OauthBwergemn::Errors::InvalidToken
    end
  else
    raise OauthBwergemn::Errors::InvalidToken
  end
  resource_as = (is_args_include_as? ? args[:as] : OauthBwergemn.default_resources)
  # rubocop:disable Security/Eval
  resource = eval(OauthBwergemn.resources[resource_as.to_sym]).where(id: access.resource_owner_id).last rescue nil
  # rubocop:enable Security/Eval
  sync_scopes_from resource, to: access
  if OauthBwergemn.is_custom_scopes
    scope_authorize! resource
  else
    scope_authorize! access
  end
  {
    resource_owner:      resource,
    resource_credential: {
      access_token:  access.token,
      scopes:        (access_scopes access),
      token_type:    'bearer',
      expires_in:    access.expires_in,
      refresh_token: access.refresh_token,
      created_at:    access.created_at.to_i
    }
  }
end
before() click to toggle source

Grape middleware methods

# File lib/oauth_bwergemn/oauth2.rb, line 133
def before
  set_auth_strategy(OauthBwergemn.auth_strategy)
  auth_strategy.api_context = context
  context.extend(OauthBwergemn::AuthMethods)

  context.protected_endpoint = endpoint_protected?

  return unless context.protected_endpoint?

  self.the_request = env
  if token_optional? && context.protected_endpoint?
    context.resource_token       = token
    context.resource_owner       = nil
    context.resource_credentials = nil
    response = authorize! rescue nil
    if response.present?
      context.resource_owner = response[:resource_owner] rescue nil
      context.resource_credentials = response[:resource_credentials] rescue nil
    end
  elsif token.present? && token_required? && context.protected_endpoint?
    response               = authorize!
    context.resource_token = token
    context.resource_owner = response[:resource_owner] rescue nil
    context.resource_credentials = response[:resource_credentials] rescue nil
  elsif context.resource_owner.nil? && context.protected_endpoint?
    raise OauthBwergemn::Errors::InvalidToken
  else
    raise OauthBwergemn::Errors::InvalidToken
  end
end
context() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 9
def context
  env['api.endpoint']
end
endpoint_protected?() click to toggle source

Authorization control.

# File lib/oauth_bwergemn/oauth2.rb, line 39
def endpoint_protected?
  auth_strategy.endpoint_protected?
end
is_args_include_as?() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 74
def is_args_include_as?
  args.key?(:as)
end
is_args_include_validate?() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 67
def is_args_include_validate?
  if args.key?(:validate) && ![true, false].include?(args[:validate])
    raise OauthBwergemn::Errors::InvalidScope.new("Not valid scope '#{args[:validate]}' in `oauth2 scope`")
  end
  args.key?(:validate)
end
request() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 17
def request
  @_the_request
end
scope_authorize!(access) click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 78
def scope_authorize! access
  if scopes.present? && access
    unless (scopes & (access_scopes access)).present?
      raise OauthBwergemn::Errors::InvalidScope.new('OAuth Scope is disallowed')
    end
  end
end
scopes() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 53
def scopes
  results = []
  auth_strategy.auth_scopes.map { |s| (results << s) unless s.is_a?(Hash) }
  results.map! &:to_sym
end
sync_scopes_from(resource , to: to.update(scopes: resource.scopes.join(',')) rescue nil) click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 49
def sync_scopes_from resource , to:
  to.update(scopes: resource.scopes.join(',')) rescue nil
end
the_request=(env) click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 13
def the_request=(env)
  @_the_request = ActionDispatch::Request.new(env)
end
token() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 21
def token
  if request.headers['Authorization'].present?
    if request.headers['Authorization'].include?('bearer')
      token = request.headers['Authorization'].try('split', 'bearer').try(:last).try(:strip)
    elsif request.headers['Authorization'].include?('Bearer')
      token = request.headers['Authorization'].try('split', 'Bearer').try(:last).try(:strip)
    else
      token = request.headers['Authorization']
    end
  else
    token = request.parameters['access_token']
  end
  token
end
token_optional?() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 86
def token_optional?
  is_args_include_validate? && [true, false].include?(args[:validate]) && args[:validate].eql?(false)
end
token_required?() click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 90
def token_required?
  is_args_include_validate? && [true, false].include?(args[:validate]) && args[:validate].eql?(true) || is_args_include_validate?.blank?
end

Private Instance Methods

set_auth_strategy(strategy) click to toggle source
# File lib/oauth_bwergemn/oauth2.rb, line 166
def set_auth_strategy(strategy)
  @auth_strategy = OauthBwergemn::AuthStrategies.const_get(strategy.to_s.capitalize.to_s).new
end