39 lines
879 B
Ruby
39 lines
879 B
Ruby
# frozen_string_literal: true
|
|
|
|
require 'zxcvbn'
|
|
|
|
class InternalUser < User
|
|
authenticates_with_sorcery!
|
|
|
|
attr_accessor :validate_password
|
|
|
|
validates :email, presence: true, uniqueness: true
|
|
validates :password, confirmation: true, if: -> { password_void? && validate_password? }, on: :update, presence: true
|
|
validate :password_strength, if: -> { password_void? && validate_password? }, on: :update
|
|
|
|
def activated?
|
|
activation_state == 'active'
|
|
end
|
|
|
|
def password_void?
|
|
activation_token? || reset_password_token?
|
|
end
|
|
private :password_void?
|
|
|
|
def validate_password?
|
|
return true if @validate_password.nil?
|
|
|
|
@validate_password
|
|
end
|
|
private :validate_password?
|
|
|
|
def password_strength
|
|
result = Zxcvbn.test(password, [email, name, 'CodeOcean'])
|
|
errors.add(:password, :weak) if result.score < 4
|
|
end
|
|
|
|
def displayname
|
|
name
|
|
end
|
|
end
|