sutty/app/controllers/api/v1/invitades_controller.rb

46 lines
1.4 KiB
Ruby
Raw Normal View History

2020-02-11 15:06:36 +00:00
# frozen_string_literal: true
module Api
module V1
class InvitadesController < BaseController
# Obtiene una cookie válida por el tiempo especificado por el
# sitio.
#
# Aunque visitemos el sitio varias veces enviando la cookie
# anterior, la cookie se renueva.
def cookie
# XXX: Prestar atención a que estas acciones sean lo más rápidas
# y utilicen la menor cantidad posible de recursos, porque son
# un vector de DDOS.
site, anon = Site.where(name: params[:site_id], colaboracion_anonima: true)
.pluck(:name, :colaboracion_anonima)
.first
# La cookie no es accesible a través de JS y todo su contenido
# está cifrado para que no lo modifiquen les visitantes
#
# Enviamos un token de protección CSRF
if anon
headers['Access-Control-Allow-Credentials'] = true
headers['Access-Control-Allow-Origin'] = "https://#{site}"
headers['Vary'] = 'Origin'
expires = 30.minutes
cookies.encrypted[site] = {
httponly: true,
2020-02-18 16:45:08 +00:00
secure: !Rails.env.test?,
2020-02-11 15:06:36 +00:00
expires: expires,
same_site: :none,
value: {
csrf: form_authenticity_token,
expires: (Time.now + expires).to_i
}
}
end
render html: nil, status: :no_content
end
end
end
end