# frozen_string_literal: true module Api module V1 # Recibe los reportes de Content Security Policy class CspReportsController < BaseController skip_forgery_protection # No queremos indicar que algo saliĆ³ mal rescue_from ActionController::ParameterMissing, with: :csp_report_created # 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.transform_keys do |k| k.tr('-', '_') end) csp.id = SecureRandom.uuid csp.save csp_report_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 def csp_report_created render json: {}, status: :created end end end end