lib/contrast/agent/telemetry/events/exceptions/obfuscate.rb in contrast-agent-6.9.0 vs lib/contrast/agent/telemetry/events/exceptions/obfuscate.rb in contrast-agent-6.10.0
- old
+ new
@@ -5,114 +5,119 @@
module Agent
module Telemetry
module TelemetryException
# Here will be all known gems to obfuscate during the building of TelemetryExceptions
module Obfuscate
+ # TODO: RUBY-1984 Re-enable/Remove Telemetry Obfuscation.
+ #
# List of known gems to be third parties not containing any
# user sensitive data.
- KNOWN_GEMS = %w[
- activesupport redis-activesupport redis builder dry-types rails rails-html-sanitizer rails-observers sinatra
- benchmark-ips bundler climate_control execjs factory_bot debride fake_ftp fasterer flay openssl
- parallel_tests contrast contrast-agent ruby pry-byebug byebug pry resolv ougai protobuf async nokogiri
- benchmark grape-order grape-activerecord newrelic newrelic-grape grape-rails-cache grape-msgpack
- grape-batch rspec rake rubocop grape-jbuilder rack-test rack-protection minitest grape-instrumentation
- minitest-global_expectations rack-proxy rack-attack rack-ssl grape-cancan grape-attack grape-rake-tasks
- grape-route-helpers benchmark-memory grape-rabl grape-kaminari grape-path-helpers grape-swagger-entity
- grape-swagger-rails grape-roar newrelic-rake grapes-wagger-representative grape-forgery_protection
- grape-papertrail grape-app grape-middleware-logger rack-protection rake-compile rhino rspec-benchmark
- rspec_junit_formatter rspec-rails rake-performance rubocop-rails rubocop-rake rubocop-rspec
- ruby-debug-ide simplecov sqlite steep tilt tzinfo-data warning xpath sinatra-activerecord sinatra-param
- sinatra-partial sinatra-flash sinatra-reloader sinatra-sinatra rake_fly rack rack-accept grape grape-entity
- sinatra-advanced-routes sinatra-warden grape_logging grape-swagger sinatra-namespace sinatra-resource
- sinatra-hashfix sinatra-instrumentation sinatra-helpers redis-rack sinatra-support sinatra-assetpack
- sinatra-router sinatra-cross_origin sinatra_more sinatra-jsonp faraday-rack zlib mustermann mustermann-grape
- rspec-expectations rspec-core rspec-mocks rspec-sidekiq
- ].cs__freeze
- KNOWN_ERRORS = %w[
- ActiveModel Error Errors Resolv Rspec ActiveRecord nil NilClass NoMemoryError ScriptError
- LoadError NotImplementedError SyntaxError SecurityError SignalException Interrupt
- StandardError ArgumentError UncaughtThrowError FiberError IOError EOFError IndexError KeyError
- StopIteration LocalJumpError NameError NoMethodError RangeError FloatDomainError RegexpError
- RuntimeError FrozenError SystemCallError ThreadError TypeError ZeroDivisionError SystemExit
- SystemStackError fatal Warning buffer OpenSSL SSL SSLError Errno Timeout Exception EOFError
- ECONNRESET ECONNREFUSED ETIMEDOUT EINVAL ESHUTDOWN EHOSTDOWN EHOSTUNREACH EISCONN
- ECONNABORTED ENETRESET ENETUNREACH Net HTTPBadResponse HTTPHeaderSyntaxError ProtocolError
- Faraday BadRequestError UnauthorizedError ForbiddenError ResourceNotFound ProxyAuthError
- ConflictError UnprocessableEntityError ClientError
- ].cs__freeze
- CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.cs__freeze
- # This will generate different chars for each agent startup but will be constant
- # for current run and will make identical obfuscation to be compared if given type
- # is the same.
- CYPHER = CHARS.chars.shuffle.join
-
- class << self
- # Returns paths for known gems.
- #
- # @return [Array<Regexp>] known paths
- def known_gem_paths
- @_known_gem_paths ||= KNOWN_GEMS.map do |gem_name|
- to_regexp(File.join(
- 'gems', gem_name.tr('-', ''), 'lib'))
- end
- end
-
- # Returns known modules names.
- #
- # @return [Array<Regexp>] known modules
- def known_modules
- @_known_modules ||= KNOWN_ERRORS.map { |module_name| to_regexp(module_name) }
- end
-
- # Obfuscate a type and replace it with random characters.
- #
- # @param type [String] the StackFrame type to obfuscate
- # @return [String] obfuscated type
- def obfuscate_type type
- return unless type
-
- check = type.tr('[^0-9].-', '')
- type = cypher(type) unless match_known(known_gem_paths, check)
- type
- end
-
- # Obfuscate a type and replace it with random characters.
- #
- # @param exception_type [String] the exception type to obfuscate
- # @return [String] obfuscated exception type
- def obfuscate_exception_type exception_type
- return unless exception_type
-
- exceptions = exception_type.split('::').each do |exception|
- cypher(exception) unless match_known(known_modules, exception)
- end
- exceptions.join('::')
- end
-
- private
-
- # Transforms string to regexp
- #
- # @param string [String]
- def to_regexp string
- /#{ string }/
- end
-
- # Add cypher to path to make it obscure, but unique enough for
- # comparisons. Mutates original or duplicate if frozen string.
- #
- # @param string [String] string to be transformed.
- def cypher string
- string = string.dup if string.cs__frozen?
- string.to_s.tr!(CHARS, CYPHER)
- end
-
- # @param known [Array<Regexp>] Array of regexp to match againts
- # @param type [String] type to check
- def match_known known, type
- known.any? { |regexp| type =~ regexp }
- end
- end
+ # KNOWN_GEMS = %w[
+ # activesupport redis-activesupport redis builder dry-types rails rails-html-sanitizer rails-observers
+ # sinatra
+ # benchmark-ips bundler climate_control execjs factory_bot debride fake_ftp fasterer flay openssl
+ # parallel_tests contrast contrast-agent ruby pry-byebug byebug pry resolv ougai protobuf async nokogiri
+ # benchmark grape-order grape-activerecord newrelic newrelic-grape grape-rails-cache grape-msgpack
+ # grape-batch rspec rake rubocop grape-jbuilder rack-test rack-protection minitest grape-instrumentation
+ # minitest-global_expectations rack-proxy rack-attack rack-ssl grape-cancan grape-attack grape-rake-tasks
+ # grape-route-helpers benchmark-memory grape-rabl grape-kaminari grape-path-helpers grape-swagger-entity
+ # grape-swagger-rails grape-roar newrelic-rake grapes-wagger-representative grape-forgery_protection
+ # grape-papertrail grape-app grape-middleware-logger rack-protection rake-compile rhino rspec-benchmark
+ # rspec_junit_formatter rspec-rails rake-performance rubocop-rails rubocop-rake rubocop-rspec
+ # ruby-debug-ide simplecov sqlite steep tilt tzinfo-data warning xpath sinatra-activerecord sinatra-param
+ # sinatra-partial sinatra-flash sinatra-reloader sinatra-sinatra rake_fly rack rack-accept grape
+ # grape-entity
+ # sinatra-advanced-routes sinatra-warden grape_logging grape-swagger sinatra-namespace sinatra-resource
+ # sinatra-hashfix sinatra-instrumentation sinatra-helpers redis-rack sinatra-support sinatra-assetpack
+ # sinatra-router sinatra-cross_origin sinatra_more sinatra-jsonp faraday-rack zlib mustermann
+ # mustermann-grape
+ # rspec-expectations rspec-core rspec-mocks rspec-sidekiq
+ # ].cs__freeze
+ # KNOWN_ERRORS = %w[
+ # ActiveModel Error Errors Resolv Rspec ActiveRecord nil NilClass NoMemoryError ScriptError
+ # LoadError NotImplementedError SyntaxError SecurityError SignalException Interrupt
+ # StandardError ArgumentError UncaughtThrowError FiberError IOError EOFError IndexError KeyError
+ # StopIteration LocalJumpError NameError NoMethodError RangeError FloatDomainError RegexpError
+ # RuntimeError FrozenError SystemCallError ThreadError TypeError ZeroDivisionError SystemExit
+ # SystemStackError fatal Warning buffer OpenSSL SSL SSLError Errno Timeout Exception EOFError
+ # ECONNRESET ECONNREFUSED ETIMEDOUT EINVAL ESHUTDOWN EHOSTDOWN EHOSTUNREACH EISCONN
+ # ECONNABORTED ENETRESET ENETUNREACH Net HTTPBadResponse HTTPHeaderSyntaxError ProtocolError
+ # Faraday BadRequestError UnauthorizedError ForbiddenError ResourceNotFound ProxyAuthError
+ # ConflictError UnprocessableEntityError ClientError
+ # ].cs__freeze
+ # CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.cs__freeze
+ # # This will generate different chars for each agent startup but will be constant
+ # # for current run and will make identical obfuscation to be compared if given type
+ # # is the same.
+ # CYPHER = CHARS.chars.shuffle.join
+ #
+ # class << self
+ # # Returns paths for known gems.
+ # #
+ # # @return [Array<Regexp>] known paths
+ # def known_gem_paths
+ # @_known_gem_paths ||= KNOWN_GEMS.map do |gem_name|
+ # to_regexp(File.join(
+ # 'gems', gem_name.tr('-', ''), 'lib'))
+ # end
+ # end
+ #
+ # # Returns known modules names.
+ # #
+ # # @return [Array<Regexp>] known modules
+ # def known_modules
+ # @_known_modules ||= KNOWN_ERRORS.map { |module_name| to_regexp(module_name) }
+ # end
+ #
+ # # Obfuscate a type and replace it with random characters.
+ # #
+ # # @param type [String] the StackFrame type to obfuscate
+ # # @return [String] obfuscated type
+ # def obfuscate_type type
+ # return unless type
+ #
+ # check = type.tr('[^0-9].-', '')
+ # type = cypher(type) unless match_known(known_gem_paths, check)
+ # type
+ # end
+ #
+ # # Obfuscate a type and replace it with random characters.
+ # #
+ # # @param exception_type [String] the exception type to obfuscate
+ # # @return [String] obfuscated exception type
+ # def obfuscate_exception_type exception_type
+ # return unless exception_type
+ #
+ # exceptions = exception_type.split('::').each do |exception|
+ # cypher(exception) unless match_known(known_modules, exception)
+ # end
+ # exceptions.join('::')
+ # end
+ #
+ # private
+ #
+ # # Transforms string to regexp
+ # #
+ # # @param string [String]
+ # def to_regexp string
+ # /#{ string }/
+ # end
+ #
+ # # Add cypher to path to make it obscure, but unique enough for
+ # # comparisons. Mutates original or duplicate if frozen string.
+ # #
+ # # @param string [String] string to be transformed.
+ # def cypher string
+ # string = string.dup if string.cs__frozen?
+ # string.to_s.tr!(CHARS, CYPHER)
+ # end
+ #
+ # # @param known [Array<Regexp>] Array of regexp to match against
+ # # @param type [String] type to check
+ # def match_known known, type
+ # known.any? { |regexp| type =~ regexp }
+ # end
+ # end
end
end
end
end
end