class Refinery::Inquiries::SpamFilter

Constants

GOOGLE_SITEVERIFY_URL

Public Class Methods

new(inquiry, request) click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 7
def initialize(inquiry, request)
  @inquiry = inquiry
  @request = request
  @params = request.params
end

Public Instance Methods

call() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 13
def call
  if recaptcha?
    if recaptcha_validated?
      @valid = true
      @inquiry.save
    else
      @inquiry.errors.add(:base, ::I18n.t(:captcha_invalid, scope: "refinery.inquiries.spam_filter"))
    end
  elsif simple_filter?
    @inquiry.save
    @valid = simple_filter_validated?
  end

  if notify?
    send_notification_email!
    send_confirmation_email!
  end
end
notify?() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 36
def notify?
  if valid?
    if simple_filter?
      @inquiry.ham? || Inquiries.send_notifications_for_inquiries_marked_as_spam
    else
      true
    end
  end
end
recaptcha_validated?() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 46
def recaptcha_validated?
  return true unless recaptcha?
  # avoid doing a second request if we already have a result.
  return @recaptcha_validated unless @recaptcha_validated.nil?

  @recaptcha_validated = recaptcha_success?
end
valid?() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 32
def valid?
  @valid == true
end

Private Instance Methods

recaptcha?() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 56
def recaptcha?
  Inquiries.recaptcha_site_key.present?
end
recaptcha_success?() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 61
def recaptcha_success?
  http = HTTPClient.new
  response = http.get(
    GOOGLE_SITEVERIFY_URL,
    secret: Rails.application.secrets.recaptcha_secret_key,
    response: @params["g-recaptcha-response"]
  )
  JSON.parse(response.body)["success"] == true
end
send_confirmation_email!() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 89
def send_confirmation_email!
  if Setting.send_confirmation?
    begin
      InquiryMailer.confirmation(@inquiry, @request).deliver_now
    rescue
      Rails.logger.warn "There was an error delivering an inquiry confirmation:\n#{$!}\n"
    end
  end
end
send_notification_email!() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 81
def send_notification_email!
  begin
    InquiryMailer.notification(@inquiry, @request).deliver_now
  rescue
    Rails.logger.warn "There was an error delivering an inquiry notification.\n#{$!}\n"
  end
end
simple_filter?() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 71
def simple_filter?
  Inquiries.filter_spam
end
simple_filter_validated?() click to toggle source
# File lib/refinery/inquiries/spam_filter.rb, line 75
def simple_filter_validated?
  return true unless simple_filter?

  @inquiry.ham?
end