5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-07-03 11:26:06 +00:00
panel/app/controllers/api/v1/base_controller.rb
f 22a7a811b4 Acomodar la API de formularios de contacto a los deploys nuevos.
La API no cambia por retrocompatibilidad pero ameritaría una v2 sabiendo
más cosas sobre CORS.
2021-08-08 22:23:03 -03:00

75 lines
1.8 KiB
Ruby

# frozen_string_literal: true
module Api
module V1
# API
class BaseController < ActionController::Base
include ExceptionHandler
protect_from_forgery with: :null_session
respond_to :json
private
# Por retrocompatibilidad con la forma en que estábamos
# gestionando los hostnames históricamente, necesitamos poder
# encontrar el sitio a partir de cualquiera de sus hostnames.
#
# Aunque en realidad con el hostname a partir del Origin nos
# bastaría.
#
# TODO: Generar API v2 que use solo el hostname y no haya que
# pasar site_id como parámetro redundante.
def site_id
@site_id ||= Deploy.site_name_from_hostname(params[:site_id])
end
# @return [Site]
def site
@site ||= Site.find_by_name(site_id)
end
# Obtiene el hostname desde el Origin, con el hostname local como
# fallback.
#
# @return [String]
def origin_hostname
URI.parse(origin || origin_from_referer).host
rescue StandardError
"#{site_id}.#{Site.domain}"
end
# Referer
#
# @see {https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer}
# @return [String,Nil]
def referer
request.referer
end
alias referrer referer
# Origin
#
# @see {https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin}
# @return [String,Nil]
def origin
request.origin
end
# Genera un header Origin a partir del Referer si existe.
#
# @return [String,Nil]
def origin_from_referer
return if referer.blank?
referer.split('/', 4).tap { |u| u.pop if u.size > 3 }.join('/')
end
# Los navegadores antiguos no envían Origin
def origin?
!origin.blank?
end
end
end
end