Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/utils/api/apiKeySecurity.server.ts
T

21 lines
928 B
TypeScript

import { createHash } from "node:crypto";
const SENSITIVE_API_LOG_PARAM_PATTERN = /authorization|cookie|password|secret|token|api[-_]?key|key|email|session|jwt|code/i;
const SECRET_LIKE_API_LOG_VALUE_PATTERN = /\bBearer\s+\S+|\b(?:sk|pk|rk)_(?:live|test)_[A-Za-z0-9_]+|[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/i;
export function getApiKeyLookupCacheKey(key: string) {
const digest = createHash("sha256").update(key).digest("hex");
return `apiKeyHash:${digest}`;
}
export function serializeApiLogSearchParams(request: Request) {
const searchParams = new URL(request.url).searchParams;
searchParams.delete("entity");
searchParams.delete("id");
const entries = Array.from(searchParams.entries()).map(([key, value]) => [
key,
SENSITIVE_API_LOG_PARAM_PATTERN.test(key) || SECRET_LIKE_API_LOG_VALUE_PATTERN.test(value) ? "[REDACTED]" : value,
]);
return JSON.stringify(Object.fromEntries(entries));
}