password check before email change
This commit is contained in:
31
index.js
31
index.js
@@ -863,7 +863,11 @@ app.delete('/delete_account', authenticateToken, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
app.post('/request-email-change', authenticateToken, async (req, res) => {
|
app.post('/request-email-change', authenticateToken, async (req, res) => {
|
||||||
const { newEmail, localHour } = req.body;
|
const { password, newEmail, localHour } = req.body;
|
||||||
|
|
||||||
|
if (!password) {
|
||||||
|
return res.status(400).json({ error: 'Password is required' });
|
||||||
|
}
|
||||||
|
|
||||||
if (!newEmail) {
|
if (!newEmail) {
|
||||||
return res.status(400).json({ error: 'New email is required' });
|
return res.status(400).json({ error: 'New email is required' });
|
||||||
@@ -876,19 +880,30 @@ app.post('/request-email-change', authenticateToken, async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Get user info and verify password
|
||||||
|
const {rows: userRows} = await pool.query(
|
||||||
|
'SELECT name, email, password_hash_string FROM users WHERE id = $1',
|
||||||
|
[req.user]
|
||||||
|
);
|
||||||
|
|
||||||
|
if (userRows.length === 0) {
|
||||||
|
return res.status(404).json({ error: 'User not found' });
|
||||||
|
}
|
||||||
|
|
||||||
|
const user = userRows[0];
|
||||||
|
|
||||||
|
// Verify password
|
||||||
|
const passwordVerified = await verify(user.password_hash_string, password);
|
||||||
|
if (!passwordVerified) {
|
||||||
|
return res.status(401).json({ error: 'Password is incorrect' });
|
||||||
|
}
|
||||||
|
|
||||||
// Check if new email is already in use
|
// Check if new email is already in use
|
||||||
const {rows: emailCheck} = await pool.query('SELECT id FROM users WHERE email = $1', [newEmail]);
|
const {rows: emailCheck} = await pool.query('SELECT id FROM users WHERE email = $1', [newEmail]);
|
||||||
if (emailCheck.length > 0) {
|
if (emailCheck.length > 0) {
|
||||||
return res.status(409).json({ error: 'Email already in use' });
|
return res.status(409).json({ error: 'Email already in use' });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get user info
|
|
||||||
const {rows: userRows} = await pool.query('SELECT name, email FROM users WHERE id = $1', [req.user]);
|
|
||||||
if (userRows.length === 0) {
|
|
||||||
return res.status(404).json({ error: 'User not found' });
|
|
||||||
}
|
|
||||||
|
|
||||||
const user = userRows[0];
|
|
||||||
const token = crypto.randomBytes(32).toString('hex');
|
const token = crypto.randomBytes(32).toString('hex');
|
||||||
const expiresAt = new Date(Date.now() + 15 * 60 * 1000); // 15 minutes
|
const expiresAt = new Date(Date.now() + 15 * 60 * 1000); // 15 minutes
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user