mirror of
https://0xacab.org/sutty/sutty
synced 2024-07-03 11:26:06 +00:00
![f](/assets/img/avatar_default.png)
La API no cambia por retrocompatibilidad pero ameritaría una v2 sabiendo más cosas sobre CORS.
75 lines
1.8 KiB
Ruby
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
|