mirror of
https://github.com/shuaiplus/nodewarden.git
synced 2026-06-23 22:10:15 +00:00
39 lines
1003 B
TypeScript
39 lines
1003 B
TypeScript
const ACTIVE_DOWNLOAD_MEDIA_TYPES = new Set([
|
|
'application/xhtml+xml',
|
|
'application/xml',
|
|
'image/svg+xml',
|
|
'text/html',
|
|
'text/xml',
|
|
]);
|
|
|
|
const SAFE_ICON_MEDIA_TYPES = new Set([
|
|
'image/avif',
|
|
'image/bmp',
|
|
'image/gif',
|
|
'image/jpeg',
|
|
'image/png',
|
|
'image/vnd.microsoft.icon',
|
|
'image/webp',
|
|
'image/x-icon',
|
|
]);
|
|
|
|
function normalizeMediaType(contentType: string | null | undefined): string {
|
|
return String(contentType || '')
|
|
.split(';', 1)[0]
|
|
.trim()
|
|
.toLowerCase();
|
|
}
|
|
|
|
export function isSafeWebsiteIconContentType(contentType: string | null | undefined): boolean {
|
|
return SAFE_ICON_MEDIA_TYPES.has(normalizeMediaType(contentType));
|
|
}
|
|
|
|
export function sanitizeDownloadContentType(contentType: string | null | undefined): string {
|
|
const mediaType = normalizeMediaType(contentType);
|
|
if (!mediaType) return 'application/octet-stream';
|
|
if (ACTIVE_DOWNLOAD_MEDIA_TYPES.has(mediaType)) {
|
|
return 'application/octet-stream';
|
|
}
|
|
return contentType || mediaType;
|
|
}
|