Sha256: acef188c4eab7d2646a1129a48337409dcf1f9898eb03600a010ea27e1b53f28

Contents?: true

Size: 1.16 KB

Versions: 3

Compression:

Stored size: 1.16 KB

Contents

require 'uri'
require 'cgi'

module Instana
  class Secrets    
    def remove_from_query(str, secret_values = Instana.agent.secret_values)
      return str unless secret_values
      
      url = URI(str)
      params = CGI.parse(url.query)
      
      redacted = params.map do |k, v|
        needs_redaction = secret_values['list']
          .any? { |t| matcher(secret_values['matcher']).(t,k) }
        [k, needs_redaction ? '<redacted>' : v]
      end
      
      url.query = URI.encode_www_form(redacted)
      CGI.unescape(url.to_s)
    end
    
    private
    
    def matcher(name)
      case name
      when 'equals-ignore-case'
        ->(expected, actual) { expected.casecmp(actual) == 0 }
      when 'equals'
        ->(expected, actual) { (expected <=> actual) == 0 }
      when 'contains-ignore-case'
        ->(expected, actual) { actual.downcase.include?(expected) }
      when 'contains'
        ->(expected, actual) { actual.include?(expected) }
      when 'regex'
        ->(expected, actual) { !Regexp.new(expected).match(actual).nil? }
      else
        ::Instana.logger.warn("Matcher #{name} is not supported.")
        lambda { false }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
instana-1.192.1 lib/instana/secrets.rb
instana-1.192.0 lib/instana/secrets.rb
instana-1.13.0 lib/instana/secrets.rb