module LockableAuth

Constants

DEFAULT_MAXIMUM_ATTEMPTS
DEFAULT_UNLOCK_IN
VERSION

Attributes

lock_enabled[RW]
maximum_attempts[RW]
unlock_in[RW]

Public Instance Methods

access_locked?() click to toggle source
# File lib/lockable_auth.rb, line 34
def access_locked?
  locked_at.present? && !lock_expired?
end
authenticate(unencrypted_password) click to toggle source
Calls superclass method
# File lib/lockable_auth.rb, line 38
def authenticate(unencrypted_password)
  return super unless persisted?

  unlock_access! if lock_expired?

  if super && !lock_enabled?
    self
  elsif super && !access_locked?
    unlock_access!
    self
  else
    increment_failed_attemnpts
    if attempts_exceeded?
      lock_access!
    else
      save(validate: false)
    end
    false
  end
end
lock_access!() click to toggle source
# File lib/lockable_auth.rb, line 23
def lock_access!
  self.locked_at = Time.now.utc
  save(validate: false)
end
unlock_access!() click to toggle source
# File lib/lockable_auth.rb, line 28
def unlock_access!
  self.locked_at = nil
  self.failed_attempts = 0
  save(validate: false)
end

Protected Instance Methods

attempts_exceeded?() click to toggle source
# File lib/lockable_auth.rb, line 66
def attempts_exceeded?
  self.class.maximum_attempts.nonzero? && (self.failed_attempts >= self.class.maximum_attempts)
end
increment_failed_attemnpts() click to toggle source
# File lib/lockable_auth.rb, line 61
def increment_failed_attemnpts
  self.failed_attempts ||= 0
  self.failed_attempts += 1
end
lock_enabled?() click to toggle source
# File lib/lockable_auth.rb, line 74
def lock_enabled?
  self.class.lock_enabled
end
lock_expired?() click to toggle source
# File lib/lockable_auth.rb, line 70
def lock_expired?
  self.class.unlock_in.to_i.zero? || (locked_at && locked_at < self.class.unlock_in.ago)
end