summaryrefslogtreecommitdiff
path: root/git/util.py
diff options
context:
space:
mode:
authorMichael Mercier <michael.mercier@ryax.tech>2021-03-15 17:54:48 +0100
committerMichael Mercier <michael.mercier@ryax.tech>2021-03-15 18:00:05 +0100
commitf7968d136276607115907267b3be89c3ff9acd03 (patch)
tree505d533c942747f57785a449df4e2a7612cd2e77 /git/util.py
parentf7180d50f785ec28963e12e647d269650ad89b31 (diff)
downloadgitpython-f7968d136276607115907267b3be89c3ff9acd03.tar.gz
Put remove password in the utils and use it also in cmd.execute
Diffstat (limited to 'git/util.py')
-rw-r--r--git/util.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/git/util.py b/git/util.py
index 04c96789..e9d183d9 100644
--- a/git/util.py
+++ b/git/util.py
@@ -16,6 +16,7 @@ import stat
from sys import maxsize
import time
from unittest import SkipTest
+from urllib.parse import urlsplit, urlunsplit
from gitdb.util import (# NOQA @IgnorePep8
make_sha,
@@ -338,6 +339,33 @@ def expand_path(p, expand_vars=True):
except Exception:
return None
+
+def remove_password_if_present(cmdline):
+ """
+ Parse any command line argument and if on of the element is an URL with a
+ password, replace it by stars. If nothing found just returns a copy of the
+ command line as-is.
+
+ This should be used for every log line that print a command line.
+ """
+ redacted_cmdline = []
+ for to_parse in cmdline:
+ try:
+ url = urlsplit(to_parse)
+ # Remove password from the URL if present
+ if url.password is None:
+ raise ValueError()
+
+ edited_url = url._replace(
+ netloc=url.netloc.replace(url.password, "*****"))
+ redacted_cmdline.append(urlunsplit(edited_url))
+ except ValueError:
+ redacted_cmdline.append(to_parse)
+ # This is not a valid URL
+ pass
+ return redacted_cmdline
+
+
#} END utilities
#{ Classes