sutty/app/controllers/api/v1/contact_controller.rb

62 lines
1.9 KiB
Ruby

# frozen_string_literal: true
module Api
module V1
# API para formulario de contacto
class ContactController < ProtectedController
# Recibe un mensaje a través del formulario de contacto y lo envía
# a les usuaries del sitio.
#
# Tenemos que verificar que el sitio exista y que algunos campos
# estén llenos para detener spambots o DDOS. También nos vamos a
# estar apoyando en la limitación de peticiones en el servidor web.
def receive
# No hacer nada si no se pasaron los chequeos
return if performed?
# TODO: Verificar que los campos obligatorios hayan llegado!
# Si todo salió bien, enviar los correos y redirigir al sitio.
# El sitio nos dice a dónde tenemos que ir.
ContactJob.perform_async site.id,
params[:form],
contact_params.to_h.symbolize_keys,
params[:redirect]
redirect_to params[:redirect] || origin.to_s
end
private
def from_is_address?
return if contact_params[:from].blank?
return if EmailAddress.valid? contact_params[:from]
@reason = 'email_invalid'
head :precondition_required
end
def gave_consent?
return if contact_params[:consent].present?
@reason = 'no_consent'
render plain: Rails.env.production? ? nil : @reason, status: :precondition_required
end
# Los campos que se envían tienen que corresponder con un
# formulario de contacto.
def destination_exists?
return if form? && site.form?(params[:form])
@reason = 'form_doesnt_exist'
render plain: Rails.env.production? ? nil : @reason, status: :precondition_required
end
# Parámetros limpios
def contact_params
@contact_params ||= params.permit(site.form(params[:form]).params)
end
end
end
end