# 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, secure: !Rails.env.test?, 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