Update main.js

This commit is contained in:
ErikrafT 2025-05-07 20:01:18 -03:00 committed by GitHub
parent f06286ff81
commit 4de460bddf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 60 additions and 10 deletions

View File

@ -253,11 +253,12 @@ async function handleReceivedFile(file) {
// Verifica se é uma imagem ou vídeo // Verifica se é uma imagem ou vídeo
if (file.type.startsWith('image/') || file.type.startsWith('video/')) { if (file.type.startsWith('image/') || file.type.startsWith('video/')) {
console.log('Verificando conteúdo NSFW...'); console.log('Verificando conteúdo NSFW...');
const isNSFW = await contentModeration.checkNSFW(file); const nsfwResult = await contentModeration.checkNSFW(file);
console.log('Resultado NSFW:', isNSFW); console.log('Resultado NSFW:', nsfwResult);
if (isNSFW) { if (nsfwResult.isNSFW) {
console.log('Conteúdo explícito detectado, mostrando aviso...'); console.log('Conteúdo explícito detectado, mostrando aviso...');
// Cria elemento borrado // Cria elemento borrado
const mediaElement = document.createElement(file.type.startsWith('image/') ? 'img' : 'video'); const mediaElement = document.createElement(file.type.startsWith('image/') ? 'img' : 'video');
mediaElement.className = 'media-preview blurred-content'; mediaElement.className = 'media-preview blurred-content';
@ -280,23 +281,72 @@ async function handleReceivedFile(file) {
const hasOffensiveWords = contentModeration.hasBlockedWordsWithSubstitutions(file.name); const hasOffensiveWords = contentModeration.hasBlockedWordsWithSubstitutions(file.name);
if (spamCheck.isSpam || hasOffensiveWords) { if (spamCheck.isSpam || hasOffensiveWords) {
console.log('Nome do arquivo contém conteúdo impróprio'); console.log('Conteúdo potencialmente perigoso detectado');
const contentType = hasOffensiveWords ? 'offensive' : 'spam'; const shouldView = await contentModeration.showWarningDialog(file, spamCheck.contentType || 'spam');
const shouldView = await contentModeration.showWarningDialog(file, contentType);
if (!shouldView) { if (!shouldView) {
console.log('Usuário recusou visualizar o arquivo'); console.log('Usuário recusou visualizar o conteúdo');
return; return;
} }
} }
// Se chegou aqui, processa o arquivo normalmente // Verifica URLs no conteúdo
console.log('Processando arquivo normalmente'); if (file.type === 'text/plain') {
processFile(file); const text = await file.text();
const urlRegex = /https?:\/\/[^\s]+/g;
const urls = text.match(urlRegex) || [];
for (const url of urls) {
const isSuspicious = await contentModeration.checkUrl(url);
if (isSuspicious) {
console.log('URL suspeita detectada:', url);
const shouldView = await contentModeration.showWarningDialog(file, 'scam');
if (!shouldView) {
console.log('Usuário recusou visualizar o conteúdo');
return;
}
}
}
}
// Processa o arquivo normalmente
return file;
} catch (error) { } catch (error) {
console.error('Erro ao processar arquivo:', error); console.error('Erro ao processar arquivo:', error);
throw error;
} }
} }
// Intercepta o WebRTC para verificar arquivos antes do compartilhamento
function interceptWebRTC() {
const originalPeerConnection = window.RTCPeerConnection;
window.RTCPeerConnection = function(...args) {
const pc = new originalPeerConnection(...args);
// Intercepta o método de envio de dados
const originalSend = pc.send;
pc.send = async function(data) {
if (data instanceof Blob || data instanceof File) {
try {
const processedFile = await handleReceivedFile(data);
if (!processedFile) {
throw new Error('Arquivo bloqueado pelo sistema de moderação');
}
return originalSend.call(this, processedFile);
} catch (error) {
console.error('Erro ao processar arquivo:', error);
throw error;
}
}
return originalSend.call(this, data);
};
return pc;
};
}
// Inicializa a interceptação do WebRTC
interceptWebRTC();
// Função para processar mensagens recebidas // Função para processar mensagens recebidas
function handleReceivedMessage(message) { function handleReceivedMessage(message) {
try { try {