support Apple Wallet pkpass files

- add "pkpass" to the default allowed upload extensions
- on download, set Content-Type: application/vnd.apple.pkpass and
  Content-Disposition: inline for .pkpass files so Safari (iOS/macOS)
  hands them off to Apple Wallet instead of downloading as a blob
This commit is contained in:
Maurice
2026-04-18 12:19:27 +02:00
parent e57c6773fc
commit db2c11e4a5
2 changed files with 8 additions and 1 deletions
+7
View File
@@ -98,6 +98,13 @@ router.get('/:id/download', (req: Request, res: Response) => {
if (!safe) return res.status(403).json({ error: 'Forbidden' }); if (!safe) return res.status(403).json({ error: 'Forbidden' });
if (!fs.existsSync(resolved)) return res.status(404).json({ error: 'File not found' }); if (!fs.existsSync(resolved)) return res.status(404).json({ error: 'File not found' });
// Serve Apple Wallet passes inline with the canonical MIME type so Safari
// (iOS/macOS) hands them off to Wallet instead of downloading as a blob.
if (path.extname(resolved).toLowerCase() === '.pkpass') {
res.setHeader('Content-Type', 'application/vnd.apple.pkpass');
res.setHeader('Content-Disposition', `inline; filename="${path.basename(file.original_name || resolved)}"`);
}
res.sendFile(resolved); res.sendFile(resolved);
}); });
+1 -1
View File
@@ -11,7 +11,7 @@ import { TripFile } from '../types';
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
export const MAX_FILE_SIZE = 50 * 1024 * 1024; // 50 MB export const MAX_FILE_SIZE = 50 * 1024 * 1024; // 50 MB
export const DEFAULT_ALLOWED_EXTENSIONS = 'jpg,jpeg,png,gif,webp,heic,pdf,doc,docx,xls,xlsx,txt,csv'; export const DEFAULT_ALLOWED_EXTENSIONS = 'jpg,jpeg,png,gif,webp,heic,pdf,doc,docx,xls,xlsx,txt,csv,pkpass';
export const BLOCKED_EXTENSIONS = ['.svg', '.html', '.htm', '.xml']; export const BLOCKED_EXTENSIONS = ['.svg', '.html', '.htm', '.xml'];
export const filesDir = path.join(__dirname, '../../uploads/files'); export const filesDir = path.join(__dirname, '../../uploads/files');