Implement login functionality in ChatInput and chat store. Update input handling to support username and password prompts, enhance message sending logic, and ensure proper command handling during login. Adjust broadcast logic to manage login states and provide appropriate feedback to users.
This commit is contained in:
@@ -320,9 +320,9 @@ export function setupBroadcast(io, __dirname) {
|
||||
downloadCountries();
|
||||
setInterval(downloadCountries, 24 * 60 * 60 * 1000); // Täglich aktualisieren
|
||||
|
||||
function sendCommandResult(socket, lines) {
|
||||
function sendCommandResult(socket, lines, kind = 'info') {
|
||||
const payload = Array.isArray(lines) ? lines : [String(lines)];
|
||||
socket.emit('commandResult', { lines: payload });
|
||||
socket.emit('commandResult', { lines: payload, kind });
|
||||
}
|
||||
|
||||
function hasRight(client, right) {
|
||||
@@ -536,15 +536,21 @@ export function setupBroadcast(io, __dirname) {
|
||||
function executeCommand(socket, client, rawInput) {
|
||||
const input = rawInput.trim();
|
||||
|
||||
if (client.pendingChatLogin) {
|
||||
if (!input.startsWith('/')) return false;
|
||||
|
||||
const parts = input.split(/\s+/);
|
||||
const command = parts[0].toLowerCase();
|
||||
|
||||
// Laufender Login-Dialog: Nur Eingaben ohne Slash als Username/Passwort behandeln.
|
||||
if (client.pendingChatLogin && !input.startsWith('/')) {
|
||||
if (client.pendingChatLogin.step === 'username') {
|
||||
const enteredUser = input;
|
||||
if (!enteredUser) {
|
||||
sendCommandResult(socket, 'Username darf nicht leer sein. Bitte Username eingeben:');
|
||||
sendCommandResult(socket, 'Username darf nicht leer sein. Bitte Username eingeben:', 'loginPromptUsername');
|
||||
return true;
|
||||
}
|
||||
client.pendingChatLogin = { step: 'password', username: enteredUser };
|
||||
sendCommandResult(socket, 'Passwort eingeben:');
|
||||
sendCommandResult(socket, 'Passwort eingeben:', 'loginPromptPassword');
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -553,32 +559,33 @@ export function setupBroadcast(io, __dirname) {
|
||||
const auth = verifyChatUser(username, input);
|
||||
client.pendingChatLogin = null;
|
||||
if (!auth) {
|
||||
sendCommandResult(socket, 'Login fehlgeschlagen. Benutzername oder Passwort falsch.');
|
||||
sendCommandResult(socket, 'Login fehlgeschlagen. Benutzername oder Passwort falsch.', 'loginError');
|
||||
return true;
|
||||
}
|
||||
|
||||
client.chatAuth = auth;
|
||||
sendCommandResult(
|
||||
socket,
|
||||
`Login erfolgreich als ${auth.username}. Rechte: ${Array.from(auth.rights).join(', ') || 'keine'}`
|
||||
`Login erfolgreich als ${auth.username}. Rechte: ${Array.from(auth.rights).join(', ') || 'keine'}`,
|
||||
'loginSuccess'
|
||||
);
|
||||
return true;
|
||||
}
|
||||
} else if (client.pendingChatLogin && input.startsWith('/')) {
|
||||
// Ein neuer /Befehl bricht den Login-Vorgang ab.
|
||||
client.pendingChatLogin = null;
|
||||
sendCommandResult(socket, 'Login-Vorgang abgebrochen.', 'loginAbort');
|
||||
// und läuft unten als normaler Befehl weiter
|
||||
}
|
||||
|
||||
if (!input.startsWith('/')) return false;
|
||||
|
||||
const parts = input.split(/\s+/);
|
||||
const command = parts[0].toLowerCase();
|
||||
|
||||
if (command === '/login') {
|
||||
const username = (parts[1] || '').trim();
|
||||
if (username) {
|
||||
client.pendingChatLogin = { step: 'password', username };
|
||||
sendCommandResult(socket, 'Passwort eingeben:');
|
||||
sendCommandResult(socket, 'Passwort eingeben:', 'loginPromptPassword');
|
||||
} else {
|
||||
client.pendingChatLogin = { step: 'username', username: '' };
|
||||
sendCommandResult(socket, 'Username eingeben:');
|
||||
sendCommandResult(socket, 'Username eingeben:', 'loginPromptUsername');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -591,20 +598,35 @@ export function setupBroadcast(io, __dirname) {
|
||||
socket,
|
||||
wasLoggedIn
|
||||
? 'Admin/Command-Login wurde abgemeldet.'
|
||||
: 'Es war kein Admin/Command-Login aktiv.'
|
||||
: 'Es war kein Admin/Command-Login aktiv.',
|
||||
'loginLogout'
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (command === '/whoami-rights') {
|
||||
if (!client.chatAuth) {
|
||||
sendCommandResult(socket, 'Nicht per Command-Login angemeldet.');
|
||||
sendCommandResult(socket, 'Nicht per Command-Login angemeldet.', 'whoami');
|
||||
return true;
|
||||
}
|
||||
sendCommandResult(socket, [
|
||||
`Angemeldet als: ${client.chatAuth.username}`,
|
||||
`Rechte: ${Array.from(client.chatAuth.rights).join(', ') || 'keine'}`
|
||||
]);
|
||||
], 'whoami');
|
||||
return true;
|
||||
}
|
||||
|
||||
if (command === '/help' || command === '/?') {
|
||||
sendCommandResult(socket, [
|
||||
'Verfügbare Befehle:',
|
||||
'/login [username] - Admin-/Command-Login starten',
|
||||
'/logout-admin - Admin-/Command-Login beenden',
|
||||
'/whoami-rights - Aktuelle Admin-Rechte anzeigen',
|
||||
'/stat help - Hilfe zu Statistikbefehlen',
|
||||
'/all-stats - Zusammenfassung wichtiger Statistiken',
|
||||
'/kick <username> - Benutzer aus dem Chat werfen',
|
||||
'/help oder /? - Diese Hilfe'
|
||||
], 'help');
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -623,7 +645,7 @@ export function setupBroadcast(io, __dirname) {
|
||||
return true;
|
||||
}
|
||||
|
||||
sendCommandResult(socket, `Unbekannter Befehl: ${command}`);
|
||||
sendCommandResult(socket, `Unbekannter Befehl: ${command}`, 'unknown');
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user