Update chat_window.php

This commit is contained in:
Lizandro Guarnizo
2026-01-22 11:04:18 -05:00
parent dcc87667be
commit 1dbd439061
+28 -2
View File
@@ -548,6 +548,24 @@ if (empty($user_id)) {
function isValidMediaUrl(u) {
return (typeof u === 'string') && u.trim() !== '' && u !== 'null' && u !== 'undefined';
}
// Helper: mapear URLs externas a proxy seguro cuando sea necesario
function ensureProxyUrl(u, download = false) {
if (!isValidMediaUrl(u)) return '';
// Si ya es una URL interna o una ruta proxy, devolverla tal cual
if (u.startsWith('/') || u.indexOf('/api/version/media-url.php') === 0) return u;
try {
const parsed = new URL(u);
const host = parsed.host.toLowerCase();
// Si es Facebook lookaside / graph, preferir proxy para añadir Authorization
if (host.includes('lookaside.fbsbx.com') || host.includes('facebook.com') || host.includes('graph.facebook.com')) {
return `/api/version/media-url.php?url=${encodeURIComponent(u)}${download ? '&download=1' : ''}`;
}
} catch (e) {
// Si no es URL absoluta, devolver tal cual
}
return u;
}
// Cargar datos del usuario y mensajes
async function loadUserData() {
@@ -711,7 +729,11 @@ if (empty($user_id)) {
break;
case 'video':
// Determinar mejor fuente de media
const mediaSrcVid = isValidMediaUrl(fullUrl) ? fullUrl : (isValidMediaUrl(thumbUrl) ? thumbUrl : (isValidMediaUrl(msg.media_url) ? msg.media_url : (isValidMediaUrl(msg.media_url_external) ? msg.media_url_external : '')));
let mediaSrcVid = isValidMediaUrl(fullUrl) ? fullUrl : (isValidMediaUrl(thumbUrl) ? thumbUrl : (isValidMediaUrl(msg.media_url) ? msg.media_url : (isValidMediaUrl(msg.media_url_external) ? msg.media_url_external : '')));
// Mapear a proxy si es necesario (Facebook/media protegida)
if (isValidMediaUrl(mediaSrcVid)) {
mediaSrcVid = ensureProxyUrl(mediaSrcVid);
}
console.debug('video media src:', mediaSrcVid, 'fullUrl:', fullUrl, 'thumbUrl:', thumbUrl, 'msg.media_url:', msg.media_url, 'msg.media_url_external:', msg.media_url_external);
if (isValidMediaUrl(mediaSrcVid)) {
contentHtml = `<video controls class="message-media-video">
@@ -724,7 +746,11 @@ if (empty($user_id)) {
break;
case 'audio':
// Determinar mejor fuente de media para audio
const mediaSrcAudio = isValidMediaUrl(fullUrl) ? fullUrl : (isValidMediaUrl(thumbUrl) ? thumbUrl : (isValidMediaUrl(msg.media_url) ? msg.media_url : (isValidMediaUrl(msg.media_url_external) ? msg.media_url_external : '')));
let mediaSrcAudio = isValidMediaUrl(fullUrl) ? fullUrl : (isValidMediaUrl(thumbUrl) ? thumbUrl : (isValidMediaUrl(msg.media_url) ? msg.media_url : (isValidMediaUrl(msg.media_url_external) ? msg.media_url_external : '')));
// Mapear a proxy si es necesario (Facebook/media protegida)
if (isValidMediaUrl(mediaSrcAudio)) {
mediaSrcAudio = ensureProxyUrl(mediaSrcAudio);
}
if (isValidMediaUrl(mediaSrcAudio)) {
contentHtml = `<audio controls class="message-media-audio">
<source src="${escapeHtml(mediaSrcAudio)}" type="audio/webm">