feat: enhance user registration with email verification configuration and status handling

This commit is contained in:
LaurensBartelds committed 2026-04-25 16:31:27 +02:00
1 parent 4f33444653
commit f7b93f8612
3 files changed
+32 -13

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@ import { fileURLToPath } from 'url'
import { runMigrations } from './migrations.js'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const DB_PATH = path.join(__dirname, '..', '..', 'brainwave.db')
const DB_PATH = path.join(__dirname, '..', '..', 'db', 'brainwave.db')
let db: Database.Database | null = null
+27 -12
View File
@@ -2,7 +2,7 @@ import { Router } from 'express'
import bcrypt from 'bcrypt'
import { getDb } from '../db/database.js'
import { signToken, generateVerificationToken } from '../utils/tokens.js'
import { sendVerificationEmail, sendPasswordResetEmail } from '../utils/email.js'
import { sendVerificationEmail, sendPasswordResetEmail, isEmailConfigured } from '../utils/email.js'
import { requireAuth } from '../middleware/auth.js'
const router = Router()
@@ -40,20 +40,35 @@ router.post('/register', async (req, res) => {
}
const passwordHash = await bcrypt.hash(password, BCRYPT_ROUNDS)
const verifyToken = generateVerificationToken()
const verifyExpires = Date.now() + VERIFY_EXPIRY_MS
const emailConfigured = isEmailConfigured()
let verifyToken: string | null = null
let verifyExpires: number | null = null
let emailVerified = 1
if (emailConfigured) {
verifyToken = generateVerificationToken()
verifyExpires = Date.now() + VERIFY_EXPIRY_MS
emailVerified = 0
}
const result = db.prepare(`
INSERT INTO users (email, password_hash, display_name, verify_token, verify_expires)
VALUES (?, ?, ?, ?, ?)
`).run(email.toLowerCase().trim(), passwordHash, displayName.trim(), verifyToken, verifyExpires)
INSERT INTO users (email, password_hash, display_name, verify_token, verify_expires, email_verified)
VALUES (?, ?, ?, ?, ?, ?)
`).run(email.toLowerCase().trim(), passwordHash, displayName.trim(), verifyToken, verifyExpires, emailVerified)
await sendVerificationEmail(email, verifyToken)
res.status(201).json({
message: 'Account created. Please check your email to verify your account.',
userId: result.lastInsertRowid,
})
if (emailConfigured) {
await sendVerificationEmail(email, verifyToken!)
res.status(201).json({
message: 'Account created. Please check your email to verify your account.',
userId: result.lastInsertRowid,
})
} else {
res.status(201).json({
message: 'Account created and verified. You can now log in.',
userId: result.lastInsertRowid,
})
}
} catch (err) {
console.error('Register error:', err)
res.status(500).json({ error: 'Internal server error' })
+4
View File
@@ -38,6 +38,10 @@ function getSetting(key: string): string {
return row?.value ?? "";
}
export function isEmailConfigured(): boolean {
return !!getSetting("smtp_host").trim();
}
function getSmtpConfig(): SmtpConfig | null {
const host = getSetting("smtp_host").trim();
if (!host) return null;