Simplificar el procesamiento de CORS

Y ahora permitir cualquier URL posible :D
This commit is contained in:
f 2021-08-08 21:43:57 -03:00
parent b2508de39b
commit aebe48c784

View file

@ -13,29 +13,19 @@ Rails.application.config.middleware.insert_before 0, Rack::Cors do
# El problema sería que otros sitios con JS malicioso hagan pedidos
# a nuestra API desde otros sitios infectados.
#
# XXX: La primera parte del dominio tiene que coincidir con el
# nombre del sitio.
#
# XXX: Al terminar de entender esto nos pasó que el servidor recibe
# la petición de todas maneras, con lo que no estamos previniendo
# que nos hablen, sino que lean información. Solo va a funcionar si
# el servidor no tiene el Preflight cacheado.
#
# TODO: Limitar el acceso desde Nginx también.
#
# TODO: Poder consultar por sitios por todas sus URLs posibles.
origins do |source, _|
# Cacheamos la respuesta para no tener que volver a procesarla
# cada vez.
Rails.cache.fetch(source, expires_in: 1.hour) do
uri = URI(source)
if (name = uri&.host&.split('.', 2)&.first).present?
Site.where(name: [name, uri.host + '.']).pluck(:name).first.present?
else
false
end
rescue URI::Error
hostname = URI(source)&.host
hostname.present? && Deploy.find_by_hostname(hostname).present?
rescue StandardError
false
end
end