40 lines
870 B
Ruby
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
|