auth.js 4.7 KB

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