import React, { useState, useEffect, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { toast } from 'react-toastify'; const LoginPage = () => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [showPassword, setShowPassword] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [showForgotModal, setShowForgotModal] = useState(false); const { login, loginWithToken } = useAuth(); const navigate = useNavigate(); const errRef = useRef(null); // Handle OAuth2 callback useEffect(() => { const params = new URLSearchParams(window.location.search); const token = params.get('token'); const userParam = params.get('user'); const err = params.get('error'); if (err) { const messages = { auth_failed: 'Microsoft-Anmeldung fehlgeschlagen.', account_inactive: 'Ihr Konto ist deaktiviert. Bitte kontaktieren Sie den Administrator.', azure_not_configured: 'Microsoft-Login ist nicht konfiguriert.', token_failed: 'Token-Austausch fehlgeschlagen.', internal_error: 'Interner Fehler beim Microsoft-Login.', }; setError(messages[err] || 'Anmeldung fehlgeschlagen.'); window.history.replaceState({}, '', '/login'); return; } if (token && userParam) { try { const user = JSON.parse(decodeURIComponent(userParam)); loginWithToken(token, user); window.history.replaceState({}, '', '/'); toast.success(`Willkommen, ${user.first_name || user.username}!`); navigate(user.must_change_password ? '/change-password' : '/dashboard'); } catch { setError('Fehler bei der Microsoft-Anmeldung.'); window.history.replaceState({}, '', '/login'); } } }, []); const handleSubmit = async (e) => { e.preventDefault(); setError(''); if (!username || !password) { setError('Bitte Benutzername und Passwort eingeben.'); return; } setLoading(true); try { const data = await login(username, password); navigate(data.user.must_change_password ? '/change-password' : '/dashboard'); toast.success('Erfolgreich angemeldet!'); } catch (err) { setError(err.message || 'Login fehlgeschlagen. Bitte überprüfen Sie Ihre Zugangsdaten.'); } finally { setLoading(false); } }; return (
{/* ── LEFT: Brand ── */} {/* ── RIGHT: Login Form ── */}

Anmelden.

Willkommen zurück — wähle deinen Weg.

oder mit Benutzername
setUsername(e.target.value)} placeholder="benutzername" autoComplete="username" autoFocus required />
setPassword(e.target.value)} placeholder="••••••••••" autoComplete="current-password" required />
{error && (
{error}
)}
Developed by Simon Grüßing · Cereda Systems GmbH
{/* Passwort vergessen Modal */} {showForgotModal && (
setShowForgotModal(false)}>
e.stopPropagation()}>

Passwort vergessen?

Bitte wenden Sie sich an Ihren Administrator, um Ihr Passwort zurückzusetzen.

Aus Sicherheitsgründen können Passwörter nur von Administratoren zurückgesetzt werden.

)}
); }; export default LoginPage;