register.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { User, Syslog } from '../database/models.js';
  2. import bcrypt from 'bcrypt';
  3. let SECRET = process.env.SECRET || "MrWiskers"
  4. export const Register = function(req,res){
  5. if(req.session.user){
  6. res.redirect("/logout");
  7. } else {
  8. res.render("register",{
  9. "error":"",
  10. });
  11. }
  12. }
  13. export const submitRegister = async function(req,res){
  14. let { name, username, email, password, confirmPassword, avatar, tos, secret } = req.body;
  15. if (secret != SECRET) {
  16. const syslog = await Syslog.create({
  17. user: username,
  18. email: email,
  19. event: "Failed Registration",
  20. message: "Invalid secret",
  21. ip: req.socket.remoteAddress
  22. });
  23. }
  24. if((name && email && password && confirmPassword && username && tos) && (secret == SECRET) && (password == confirmPassword)){
  25. async function userRole () {
  26. let userCount = await User.count();
  27. if(userCount == 0){
  28. return "admin";
  29. }else{
  30. return "user";
  31. }
  32. }
  33. let existingUser = await User.findOne({ where: {email:email}});
  34. if(!existingUser){
  35. try {
  36. let currentDate = new Date();
  37. let newLogin = currentDate.toLocaleString();
  38. const user = await User.create({
  39. name: name,
  40. username: username,
  41. email: email,
  42. password: bcrypt.hashSync(password,10),
  43. role: await userRole(),
  44. group: 'all',
  45. avatar: `<img src="img/avatars/${avatar}">`,
  46. lastLogin: newLogin,
  47. });
  48. // make sure the user was created and get the UUID.
  49. let newUser = await User.findOne({ where: {email:email}});
  50. let match = await bcrypt.compare(password,newUser.password);
  51. if(match){
  52. req.session.user = newUser.username;
  53. req.session.UUID = newUser.UUID;
  54. req.session.role = newUser.role;
  55. req.session.avatar = newUser.avatar;
  56. const syslog = await Syslog.create({
  57. user: req.session.user,
  58. email: email,
  59. event: "Successful Registration",
  60. message: "User registered successfully",
  61. ip: req.socket.remoteAddress
  62. });
  63. res.redirect("/");
  64. }
  65. } catch(err) {
  66. res.render("register",{
  67. "error":"Something went wrong when creating account.",
  68. });
  69. }
  70. } else {
  71. // return an error.
  72. res.render("register",{
  73. "error":"User with that email already exists.",
  74. });
  75. }
  76. } else {
  77. // Redirect to the signup page.
  78. res.render("register",{
  79. "error":"Please fill in all the fields and accept TOS.",
  80. });
  81. }
  82. }