# frozen_string_literal: true module Api module V1 # Recibe los reportes de Content Security Policy class CspReportsController < BaseController # Crea un reporte de CSP intercambiando los guiones medios por # bajos # # TODO: Aplicar rate_limit def create csp = CspReport.new(csp_report_params.to_h.map do |k, v| { k.tr('-', '_') => v } end.inject(&:merge)) csp.id = SecureRandom.uuid csp.save render json: {}, status: :created end private # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only#Violation_report_syntax def csp_report_params params.require(:'csp-report') .permit(:disposition, :referrer, :'blocked-uri', :'document-uri', :'effective-directive', :'original-policy', :'script-sample', :'status-code', :'violated-directive', :'line-number', :'column-number', :'source-file') end end end end