Files
netig.net/lib/contact_form.rb
2026-11-03 16:47:04 +01:00

40 lines
870 B
Ruby

class ContactForm
LIMITS = {
"email" => 254,
"name" => 128,
"subject" => 200,
"message" => 5000
}.freeze
EMAIL_PATTERN = /\A[A-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[A-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?(?:\.[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?)+\z/i
def initialize(params)
@params = params
end
def spam?
!@params["website"].to_s.empty?
end
def valid?
fields_valid = LIMITS.all? do |key, max|
value = @params[key]
value.is_a?(String) &&
value.valid_encoding? &&
!value.strip.empty? &&
value.strip.length <= max
end
return false unless fields_valid
email_valid = @params["email"].strip.match?(EMAIL_PATTERN)
headers_valid = %w[name subject].none? do |key|
@params[key].match?(/[\r\n]/)
end
email_valid && headers_valid
end
end