diff --git a/lib/datadog/core/environment/git.rb b/lib/datadog/core/environment/git.rb index 0dd62ac7117..382633a201b 100644 --- a/lib/datadog/core/environment/git.rb +++ b/lib/datadog/core/environment/git.rb @@ -13,7 +13,7 @@ module Git def git_repository_url return @git_repository_url if defined?(@git_repository_url) - @git_repository_url = Utils::Url.filter_sensitive_info(ENV[Datadog::Core::Git::Ext::ENV_REPOSITORY_URL]) + @git_repository_url = Utils::Url.filter_basic_auth(ENV[Datadog::Core::Git::Ext::ENV_REPOSITORY_URL]) end def git_commit_sha diff --git a/lib/datadog/core/utils/url.rb b/lib/datadog/core/utils/url.rb index 9c7892ba49e..d11c0c9688a 100644 --- a/lib/datadog/core/utils/url.rb +++ b/lib/datadog/core/utils/url.rb @@ -1,15 +1,23 @@ # frozen_string_literal: true +require 'uri' + module Datadog module Core module Utils # Helpers class that provides methods to process URLs # such as filtering sensitive information. module Url - def self.filter_sensitive_info(url) + def self.filter_basic_auth(url) return nil if url.nil? - url.gsub(%r{((https?|ssh)://)[^/]*@}, '\1') + URI(url).tap do |u| + u.user = nil + u.password = nil + end.to_s + # Git scheme: git@github.com:DataDog/dd-trace-rb.git + rescue URI::InvalidURIError + url end end end diff --git a/sig/datadog/core/utils/url.rbs b/sig/datadog/core/utils/url.rbs index e0d46970d22..51b651c6c84 100644 --- a/sig/datadog/core/utils/url.rbs +++ b/sig/datadog/core/utils/url.rbs @@ -2,7 +2,7 @@ module Datadog module Core module Utils module Url - def self?.filter_sensitive_info: (::String? url) -> ::String? + def self?.filter_basic_auth: (::String? url) -> ::String? end end end diff --git a/spec/datadog/core/utils/url_spec.rb b/spec/datadog/core/utils/url_spec.rb index 867e587c72b..e09c667b202 100644 --- a/spec/datadog/core/utils/url_spec.rb +++ b/spec/datadog/core/utils/url_spec.rb @@ -3,8 +3,8 @@ require 'datadog/core/utils/url' RSpec.describe Datadog::Core::Utils::Url do - describe '.filter_sensitive_info' do - subject(:filtered_url) { described_class.filter_sensitive_info(url) } + describe '.filter_basic_auth' do + subject(:filtered_url) { described_class.filter_basic_auth(url) } context 'with https' do context 'with username and password' do