Skip to content

Commit c388a6e

Browse files
committed
Fix when no secret exists + revamp
1 parent db63856 commit c388a6e

File tree

1 file changed

+15
-25
lines changed

1 file changed

+15
-25
lines changed

utils/proxy/scrubber.py

+15-25
Original file line numberDiff line numberDiff line change
@@ -10,45 +10,32 @@
1010
_name_filter = re.compile(r"key|token|secret|pass|docker_login", re.IGNORECASE)
1111

1212

13-
def _get_secrets_str() -> tuple[list[str], str]:
13+
def _get_secrets() -> list[str]:
1414
secrets: list = [
15-
value for name, value in os.environ.items() if value and name not in _not_secrets and _name_filter.search(name)
16-
]
17-
redacted = "<redacted>"
18-
return secrets, redacted
19-
20-
21-
def _get_secrets_bytes() -> tuple[list[bytes], bytes]:
22-
secrets: list = [
23-
value.encode()
15+
value.strip()
2416
for name, value in os.environ.items()
25-
if value and name not in _not_secrets and _name_filter.search(name)
17+
if value.strip() and name not in _not_secrets and _name_filter.search(name)
2618
]
27-
redacted = b"<redacted>"
19+
return secrets
2820

29-
return secrets, redacted
3021

31-
32-
def _instrument_write_methods_str(f) -> None:
33-
# get list of secrets at each call, because environ may be updated
22+
def _instrument_write_methods_str(f, secrets: list[str]) -> None:
3423
original_write = f.write
35-
secrets, redacted = _get_secrets_str()
3624
secret_regex = re.compile("|".join(re.escape(s) for s in secrets))
3725

3826
def write(data):
39-
data = re.sub(secret_regex, redacted, data)
27+
data = re.sub(secret_regex, "<redacted>", data)
4028
original_write(data)
4129

4230
f.write = write
4331

4432

45-
def _instrument_write_methods_bytes(f) -> None:
33+
def _instrument_write_methods_bytes(f, secrets: list[str]) -> None:
4634
original_write = f.write
47-
secrets, redacted = _get_secrets_bytes()
48-
secret_regex = re.compile(b"|".join(re.escape(s) for s in secrets))
35+
secret_regex = re.compile(b"|".join(re.escape(s.encode()) for s in secrets))
4936

5037
def write(data):
51-
data = re.sub(secret_regex, redacted, data)
38+
data = re.sub(secret_regex, b"<redacted>", data)
5239
original_write(data)
5340

5441
f.write = write
@@ -57,11 +44,14 @@ def write(data):
5744
def _instrumented_open(file, mode="r", *args, **kwargs): # noqa: ANN002
5845
f = _original_open(file, mode, *args, **kwargs)
5946

60-
if "w" in mode or "a" in mode:
47+
# get list of secrets at each call, because environ may be updated
48+
secrets = _get_secrets()
49+
50+
if ("w" in mode or "a" in mode) and len(secrets) > 0:
6151
if "b" in mode:
62-
_instrument_write_methods_bytes(f)
52+
_instrument_write_methods_bytes(f, secrets)
6353
else:
64-
_instrument_write_methods_str(f)
54+
_instrument_write_methods_str(f, secrets)
6555

6656
return f
6757

0 commit comments

Comments
 (0)