# frozen_string_literal: true require_relative 'csp_maker/csp' require_relative 'csp_maker/version' require 'securerandom' module CSPMaker class << self attr_accessor :report_only, :nonce_generator, :nonce_directives def build_policy(context = nil, &block) raise ArgumentError, "block required" unless block_given? policy = define_policy(&block) policy.build(context) end def define_policy(&block) raise ArgumentError, "block required" unless block_given? policy = ContentSecurityPolicy.new if block.parameters.empty? policy.instance_eval(&block) else block.call(policy) end policy end def default_generator proc { SecureRandom.base64(16) } end def make_nonce nonce_generator.call end end end