diff --git a/Sean/server.js b/Sean/server.js index 472d6d3..3aa824f 100644 --- a/Sean/server.js +++ b/Sean/server.js @@ -207,57 +207,80 @@ app.post('/createUser', (req, res) => { return res.status(400).json({ error: 'Password does not meet complexity requirements' }); } - // Hash the password before storing it in the database - bcrypt.hash(password, 10, (hashError, hashedPassword) => { - if (hashError) { - console.error('Error hashing password:', hashError); - res.status(500).json({ error: 'Internal Server Error' }); - return; + // Check if the username is already taken + const checkUsernameQuery = 'SELECT * FROM users WHERE username = ?'; + mysqlConnection.query(checkUsernameQuery, [username], (usernameQueryErr, usernameResults) => { + if (usernameQueryErr) { + console.error('Error checking username:', usernameQueryErr); + return res.status(500).json({ error: 'Internal Server Error' }); } - // Start a transaction - mysqlConnection.beginTransaction((transactionErr) => { - if (transactionErr) { - console.error('Error starting transaction:', transactionErr); - res.status(500).json({ error: 'Internal Server Error' }); - return; + if (usernameResults.length > 0) { + return res.status(400).json({ error: 'Username is already taken', message: 'Username is already taken. Please choose a different username.' }); + } + + // Check if the email is already taken + const checkEmailQuery = 'SELECT * FROM users WHERE email = ?'; + mysqlConnection.query(checkEmailQuery, [email], (emailQueryErr, emailResults) => { + if (emailQueryErr) { + console.error('Error checking email:', emailQueryErr); + return res.status(500).json({ error: 'Internal Server Error' }); } - // Define the insert query - const insertUserQuery = 'INSERT INTO users (name, username, email, password, lastLogin, jobTitle) VALUES (?, ?, ?, ?, NULL, ?)'; + if (emailResults.length > 0) { + return res.status(400).json({ error: 'Email is already in use', message: 'Email is already in use. Please choose another email.' }); + } - // Log the query and its parameters - console.log('Insert Query:', insertUserQuery); - console.log('Query Parameters:', [name, username, email, hashedPassword, jobTitle]); - - // Execute the query with user data - mysqlConnection.query(insertUserQuery, [name, username, email, hashedPassword, jobTitle], (queryErr, results) => { - if (queryErr) { - console.error('Error executing query:', queryErr); - - // Rollback the transaction in case of an error - mysqlConnection.rollback((rollbackErr) => { - if (rollbackErr) { - console.error('Error rolling back transaction:', rollbackErr); - } - res.status(500).json({ error: 'Internal Server Error' }); - }); - return; + // Hash the password before storing it in the database + bcrypt.hash(password, 10, (hashError, hashedPassword) => { + if (hashError) { + console.error('Error hashing password:', hashError); + return res.status(500).json({ error: 'Internal Server Error' }); } - // Commit the transaction - mysqlConnection.commit((commitErr) => { - if (commitErr) { - console.error('Error committing transaction:', commitErr); - res.status(500).json({ error: 'Internal Server Error' }); - return; + // Start a transaction + mysqlConnection.beginTransaction((transactionErr) => { + if (transactionErr) { + console.error('Error starting transaction:', transactionErr); + return res.status(500).json({ error: 'Internal Server Error' }); } - // Log the results of the query - console.log('Query Results:', results); + // Define the insert query + const insertUserQuery = 'INSERT INTO users (name, username, email, password, lastLogin, jobTitle) VALUES (?, ?, ?, ?, NULL, ?)'; - // Respond with a success message - res.status(201).json({ message: 'User created successfully' }); + // Log the query and its parameters + console.log('Insert Query:', insertUserQuery); + console.log('Query Parameters:', [name, username, email, hashedPassword, jobTitle]); + + // Execute the query with user data + mysqlConnection.query(insertUserQuery, [name, username, email, hashedPassword, jobTitle], (queryErr, results) => { + if (queryErr) { + console.error('Error executing query:', queryErr); + + // Rollback the transaction in case of an error + mysqlConnection.rollback((rollbackErr) => { + if (rollbackErr) { + console.error('Error rolling back transaction:', rollbackErr); + } + return res.status(500).json({ error: 'Internal Server Error' }); + }); + return; + } + + // Commit the transaction + mysqlConnection.commit((commitErr) => { + if (commitErr) { + console.error('Error committing transaction:', commitErr); + return res.status(500).json({ error: 'Internal Server Error' }); + } + + // Log the results of the query + console.log('Query Results:', results); + + // Respond with a success message + res.status(201).json({ message: 'User created successfully' }); + }); + }); }); }); }); @@ -268,6 +291,82 @@ app.post('/createUser', (req, res) => { } }); + + +app.post('/check-username-email', (req, res) => { + try { + const { username, email } = req.body; + + // Check if the username is already taken + const checkUsernameQuery = 'SELECT * FROM users WHERE username = ?'; + mysqlConnection.query(checkUsernameQuery, [username], (usernameQueryErr, usernameResults) => { + if (usernameQueryErr) { + console.error('Error checking username:', usernameQueryErr); + return res.status(500).json({ error: 'Internal Server Error' }); + } + + // Check if the email is already taken + const checkEmailQuery = 'SELECT * FROM users WHERE email = ?'; + mysqlConnection.query(checkEmailQuery, [email], (emailQueryErr, emailResults) => { + if (emailQueryErr) { + console.error('Error checking email:', emailQueryErr); + return res.status(500).json({ error: 'Internal Server Error' }); + } + + if (usernameResults.length === 0 && emailResults.length === 0) { + // Both username and email are available + return res.status(200).json({ available: true }); + } else { + // Either username or email is already taken + return res.status(400).json({ error: 'Username or email already taken' }); + } + }); + }); + } catch (error) { + console.error('Error checking username and email:', error); + res.status(500).json({ error: 'Internal Server Error' }); + } +}); + + +app.post('/check-username', (req, res) => { + const { username } = req.body; + + const checkUsernameQuery = 'SELECT * FROM users WHERE username = ?'; + mysqlConnection.query(checkUsernameQuery, [username], (error, results) => { + if (error) { + console.error('Error checking username:', error); + res.status(500).json({ error: 'Internal Server Error' }); + } else { + const isAvailable = results.length === 0; + res.json({ available: isAvailable }); + } + }); +}); + +// Assuming you have an instance of express named 'app' +app.post('/check-email', (req, res) => { + const { email } = req.body; + + // Check if the email is already taken in the database + const checkEmailQuery = 'SELECT * FROM users WHERE email = ?'; + mysqlConnection.query(checkEmailQuery, [email], (error, results) => { + if (error) { + console.error('Error checking email:', error); + res.status(500).json({ error: 'Internal Server Error' }); + return; + } + + // If results.length is greater than 0, it means the email is already taken + const isEmailAvailable = results.length === 0; + + // Return a JSON response indicating whether the email is available or not + res.json({ available: isEmailAvailable }); + }); +}); + + + app.get('/forgot-password', (req, res) => { res.render('forgot-password'); // Assuming you have an EJS template for this }); @@ -449,6 +548,9 @@ async function checkIfUserExists(username) { }); }); } + + + app.use(express.static('views')); app.listen(PORT, () => { diff --git a/Sean/views/inusers.ejs b/Sean/views/inusers.ejs index 53acf10..f54fe68 100644 --- a/Sean/views/inusers.ejs +++ b/Sean/views/inusers.ejs @@ -145,7 +145,7 @@