Module: RailsBase::UserFieldValidators

Included in:
Authentication::ModifyPassword, NameChange, RailsBase::Users::RegistrationsController
Defined in:
app/helpers/rails_base/user_field_validators.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object

allows us to use standard functionality of logging shit



3
4
5
6
7
# File 'app/helpers/rails_base/user_field_validators.rb', line 3

def self.included klass
  klass.class_eval do
    include RailsBase::ServiceLogging
  end
end

Instance Method Details

#validate_complement?(user_params:) ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/helpers/rails_base/user_field_validators.rb', line 9

def validate_complement?(user_params:)
status = { status: true, errors: {} }
	if user_params[:first_name]
 	validator = validate_name?(name: user_params[:first_name])
 	unless validator[:status]
 		status[:status] = false
 		status[:errors][:first_name] = "First Name validation: #{validator[:msg]}"
 	end
	end

	if user_params[:last_name]
 	validator = validate_name?(name: user_params[:last_name])
 	unless validator[:status]
 		status[:status] = false
 		status[:errors][:last_name] = "Last Name validation: #{validator[:msg]}"
 	end
	end

	if user_params[:password] && user_params[:password_confirmation]
		validator = validate_password?(password: user_params[:password], password_confirmation: user_params[:password_confirmation])
		unless validator[:status]
			status[:status] = false
			status[:errors][:password] = "Password validation: #{validator[:msg]}"
		end
	end
	status
end

#validate_full_name?(first_name:, last_name:) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/helpers/rails_base/user_field_validators.rb', line 37

def validate_full_name?(first_name:, last_name:)
  status = { status: true, errors: {} }
  if first_name
    validator = validate_name?(name: first_name)
    unless validator[:status]
      status[:status] = false
      status[:errors][:first_name] = "First Name validation: #{validator[:msg]}"
    end
  end

  if last_name
    validator = validate_name?(name: last_name)
    unless validator[:status]
      status[:status] = false
      status[:errors][:last_name] = "Last Name validation: #{validator[:msg]}"
    end
  end
  status
end

#validate_name?(name:) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/helpers/rails_base/user_field_validators.rb', line 57

def validate_name?(name:)
	unacceptable_chars = name.tr("a-zA-Z '",'')
	if unacceptable_chars.length > 0
	log(level: :warn, msg: "name #{name} contains unacceptable_chars [#{unacceptable_chars}]")
	return { status: false, msg: "Value can not contain #{unacceptable_chars}" }
	end

  if name.length > RailsBase::Authentication::Constants::MAX_NAME
    log(level: :warn, msg: "name #{name} contains too many characters. Max allowed is #{RailsBase::Authentication::Constants::MAX_NAME}")
    return { status: false, msg: "Too many characters. Max allowed is #{RailsBase::Authentication::Constants::MAX_NAME}" }
  end

  if name.length < RailsBase::Authentication::Constants::MIN_NAME
    log(level: :warn, msg: "name #{name} contains too few characters. MIN allowed is #{RailsBase::Authentication::Constants::MIN_NAME}")
    return { status: false, msg: "Too few characters. Max allowed is #{RailsBase::Authentication::Constants::MIN_NAME}" }
  end
{ status: true }
end

#validate_password?(password:, password_confirmation:) ⇒ Boolean

Returns:

  • (Boolean)


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/helpers/rails_base/user_field_validators.rb', line 76

def validate_password?(password:, password_confirmation:)
	if password != password_confirmation
		log(level: :warn, msg: 'User password inputs do not match. Must retry flow')
		return { status: false, msg: 'Passwords do not match. Retry password flow' }
	end

	if password.length < RailsBase::Authentication::Constants::MP_MIN_LENGTH
		log(level: :warn, msg: RailsBase::Authentication::Constants::MP_REQ_MESSAGE)
		return { status: false, msg: RailsBase::Authentication::Constants::MP_REQ_MESSAGE }
	end

	number_count = password.scan(/\d/).join('').length
	char_count = password.scan(/[a-zA-Z]/).join('').length
	non_standard_chars = password.scan(/\W/)

	if char_count < RailsBase::Authentication::Constants::MP_MIN_ALPHA
		log(level: :warn, msg: "User password does not have enough numbers. Req: #{RailsBase::Authentication::Constants::MP_MIN_ALPHA}. Given: #{char_count}")
		return { status: false, msg: "Password must contain at least #{RailsBase::Authentication::Constants::MP_MIN_ALPHA} characters [a-z,A-Z]" }
	end

	if number_count < RailsBase::Authentication::Constants::MP_MIN_NUMS
		log(level: :warn, msg: "User password does not have enough numbers. Req: #{RailsBase::Authentication::Constants::MP_MIN_NUMS}. Given: #{number_count}")
		return { status: false, msg: "Password must contain at least #{RailsBase::Authentication::Constants::MP_MIN_NUMS} numbers [0-9]" }
	end

   unacceptable_chars = non_standard_chars - RailsBase.config.auth.password_allowed_special_chars.split("")
	if unacceptable_chars.length > 0
		log(level: :warn, msg: "User password contains unacceptable_chars special chars. Received: #{unacceptable_chars}")
		return { status: false, msg: "Unaccepted characters received. Characters must be in [0-9a-zA-Z] and [#{RailsBase.config.auth.password_allowed_special_chars}] exclusively. Received #{unacceptable_chars}" }
	end

	{ status: true }
end