28 lines
1.3 KiB
TypeScript
28 lines
1.3 KiB
TypeScript
const REDACTED_EMAIL = "[REDACTED_EMAIL]";
|
|
const REDACTED_TOKEN = "[REDACTED_TOKEN]";
|
|
const REDACTED_SECRET = "[REDACTED_SECRET]";
|
|
|
|
const EMAIL_PATTERN = /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi;
|
|
const BEARER_TOKEN_PATTERN = /\bBearer\s+[^\s,;"')]+/gi;
|
|
const SECRET_QUERY_VALUE_PATTERN = /([?&](?:api[_-]?key|access[_-]?token|auth[_-]?token|token|secret|client[_-]?secret|key)=)([^&\s]+)/gi;
|
|
const KEY_VALUE_TOKEN_PATTERN = /\b((?:api[_-]?key|access[_-]?token|auth[_-]?token|token|secret|client[_-]?secret)\s*[:=]\s*)([^&\s,;"')]+)/gi;
|
|
const HEX_SECRET_PATTERN = /\b[a-f0-9]{32,}\b/gi;
|
|
const BASE64_SECRET_PATTERN = /\b(?=[A-Za-z0-9+/=_-]{32,}\b)(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z0-9+/=_-]{32,}\b/g;
|
|
|
|
export function redactFeedbackText(value: string | null | undefined): string {
|
|
return (value ?? "")
|
|
.trim()
|
|
.replace(EMAIL_PATTERN, REDACTED_EMAIL)
|
|
.replace(BEARER_TOKEN_PATTERN, `Bearer ${REDACTED_TOKEN}`)
|
|
.replace(SECRET_QUERY_VALUE_PATTERN, `$1${REDACTED_TOKEN}`)
|
|
.replace(KEY_VALUE_TOKEN_PATTERN, `$1${REDACTED_TOKEN}`)
|
|
.replace(HEX_SECRET_PATTERN, REDACTED_SECRET)
|
|
.replace(BASE64_SECRET_PATTERN, REDACTED_SECRET);
|
|
}
|
|
|
|
export const feedbackRedactionMarkers = {
|
|
email: REDACTED_EMAIL,
|
|
token: REDACTED_TOKEN,
|
|
secret: REDACTED_SECRET,
|
|
};
|