Files
TueIT_App/backend/controller/users.js
2024-03-11 18:19:11 +01:00

186 lines
6.2 KiB
JavaScript

//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);
}
});
};