File size: 1,085 Bytes
63c75d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import re
import os
from pathlib import Path
from config import settings


# Patterns resolved from env
_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":
            # Matches common key formats
            _REDACTORS.append(
                (re.compile(r"(?i)(api[_-]?key|token|secret|password)\s*[:=]\s*['\"]?[\w\-]{8,}['\"]?"), "[REDACTED]")
            )
        elif pat == "path":
            # Redact home dirs and usernames in paths
            _REDACTORS.append(
                (re.compile(r"/home/[^/]+|C:\\Users\\[^\\]+"), "[REDACTED_PATH]")
            )
        elif pat == "base64":
            # Long base64-ish strings
            _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