auth.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. const User = require('../database/UserModel');
  2. const bcrypt = require('bcrypt');
  3. exports.Login = function(req,res){
  4. // check whether we have a session
  5. if(req.session.user){
  6. // Redirect to log out.
  7. res.redirect("/logout");
  8. }else{
  9. // Render the login page.
  10. res.render("pages/login",{
  11. "error":"",
  12. "isLoggedIn": false
  13. });
  14. }
  15. }
  16. exports.processLogin = async function(req,res){
  17. // get the data.
  18. let email = req.body.email;
  19. let password = req.body.password;
  20. // check if we have data.
  21. if(email && password){
  22. // check if the user exists.
  23. let existingUser = await User.findOne({ where: {email:email}});
  24. if(existingUser){
  25. // compare the password.
  26. let match = await bcrypt.compare(password,existingUser.password);
  27. if(match){
  28. // set the session.
  29. req.session.user = existingUser.username;
  30. req.session.UUID = existingUser.UUID;
  31. req.session.role = existingUser.role;
  32. // Redirect to the home page.
  33. res.redirect("/");
  34. }else{
  35. // return an error.
  36. res.render("pages/login",{
  37. "error":"Invalid password",
  38. isLoggedIn: false
  39. });
  40. }
  41. }else{
  42. // return an error.
  43. res.render("pages/login",{
  44. "error":"User with that email does not exist.",
  45. isLoggedIn:false
  46. });
  47. }
  48. }else{
  49. res.status(400);
  50. res.render("pages/login",{
  51. "error":"Please fill in all the fields.",
  52. isLoggedIn:false
  53. });
  54. }
  55. }
  56. exports.Logout = function(req,res){
  57. // clear the session.
  58. req.session.destroy();
  59. // Redirect to the login page.
  60. res.redirect("/login");
  61. }
  62. exports.Register = function(req,res){
  63. // Check whether we have a session
  64. if(req.session.user){
  65. // Redirect to log out.
  66. res.redirect("/logout");
  67. } else {
  68. // Render the signup page.
  69. res.render("pages/register",{
  70. "error":"",
  71. isLoggedIn:false
  72. });
  73. }
  74. }
  75. exports.processRegister = async function(req,res){
  76. // Get the data.
  77. let { first_name, last_name, username, email, password, avatar, tos, secret } = req.body;
  78. let role = "user";
  79. // Check the data.
  80. if((first_name && last_name && email && password && username && tos) && (secret == process.env.SECRET)){
  81. // Check if there is an existing user with that username.
  82. let existingUser = await User.findOne({ where: {username:username}});
  83. let adminUser = await User.findOne({ where: {role:"admin"}});
  84. if(!existingUser){
  85. // hash the password.
  86. let hashedPassword = bcrypt.hashSync(password,10);
  87. if(!adminUser){
  88. console.log('Creating admin User');
  89. role = "admin";
  90. }
  91. try {
  92. const user = await User.create({
  93. first_name: first_name,
  94. last_name: last_name,
  95. username: username,
  96. email: email,
  97. password: hashedPassword,
  98. role: role,
  99. group: 'all',
  100. avatar: `<img src="./static/avatars/${avatar}">`
  101. });
  102. // set the session.
  103. req.session.user = user.username;
  104. req.session.UUID = user.UUID;
  105. req.session.role = user.role;
  106. // Redirect to the home page.
  107. res.redirect("/");
  108. }
  109. catch (err) {
  110. // return an error.
  111. res.render("pages/register",{
  112. "error":"Something went wrong when creating account.",
  113. isLoggedIn:false
  114. });
  115. }
  116. }else{
  117. // return an error.
  118. res.render("pages/register",{
  119. "error":"User with that username already exists.",
  120. isLoggedIn:false
  121. });
  122. }
  123. }else{
  124. // Redirect to the signup page.
  125. res.render("pages/register",{
  126. "error":"Please fill in all the fields and accept TOS.",
  127. isLoggedIn:false
  128. });
  129. }
  130. }