//import mariadb import ownConn from "../dbConfig.js"; import bcrypt from "bcryptjs"; import jwt from "jsonwebtoken"; import { v4 as uuidv4 } from 'uuid'; import { getUsers, getUserById, updateUserById, deleteUserById, } from "../models/usersModel.js"; //insert user to databased export const signUp = async (req, res, next) => { try { let sql = `SELECT id FROM users WHERE LOWER(username) = LOWER(?)`; const result = await ownConn.execute(sql, [req.body.username]) if (result.length > 0) { //username already exists return res.status(409).send({ message: 'This username is already in use!' }); } else { // username not in use bcrypt.hash(req.body.password, 10, (err, hash) => { if (err) { throw err; return res.status(500).send({ message: err, }); } else { const currentTime = new Date(); const options = { timeZone: 'Europe/Berlin', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }; const dateTimeString = currentTime.toLocaleString('de-DE', options); const results = ownConn.query(`INSERT INTO users(id, username, password, registered, fullName, email, phonenumber, address, city, postcode, adminBool, technician1Bool, technician2Bool, technicianMonitoringBool, merchantBool, internBool) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ uuidv4(), req.body.username, hash, dateTimeString, req.body.fullName, req.body.email, req.body.phonenumber, req.body.address, req.body.city, req.body.postcode, req.body.adminBool, req.body.technician1Bool, req.body.technician2Bool, req.body.technicianMonitoringBool, req.body.merchantBool, req.body.internBool, ]); return res.status(201).send({ message: "Registered!", }) } }) } } catch (err) { // Manage Errors console.log("SQL error : ", err); result(err, null); } }; export const login = async (req, res, next) => { try { let sql = `SELECT * FROM users WHERE username = ?`; const result = await ownConn.execute(sql, [req.body.username]); if (!result.length) { return res.status(400).send({ message: 'Username or password incorrect!', }); } bcrypt.compare( req.body.password, result[0]['password'], async (bErr, bResult) => { if (bErr) { return res.status(400).send({ message: 'Username or password incorrect!', }); } if (bResult) { // password match const authtoken = jwt.sign( { username: result[0].username, userId: result[0].id, }, 'SECRETTUEITKEY', { expiresIn: '300s' } // 5min ); const refreshtoken = jwt.sign( { username: result[0].username, userId: result[0].id, }, 'SECRETTUEITKEY', { expiresIn: '7d' } ); let sql1 = `UPDATE users SET lastLogin = ? WHERE id = ?`; const currentTime = new Date(); const options = { timeZone: 'Europe/Berlin', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }; const dateTimeString = currentTime.toLocaleString('de-DE', options); const results = await ownConn.query(sql1, [dateTimeString, result[0].id]); return res.status(200).send({ message: 'Logged in!', token: { authToken: authtoken, refreshToken: refreshtoken }, user: result[0], }); } return res.status(400).send({ message: 'Username or password incorrect!', }); } ); } catch (err) { // Manage Errors console.log("SQL error : ", err); } }; //get all users export const showUsers = (req, res) => { getUsers((err, results) => { if (err) { res.send(err); } else { res.json(results); } }); }; //get single user by id export const showUserById = (req, res) => { getUserById(req.params.id, (err, results) => { if (err) { res.send(err); } else { res.json(results); } }); }; // Update user export const updateUser = (req, res) => { const data = req.body; updateUserById(data, (err, results) => { if (err) { res.send(err); } else { res.json(results); } }); }; // Delete user export const deleteUser = (req, res) => { const id = req.params.id; deleteUserById(id, (err, results) => { if (err) { res.send(err); } else { res.json(results); } }); };