register.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. const user = await User.create({
  37. name: name,
  38. username: username,
  39. email: email,
  40. password: bcrypt.hashSync(password,10),
  41. role: await userRole(),
  42. group: 'all',
  43. avatar: `<img src="img/avatars/${avatar}">`
  44. });
  45. // make sure the user was created and get the UUID.
  46. let newUser = await User.findOne({ where: {email:email}});
  47. let match = await bcrypt.compare(password,newUser.password);
  48. if(match){
  49. req.session.user = newUser.username;
  50. req.session.UUID = newUser.UUID;
  51. req.session.role = newUser.role;
  52. req.session.avatar = newUser.avatar;
  53. const syslog = await Syslog.create({
  54. user: req.session.user,
  55. email: email,
  56. event: "Successful Registration",
  57. message: "User registered successfully",
  58. ip: req.socket.remoteAddress
  59. });
  60. res.redirect("/");
  61. }
  62. } catch(err) {
  63. res.render("register",{
  64. "error":"Something went wrong when creating account.",
  65. });
  66. }
  67. } else {
  68. // return an error.
  69. res.render("register",{
  70. "error":"User with that email already exists.",
  71. });
  72. }
  73. } else {
  74. // Redirect to the signup page.
  75. res.render("register",{
  76. "error":"Please fill in all the fields and accept TOS.",
  77. });
  78. }
  79. }