class Authem::Support

Attributes

controller[R]
role[R]

Public Class Methods

new(role, controller) click to toggle source
# File lib/authem/support.rb, line 5
def initialize(role, controller)
  @role, @controller = role, controller
end

Public Instance Methods

clear_for(record) click to toggle source
# File lib/authem/support.rb, line 37
def clear_for(record)
  check_record! record
  sign_out
  Authem::Session.by_subject(record).where(role: role_name).delete_all
end
current() click to toggle source
# File lib/authem/support.rb, line 9
def current
  if ivar_defined?
    ivar_get
  else
    ivar_set(fetch_subject_by_token)
  end
end
deny_access() click to toggle source
# File lib/authem/support.rb, line 50
def deny_access
  # default landing point for deny_#{role_name}_access
  fail NotImplementedError, "No strategy for require_#{role_name} defined. Please define `deny_#{role_name}_access` method in your controller"
end
require_role() click to toggle source
# File lib/authem/support.rb, line 43
def require_role
  unless signed_in?
    session[:return_to_url] = request.url unless request.xhr?
    controller.send "deny_#{role_name}_access"
  end
end
sign_in(record, options={}) click to toggle source
# File lib/authem/support.rb, line 17
def sign_in(record, options={})
  check_record! record
  ivar_set record
  auth_session = create_auth_session(record, options)
  save_session auth_session
  save_cookie auth_session if options[:remember]
  auth_session
end
sign_out() click to toggle source
# File lib/authem/support.rb, line 30
def sign_out
  ivar_set nil
  Authem::Session.where(role: role_name, token: current_auth_token).delete_all
  cookies.delete key, domain: :all
  session.delete key
end
signed_in?() click to toggle source
# File lib/authem/support.rb, line 26
def signed_in?
  current.present?
end

Private Instance Methods

check_record!(record) click to toggle source
# File lib/authem/support.rb, line 59
def check_record!(record)
  fail ArgumentError if record.nil?
end
create_auth_session(record, options) click to toggle source
# File lib/authem/support.rb, line 76
def create_auth_session(record, options)
  Authem::Session.create!(role: role_name, subject: record, ttl: options[:ttl])
end
current_auth_token() click to toggle source
# File lib/authem/support.rb, line 72
def current_auth_token
  session[key] || cookies.signed[key]
end
fetch_subject_by_token() click to toggle source
# File lib/authem/support.rb, line 63
def fetch_subject_by_token
  return if current_auth_token.blank?
  auth_session = get_auth_session_by_token(current_auth_token)
  return nil unless auth_session
  auth_session.refresh
  save_cookie auth_session if cookies.signed[key].present?
  auth_session.subject
end
get_auth_session_by_token(token) click to toggle source
# File lib/authem/support.rb, line 92
def get_auth_session_by_token(token)
  Authem::Session.active.find_by(role: role_name, token: token)
end
ivar_defined?() click to toggle source
# File lib/authem/support.rb, line 100
def ivar_defined?
  controller.instance_variable_defined?(ivar_name)
end
ivar_get() click to toggle source
# File lib/authem/support.rb, line 108
def ivar_get
  controller.instance_variable_get ivar_name
end
ivar_name() click to toggle source
# File lib/authem/support.rb, line 112
def ivar_name
  @ivar_name ||= "@_#{key}".to_sym
end
ivar_set(value) click to toggle source
# File lib/authem/support.rb, line 104
def ivar_set(value)
  controller.instance_variable_set ivar_name, value
end
key() click to toggle source
# File lib/authem/support.rb, line 96
def key
  "_authem_current_#{role_name}"
end
save_session(auth_session) click to toggle source
# File lib/authem/support.rb, line 80
def save_session(auth_session)
  session[key] = auth_session.token
end