const User = require('../models/User'); const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); // Registrierungs-Controller const register = async (req, res) => { const { username, email, password } = req.body; try { // Überprüfen, ob Benutzername oder E-Mail bereits existieren let user = await User.findOne({ $or: [{ username }, { email }] }); if (user) { return res.status(400).json({ message: 'Benutzername oder E-Mail bereits vergeben' }); } // Überprüfen, ob es sich um den ersten Benutzer handelt const userCount = await User.countDocuments(); const isAdmin = userCount === 0; // Erster Benutzer wird Admin // Passwort hashen const hashedPassword = await bcrypt.hash(password, 10); // Neuen Benutzer erstellen user = new User({ username, email, password: hashedPassword, isAdmin, }); await user.save(); res.status(201).json({ message: 'Registrierung erfolgreich' }); } catch (error) { res.status(500).json({ message: 'Serverfehler' }); } }; // Login-Controller const login = async (req, res) => { const { email, password } = req.body; try { // Benutzer anhand der E-Mail suchen const user = await User.findOne({ email }); if (!user) { return res.status(400).json({ message: 'Ungültige Anmeldedaten' }); } // Passwort überprüfen const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return res.status(400).json({ message: 'Ungültige Anmeldedaten' }); } // JWT-Token erstellen mit benutzerdefinierten Daten const token = jwt.sign({ id: user._id, username: user.username, isAdmin: user.isAdmin }, process.env.JWT_SECRET, { expiresIn: '1h' }); res.status(200).json({ token, message: 'Login erfolgreich' }); } catch (error) { res.status(500).json({ message: 'Serverfehler' }); } }; module.exports = { register, login };