5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-07-05 21:05:45 +00:00
panel/app/controllers/api/v1/base_controller.rb

75 lines
1.8 KiB
Ruby
Raw Normal View History

2019-09-05 18:56:24 +00:00
# frozen_string_literal: true
module Api
module V1
# API
class BaseController < ActionController::Base
2020-08-29 23:21:45 +00:00
include ExceptionHandler
2019-09-05 18:56:24 +00:00
protect_from_forgery with: :null_session
2019-09-06 23:40:33 +00:00
respond_to :json
2020-03-23 20:46:19 +00:00
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.
2020-05-30 19:43:25 +00:00
#
# 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.
2020-05-30 19:43:25 +00:00
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}"
2020-05-30 19:43:25 +00:00
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]
2020-03-23 20:46:19 +00:00
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('/')
2020-03-23 20:46:19 +00:00
end
2020-09-28 21:46:55 +00:00
# Los navegadores antiguos no envían Origin
def origin?
!origin.blank?
end
2019-09-05 18:56:24 +00:00
end
end
end