/* eslint-disable no-useless-return */ /* eslint-disable max-len */ /* eslint-disable no-shadow */ /* eslint-disable no-unused-vars */ /* eslint-disable consistent-return */ /* eslint-disable no-console */ var express = require('express'); var router = express.Router(); var nodemailer = require('nodemailer'); const http = require('http'); const socketIO = require('socket.io'); const { connect } = require('http2'); const app = express(); const server = http.createServer(app); const io = socketIO(server); /* GET home page. */ router.get('/', function (req, res, next) { res.render('index', { title: 'Express' }); }); /* This is merely an example and does not need to be here when all is finished */ router.get('/db_example_get_all_names', function (req, res, next) { // Used to retreive all the names and usernames of all users in the database req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } // Form our query let query = "SELECT first_name, last_name, username FROM Users"; // Query the database connection.query(query, function (query_err, rows, fields) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Check if exists if (rows.length > 0) { // Results found res.send(JSON.stringify(rows)); } else { // No results found res.sendStatus(404); } }); }); }); router.post('/db_example_create_user', function (req, res, next) { // Get the user data from the request body const { first_name, last_name, username, email, password, phone_number } = req.body; // Check if everything looks correct // console.log(first_name, last_name, username, email, password, phone_number); if (first_name === "") { res.sendStatus(400); return; } if (last_name === "") { res.sendStatus(400); return; } if (username === "") { res.sendStatus(400); return; } if (email === "") { res.sendStatus(400); return; } if (password === "") { res.sendStatus(400); return; } if (phone_number === "") { res.sendStatus(400); return; } req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } // Form our query to insert a new user let query = "INSERT INTO Users (first_name, last_name, username, email, password, phone_number) VALUES (?, ?, ?, ?, ?, ?)"; // Query the database to insert the new user connection.query( query, [first_name, last_name, username, email, password, phone_number], function (query_err, result) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Check if the user was added successfully if (result.affectedRows === 1) { // User was added successfully res.sendStatus(200); } else { // User was not added res.sendStatus(500); } } ); }); }); /* End example code */ router.post('/login', (req, res) => { const { email, password } = req.body; req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } // Form our query let query = "SELECT id, first_name, last_name, username, is_admin FROM Users WHERE email LIKE ? AND password LIKE ?"; // Query the database connection.query(query, [email, password], function (query_err, rows, fields) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Check if exists if (rows.length > 0) { req.cookies.logged_in = true; res.sendStatus(200); } }); }); }); router.post('/login_check', (req, res, next) => { if (req.cookies.logged_in === true) { console.log(req.cookies); } if (req.cookies.logged_in) { res.sendStatus(200); } else { res.sendStatus(401); // Redirect to login page or any other appropriate page } }); router.post('/sign_up', (req, res, next) => { // Get the user data from the request body const { first_name, last_name, username, email, password, phone_number } = req.body; // Check if everything looks correct // console.log(first_name, last_name, username, email, password, phone_number); if (first_name === "") { res.sendStatus(400); return; } if (last_name === "") { res.sendStatus(400); return; } if (username === "") { res.sendStatus(400); return; } if (email === "") { res.sendStatus(400); return; } if (password === "") { res.sendStatus(400); return; } if (phone_number === "") { res.sendStatus(400); return; } req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } // Form our query to insert a new user let query = "INSERT INTO Users (first_name, last_name, username, email, password, phone_number) VALUES (?, ?, ?, ?, ?, ?)"; // Query the database to insert the new user connection.query( query, [first_name, last_name, username, email, password, phone_number], function (query_err, result) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Check if the user was added successfully if (result.affectedRows === 1) { // User was added successfully res.sendStatus(200); } else { // User was not added res.sendStatus(500); } } ); }); }); const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'salihmarwan6@gmail.com', pass: 'ymddorcqytvygzxw' } }); function generateToken(length = 20) { let token = ''; const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; for (let i = 0; i < length; i++) { const randomIndex = Math.floor(Math.random() * characters.length); token += characters.charAt(randomIndex); } return token; } router.post('/reset_password', (req, res) => { const { email, username } = req.body; req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } // Check if the email exists in your database let query = 'SELECT * FROM Users WHERE email LIKE ? AND username LIKE ?'; connection.query(query, [email, username], function (query_err, rows) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); } if (rows.length === 0) { // Email doesn't exist in the database res.sendStatus(404); } else { return res.sendStatus(200); } }); let token = generateToken(); query = 'UPDATE Users SET reset_token = ? WHERE email = ?'; connection.query(query, [token, email], function (query_err, rows) { connection.release(); if (query_err) { console.error(query_err); return res.sendStatus(500); } const htmlContent = `

Confirmation Passowrd Reset

Your Password has been reset


If you did not intend to reset your password, please contact us at: salihmarwan6@gmail.com


If you did intend to reset your password, please ignore this email


Kind regards,
University Of Adelaide Clubs Support Team

`; const mailOptions = { from: 'salihmarwan6@gmail.com', to: email, subject: 'Password Reset Confrimed :)', html: htmlContent }; transporter.sendMail(mailOptions, function (query_err) { if (query_err) { console.error(query_err); res.sendStatus(500); return; } token = null; return res.sendStatus(200); }); }); }); }); /* GET request for all the clubs. */ router.get('/get_all_clubs', function (req, res, next) { req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } // Form our query let query = "SELECT id, name, description FROM Clubs"; // Query the database connection.query(query, function (query_err, rows, fields) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Send the result, I do not care if there are no results res.send(JSON.stringify(rows)); }); }); }); /* GET request for club updates */ router.get('/get_updates', function (req, res, next) { req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { console.error(connection_err); res.sendStatus(500); return; } // Form our query let query = ` SELECT name, description, posted FROM ClubUpdates ORDER BY posted DESC; `; // Query the database connection.query(query, function (query_err, rows, fields) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { console.error(query_err); res.sendStatus(500); return; } // Send the result, I do not care if there are no results res.send(JSON.stringify(rows)); }); }); }); /* GET request for club events */ router.get('/get_events', function (req, res, next) { req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { console.error(connection_err); res.sendStatus(500); return; } // Form our query let query = ` SELECT name, description, happening FROM ClubEvents WHERE happening > NOW() ORDER BY happening ASC; `; // Query the database connection.query(query, function (query_err, rows, fields) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { console.error(query_err); res.sendStatus(500); return; } // Send the result, I do not care if there are no results res.send(JSON.stringify(rows)); }); }); }); /* GET requests for club information */ router.get('/get_clubinfo', function (req, res, next) { req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } const { club_id } = req.query; let query = ` SELECT name, description FROM Clubs WHERE id = ?; `; // Query the database connection.query(query, [club_id], function (query_err, rows, fields) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Send the result, I do not care if there are no results res.send(JSON.stringify(rows)); }); }); }); router.get('/get_eventinfo', function (req, res, next) { req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } const { club_id } = req.query; let query = ` SELECT id, name, description, happening FROM ClubEvents WHERE club_id = ?; `; // Query the database connection.query(query, [club_id], function (query_err, rows, fields) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Send the result, I do not care if there are no results res.send(JSON.stringify(rows)); console.log(JSON.stringify(rows)); }); }); }); router.get('/get_eventupdates', function (req, res, next) { req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } const { club_id } = req.query; let query = ` SELECT id, name, description, posted FROM ClubUpdates WHERE club_id = ?; `; // Query the database connection.query(query, [club_id], function (query_err, rows, fields) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Send the result, I do not care if there are no results res.send(JSON.stringify(rows)); }); }); }); router.post('/new_admin', (req,res,next) => { // Get the user data from the request body const { first_name,last_name, username, admin_id, phone,email, password } = req.body; req.pool.getConnection(function (connection_err, connection) { // Error check if (connection_err) { res.sendStatus(500); return; } // Form our query to insert a new user let query = "INSERT INTO Users (first_name,last_name, username,email, password,phone_number, is_admin) VALUES (?, ?, ?, ?, ?, ?,?)"; // Query the database to insert the new user connection.query( query, [first_name, last_name, username, email,password, phone, admin_id], function (query_err, result) { // Release the connection as we have our results connection.release(); // Error check if (query_err) { res.sendStatus(500); return; } // Check if the user was added successfully if (result.affectedRows === 1) { // User was added successfully res.sendStatus(200); } else { // User was not added res.sendStatus(500); } } ); }); }); // Route to check if the user is signed in router.get('/check_signed_in', function (req, res) { return res.sendStatus(200); }); router.post('/event', (req, res) => { const { name, description, happening } = req.body; req.pool.getConnection((connection_err, connection) => { if (connection_err) { console.error('Error establishing database connection:', connection_err); res.sendStatus(500); return; } const query = 'INSERT INTO ClubEvents (club_id, name, happening, description) VALUES (?, ?, ?, ?)'; const values = [1, name, happening, description]; connection.query(query, values, (query_err, result) => { connection.release(); if (query_err) { console.error('Error executing database query:', query_err); res.sendStatus(500); return; } if (result.affectedRows === 1) { // Event was added successfully res.sendStatus(200); } else { // Event was not added res.sendStatus(500); } }); }); }); // Handle form submission for new updates router.post('/update', (req, res) => { const { updates } = req.body; // Perform validation on the form data req.pool.getConnection(function (connection_err, connection) { if (connection_err) { return res.sendStatus(500); } // Insert the new update into the database let query = 'INSERT INTO ClubUpdates (club_id, description) VALUES (?, ?)'; let values = [1, updates]; connection.query(query, values, (error, results) => { if (error) { res.sendStatus(500); } else { return res.sendStatus(200); } }); }); }); module.exports = router;