Sha256: 99df0f0d8c49f98fa87ac40799572b6ce5395d62ce5b0abc329ad39bb5cb8bfd

Contents?: true

Size: 1.81 KB

Versions: 3

Compression:

Stored size: 1.81 KB

Contents

# frozen_string_literal: true

Dir[File.dirname(__FILE__) + '/tainted_love/**/*.rb'].each { |f| require f }

module TaintedLove
  class << self
    include TaintedLove::Utils

    attr_reader :configuration

    # Enables TaintedLove. Use a block to configure the TaintedLove::Configuration
    #
    # @yield [TaintedLove::Configuration]
    # @returns [TaintedLove::Configuration]
    def enable!
      configuration = TaintedLove::Configuration.new

      configuration.logger.info('TaintedLove is enabled')
      configuration.replacers = TaintedLove::Replacer::Base.replacers
      configuration.validators = TaintedLove::Validator::Base.validators
      configuration.reporter = TaintedLove::Reporter::StdoutReporter.new

      # Allows customization of which replacers/validators should be used
      yield configuration if block_given?

      @configuration = configuration

      configuration.replacers.each do |replacer|
        replacer = replacer.new
        replacer.replace! if replacer.should_replace?
      end

      configuration
    end

    # Report tainted input
    #
    # @param replacer [Symbol] Replacer reporting the issue
    # @param tainted_input [Object] Tainted object
    # @param tags [Array<Symbol>] Tags to classify the warning
    # @param message [String] Message about the warning
    def report(replacer, tainted_input, tags = [], message = nil)
      warning = TaintedLove::Warning.new
      warning.tainted_input = tainted_input
      warning.stack_trace = TaintedLove::StackTrace.new(Thread.current.backtrace(3))
      warning.replacer = replacer
      warning.tags = tags
      warning.message = message

      should_remove = @configuration.validators.any? do |validator|
        validator.new.remove?(warning)
      end

      @configuration.reporter.add_warning(warning) unless should_remove
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tainted_love-0.1.5 lib/tainted_love.rb
tainted_love-0.1.4 lib/tainted_love.rb
tainted_love-0.1.3 lib/tainted_love.rb