| import re |
| import os |
| from pathlib import Path |
| from config import settings |
|
|
|
|
| |
| _REDACT_PATTERNS = settings.spooler_redact_patterns.split(",") |
|
|
| _REDACTORS = [] |
|
|
|
|
| def _build_redactors(): |
| global _REDACTORS |
| for pat in _REDACT_PATTERNS: |
| pat = pat.strip() |
| if pat == "api_key": |
| |
| _REDACTORS.append( |
| (re.compile(r"(?i)(api[_-]?key|token|secret|password)\s*[:=]\s*['\"]?[\w\-]{8,}['\"]?"), "[REDACTED]") |
| ) |
| elif pat == "path": |
| |
| _REDACTORS.append( |
| (re.compile(r"/home/[^/]+|C:\\Users\\[^\\]+"), "[REDACTED_PATH]") |
| ) |
| elif pat == "base64": |
| |
| _REDACTORS.append( |
| (re.compile(r"[A-Za-z0-9+/]{60,}={0,2}"), "[BASE64_REDACTED]") |
| ) |
|
|
|
|
| _build_redactors() |
|
|
|
|
| def redact(text: str) -> str: |
| for pattern, replacement in _REDACTORS: |
| text = pattern.sub(replacement, text) |
| return text |
|
|