27 lines
727 B
Python
27 lines
727 B
Python
import re
|
|
|
|
_PATTERNS: list[tuple[re.Pattern[str], object]] = [
|
|
(
|
|
re.compile(r"(?i)(authorization|set-cookie|cookie)([\"'=:]+\s*)([^\r\n]+)"),
|
|
lambda m: f"{m.group(1)}{m.group(2)}***",
|
|
),
|
|
(
|
|
re.compile(r"(?i)(token|secret|password|api[_-]?key|credential)([\"'=:]+\s*)([^\s\"',;]+)"),
|
|
lambda m: f"{m.group(1)}{m.group(2)}***",
|
|
),
|
|
(re.compile(r"(?i)(bearer)\s+\S+"), r"\1 ***"),
|
|
]
|
|
|
|
|
|
def redact(value: str | None) -> str | None:
|
|
if value is None:
|
|
return None
|
|
out = value
|
|
for pat, repl in _PATTERNS:
|
|
out = pat.sub(repl, out)
|
|
return out
|
|
|
|
|
|
def redact_dict(d: dict) -> dict:
|
|
return {k: redact(v) if isinstance(v, str) else v for k, v in d.items()}
|