feat: version 2.9.0 -- ver documentos .md/.txt directo, sin descargar
Agrega un boton "Ver" en Documentos (adjuntos de proyectos/actividades) para archivos de texto plano y Markdown: se leen via blob (mismo mecanismo ya usado para descargar, que ya maneja el Bearer token) y se muestran en un popup -- el .md se renderiza con formato (marked) y se sanitiza con DOMPurify antes de insertarse en el DOM, para no abrir una via de XSS con HTML/JS embebido en un documento subido por otro usuario. De paso corrige que subir un .md fallaba con "tipo de archivo no permitido": el navegador no manda un mimetype confiable para esa extension (varia segun SO), asi que ahora se normaliza por extension en el fileFilter de multer en vez de depender solo del mimetype del navegador. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "project-linkedcorp-backend",
|
||||
"version": "2.8.13",
|
||||
"version": "2.9.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "src/server.js",
|
||||
|
||||
@@ -14,9 +14,15 @@ const ALLOWED_MIME = new Set([
|
||||
'application/vnd.ms-excel',
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'text/plain',
|
||||
'text/markdown',
|
||||
'application/zip',
|
||||
]);
|
||||
|
||||
// El navegador no manda un mimetype confiable para .md (varia segun SO: text/markdown,
|
||||
// application/octet-stream, vacio...) -- se normaliza por extension para no rechazar
|
||||
// documentos validos ni depender de esa adivinanza.
|
||||
const MARKDOWN_EXTENSIONS = new Set(['.md', '.markdown']);
|
||||
|
||||
const uploadsDir = path.join(env.storageRoot, 'attachments');
|
||||
fs.mkdirSync(uploadsDir, { recursive: true });
|
||||
|
||||
@@ -33,6 +39,10 @@ export const upload = multer({
|
||||
storage,
|
||||
limits: { fileSize: 15 * 1024 * 1024 },
|
||||
fileFilter: (req, file, cb) => {
|
||||
if (MARKDOWN_EXTENSIONS.has(path.extname(file.originalname).toLowerCase())) {
|
||||
file.mimetype = 'text/markdown';
|
||||
return cb(null, true);
|
||||
}
|
||||
if (!ALLOWED_MIME.has(file.mimetype)) {
|
||||
return cb(new Error('Tipo de archivo no permitido'));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user