This commit is contained in:
cay 2026-03-28 08:26:15 +00:00
parent b2784e7b63
commit 8c38fd2b5d
2 changed files with 29 additions and 45 deletions

View File

@ -236,49 +236,4 @@ router.post('/submit-membership', async (req, res) => {
}
});
// ============================================
// GET /confirm/:token — E-Mail Bestätigung
// ============================================
router.get('/confirm/:token', async (req, res) => {
try {
const [rows] = await db.query(
"SELECT * FROM memberships WHERE confirmation_token = ? AND status = 'pending'",
[req.params.token]
);
if (rows.length === 0) {
// Prüfen ob bereits bestätigt
const [confirmed] = await db.query(
"SELECT * FROM memberships WHERE confirmation_token = ? AND status = 'active'",
[req.params.token]
);
if (confirmed.length > 0) {
return res.render('confirmation-success'); // Bereits bestätigt
}
return res.render('confirmation-invalid');
}
const member = rows[0];
// Prüfen ob Link abgelaufen (24h)
const createdAt = new Date(member.created_at);
const now = new Date();
const hoursDiff = (now - createdAt) / (1000 * 60 * 60);
if (hoursDiff > 24) {
return res.render('confirmation-invalid');
}
// Mitgliedschaft aktivieren
await db.query(
"UPDATE memberships SET status='active', confirmed_at=NOW() WHERE id=?",
[member.id]
);
res.render('confirmation-success');
} catch (err) {
console.error('Confirm error:', err);
res.render('error', { message: 'Fehler bei der Bestätigung.' });
}
});
module.exports = router;

View File

@ -37,6 +37,35 @@ router.get('/bestaetigung-ausstehend', (req, res) => {
res.render('confirmation-pending', { email: req.query.email || '' });
});
// E-Mail Bestätigung
router.get('/confirm/:token', async (req, res) => {
try {
const [rows] = await db.query(
"SELECT * FROM memberships WHERE confirmation_token = ? AND status = 'pending'",
[req.params.token]
);
if (rows.length === 0) {
const [confirmed] = await db.query(
"SELECT * FROM memberships WHERE confirmation_token = ? AND status = 'active'",
[req.params.token]
);
if (confirmed.length > 0) return res.render('confirmation-success');
return res.render('confirmation-invalid');
}
const member = rows[0];
const hoursDiff = (new Date() - new Date(member.created_at)) / (1000 * 60 * 60);
if (hoursDiff > 24) return res.render('confirmation-invalid');
await db.query(
"UPDATE memberships SET status='active', confirmed_at=NOW() WHERE id=?",
[member.id]
);
res.render('confirmation-success');
} catch (err) {
console.error('Confirm error:', err);
res.render('error', { message: 'Fehler bei der Bestätigung.' });
}
});
// Erfolgsseite
router.get('/erfolg', (req, res) => {
res.render('success');