From 02c84bc6febeb5142c5ec105e449998e27a6a791 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 29 Nov 2025 23:42:59 +0100 Subject: [PATCH] anonymous users Signed-off-by: ale --- server.js | 8 +++++ src/components/Chat.js | 69 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/server.js b/server.js index 640e83f..6bd7a48 100644 --- a/server.js +++ b/server.js @@ -300,6 +300,14 @@ app.prepare().then(() => { return; } + // Validar que usuarios normales no puedan usar el prefijo "anon" + // Solo permitir si viene exactamente con el formato anon#### (4 dígitos) + const anonPattern = /^anon\d{4}$/; + if (username.toLowerCase().startsWith('anon') && !anonPattern.test(username)) { + socket.emit('error', 'El prefijo "anon" está reservado para usuarios anónimos del sistema'); + return; + } + // Verificar si el usuario ya existe const existingUser = Array.from(connectedUsers.values()).find(u => u.username === username); if (existingUser) { diff --git a/src/components/Chat.js b/src/components/Chat.js index db57d7e..7ab5d5f 100644 --- a/src/components/Chat.js +++ b/src/components/Chat.js @@ -16,6 +16,7 @@ export default function Chat({ username, onUsernameChange, onSocketReady, onWatc const [tempUsername, setTempUsername] = useState(username || ''); const [hoveredUser, setHoveredUser] = useState(null); const [showCopiedTooltip, setShowCopiedTooltip] = useState(false); + const [showUsernameForm, setShowUsernameForm] = useState(false); const messagesEndRef = useRef(null); // Auto-scroll al final de los mensajes @@ -124,6 +125,16 @@ export default function Chat({ username, onUsernameChange, onSocketReady, onWatc newSocket.on('error', (error) => { console.error('Error del servidor:', error); + + // Si el error es sobre el prefijo "anon", resetear el usuario para que vuelva al formulario + if (error.includes('prefijo "anon"') || error.includes('anon')) { + alert(error); + if (onUsernameChange) { + onUsernameChange(''); + } + return; + } + setMessages(prev => [ ...prev, { @@ -164,10 +175,33 @@ export default function Chat({ username, onUsernameChange, onSocketReady, onWatc const handleUsernameSubmit = (e) => { e.preventDefault(); - if (tempUsername.trim().length >= 2) { - if (onUsernameChange) { - onUsernameChange(tempUsername.trim()); - } + + // Si no hay nombre, usar anónimo + if (!tempUsername.trim() || tempUsername.trim().length < 2) { + handleSkipUsername(); + return; + } + + const normalizedUsername = tempUsername.trim(); + + // Validar que no use el prefijo reservado "anon" + if (normalizedUsername.toLowerCase().startsWith('anon')) { + alert('⚠️ El prefijo "anon" está reservado para usuarios anónimos.\n\nPor favor, elige otro nombre de usuario.'); + return; + } + + if (onUsernameChange) { + onUsernameChange(normalizedUsername); + } + }; + + const handleSkipUsername = () => { + // Generar usuario anónimo: anon + 4 dígitos aleatorios + const randomNum = Math.floor(1000 + Math.random() * 9000); + const anonUsername = `anon${randomNum}`; + + if (onUsernameChange) { + onUsernameChange(anonUsername); } }; @@ -192,7 +226,7 @@ export default function Chat({ username, onUsernameChange, onSocketReady, onWatc
+

+ 🚫 El prefijo "anon" está reservado para usuarios anónimos +

+
+
+ +
-
);