5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-07-01 12:26:07 +00:00
panel/config/initializers/cors.rb
f aebe48c784 Simplificar el procesamiento de CORS
Y ahora permitir cualquier URL posible :D
2021-08-08 22:23:03 -03:00

36 lines
1.3 KiB
Ruby

# frozen_string_literal: true
# CORS
#
# @see {https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS}
# @see {https://github.com/cyu/rack-cors#origin}
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
# Queremos obtener un dominio válido y no permitir ningún otro
# origen. Como los sitios pueden tener muchos orígenes, necesitamos
# una forma de encontrarlos por su URL.
#
# El problema sería que otros sitios con JS malicioso hagan pedidos
# a nuestra API desde otros sitios infectados.
#
# 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.
origins do |source, _|
# Cacheamos la respuesta para no tener que volver a procesarla
# cada vez.
Rails.cache.fetch(source, expires_in: 1.hour) do
hostname = URI(source)&.host
hostname.present? && Deploy.find_by_hostname(hostname).present?
rescue StandardError
false
end
end
resource '*', headers: :any, methods: %i[get post patch put]
end
end