Diverse anpassungen

This commit is contained in:
2026-02-03 23:25:37 +01:00
parent a3efbb43ae
commit d6e985998a
7 changed files with 332 additions and 94 deletions

View File

@@ -5,6 +5,40 @@ const { db } = require('../database');
const LDAPService = require('../services/ldap-service');
const { getDefaultRole } = require('../helpers/utils');
// Helper-Funktion für UTF-8 Debug-Logging
function logUsernameEncoding(label, username) {
if (!username) {
console.log(`[${label}] Username is null or undefined`);
return;
}
console.group(`🔍 ${label} - Server Console`);
console.log('Original String:', username);
console.log('String Length:', username.length);
console.log('Type:', typeof username);
// UTF-8 Byte-Repräsentation
const utf8Bytes = Buffer.from(username, 'utf8');
console.log('UTF-8 Bytes:', Array.from(utf8Bytes));
console.log('UTF-8 Bytes (Hex):', Array.from(utf8Bytes).map(b => '0x' + b.toString(16).padStart(2, '0')).join(' '));
// Einzelne Zeichen analysieren
console.log('=== Character Analysis ===');
for (let i = 0; i < username.length; i++) {
const char = username[i];
const codePoint = char.codePointAt(0);
const utf8BytesForChar = Buffer.from(char, 'utf8');
console.log(`Position ${i}: "${char}" | CodePoint: U+${codePoint.toString(16).toUpperCase().padStart(4, '0')} (${codePoint}) | UTF-8 Bytes: [${Array.from(utf8BytesForChar).join(', ')}]`);
}
// URL-Encoding Test
console.log('=== URL Encoding Test ===');
console.log('encodeURIComponent(username):', encodeURIComponent(username));
console.log('encodeURI(username):', encodeURI(username));
console.groupEnd();
}
// Helper-Funktion für erfolgreiche Anmeldung
function handleSuccessfulLogin(req, res, user, rememberMe = false) {
// Rollen als JSON-Array parsen
@@ -66,6 +100,12 @@ function registerAuthRoutes(app) {
const { username, password, remember_me } = req.body;
const rememberMe = remember_me === 'on' || remember_me === true;
// Debug-Logging: Empfangener Username vom Client
console.log('\n========== LOGIN REQUEST RECEIVED ==========');
logUsernameEncoding('Username received from client', username);
console.log('Request headers content-type:', req.headers['content-type']);
console.log('Request body keys:', Object.keys(req.body));
// Prüfe ob LDAP aktiviert ist
LDAPService.getConfig((err, ldapConfig) => {
if (err) {
@@ -73,11 +113,20 @@ function registerAuthRoutes(app) {
}
const isLDAPEnabled = ldapConfig && ldapConfig.enabled === 1;
console.log('LDAP enabled:', isLDAPEnabled);
// Wenn LDAP aktiviert ist, authentifiziere gegen LDAP
if (isLDAPEnabled) {
console.log('Starting LDAP authentication...');
LDAPService.authenticate(username, password, (authErr, authSuccess, ldapUserInfo) => {
console.log('\n========== LDAP AUTHENTICATION RESULT ==========');
console.log('authErr:', authErr ? authErr.message : null);
console.log('authSuccess:', authSuccess);
console.log('ldapUserInfo:', ldapUserInfo);
if (authErr || !authSuccess) {
console.log('LDAP authentication failed, trying local database fallback...');
logUsernameEncoding('Username for DB fallback lookup', username);
// LDAP-Authentifizierung fehlgeschlagen - prüfe lokale Datenbank als Fallback
db.get('SELECT * FROM users WHERE username = ? COLLATE NOCASE', [username], (err, user) => {
if (err || !user) {
@@ -94,6 +143,10 @@ function registerAuthRoutes(app) {
// LDAP-Authentifizierung erfolgreich - Benutzer anhand des kanonischen LDAP-Benutzernamens aus der DB holen
// (Sync speichert den exakten LDAP-Wert, z. B. "geißlerj" oder "GeisslerJ")
const dbLookupUsername = (ldapUserInfo && ldapUserInfo.username) ? ldapUserInfo.username : username;
console.log('LDAP authentication successful!');
console.log('Original username:', username);
console.log('Canonical username from LDAP:', dbLookupUsername);
logUsernameEncoding('Canonical username for DB lookup', dbLookupUsername);
db.get('SELECT * FROM users WHERE username = ? COLLATE NOCASE', [dbLookupUsername], (err, user) => {
if (err || !user) {
return res.render('login', { error: 'Benutzer nicht in der Datenbank gefunden. Bitte führen Sie eine LDAP-Synchronisation durch.' });