Sha256: c4976c588c6ee01f84f06e728d7cee93609db248e5a3ebc65c943e2a58a53072

Contents?: true

Size: 802 Bytes

Versions: 14

Compression:

Stored size: 802 Bytes

Contents

class UserBouncer
  # @param [User] user
  # @param [Hash] tracking
  def initialize(user, tracking)
    @user     = user
    @tracking = tracking
  end

  # @param [String] password
  def let_user_in?(password)
    return false unless @user&.allow_login?
    @password = password
    too_many_attempts? ? (log_attempt && false) : try_password
  end

  private

  def too_many_attempts?
    LoginAttempt.owned_by(@user).since(15.minutes.ago).count > 4
  end

  def log_attempt
    data = { user: @user, password: @password }
    LoginAttempt.create(data.merge(@tracking))
  end

  def try_password
    @user.authenticate(@password) || (count_attempt && false)
  end

  def count_attempt
    log_attempt
    if too_many_attempts?
      UserMailer.login_attempt(@user.id).deliver_later
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
biovision-base-0.34.190331.1 app/services/user_bouncer.rb
biovision-base-0.22.180920.0 app/services/user_bouncer.rb
biovision-base-0.21.180812.0 app/services/user_bouncer.rb
biovision-base-0.20.180731.0 app/services/user_bouncer.rb
biovision-base-0.19.180703.1 app/services/user_bouncer.rb
biovision-base-0.17.180619 app/services/user_bouncer.rb
biovision-base-0.15.180502 app/services/user_bouncer.rb
biovision-base-0.15.180415 app/services/user_bouncer.rb
biovision-base-0.14.180326 app/services/user_bouncer.rb
biovision-base-0.11.180127 app/services/user_bouncer.rb
biovision-base-0.9.171227 app/services/user_bouncer.rb
biovision-base-0.8.171029 app/services/user_bouncer.rb
biovision-base-0.8.170916 app/services/user_bouncer.rb
biovision-base-0.7.170709 app/services/user_bouncer.rb