const bcrypt = require("bcrypt"); const db = require("../config/database"); const HouseholdService = require("../services/HouseholdService"); class AuthController { registerForm(req, res) { res.render("auth/register", { title: "Registreren" }); } async register(req, res) { const { name, email, password } = req.body; const existingUser = db.prepare( "SELECT id FROM users WHERE email = ?" ).get(email); if (existingUser) { req.flash( "error", "E-mailadres bestaat al" ); return res.redirect("/register"); } const passwordHash = await bcrypt.hash( password, 12 ); const result = db.prepare(` INSERT INTO users ( name, email, password ) VALUES (?, ?, ?) `).run( name, email, passwordHash ); const userId = result.lastInsertRowid; HouseholdService.createForUser( userId, `${name} huishouden` ); req.session.userId = userId; res.redirect("/"); } loginForm(req, res) { res.render("auth/login", { title: "Inloggen" }); } async login(req, res) { const { email, password } = req.body; const user = db.prepare( "SELECT * FROM users WHERE email = ?" ).get(email); if (!user) { req.flash( "error", "Ongeldige gegevens" ); return res.redirect("/login"); } const valid = await bcrypt.compare( password, user.password ); if (!valid) { req.flash( "error", "Ongeldige gegevens" ); return res.redirect("/login"); } req.session.userId = user.id; res.redirect("/"); } logout(req, res) { req.session.destroy(() => { res.redirect("/login"); }); } } module.exports = new AuthController();