Express TS project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import express from 'express';
  2. import { DB_NAME, getDatabaseClient } from '../db-utils';
  3. import bcrypt from 'bcrypt';
  4. import { generateJWT, SALT_ROUNDS } from './auth';
  5. const authRoutes = express.Router();
  6. authRoutes.get('/users/', async (request, response) => {
  7. console.log(request);
  8. response.send("List of users will be displayed");
  9. });
  10. authRoutes.post('/register-applicant/', async (request, response) => {
  11. const name = request.body.name;
  12. const email = request.body.email;
  13. const password = request.body.password;
  14. const userType = 'APPLICANT';
  15. const isVerified = false;
  16. const userCollection = getDatabaseClient().db(DB_NAME).collection('users');
  17. // Check if form is filled
  18. if (!name || !email || !password) {
  19. response.status(400);
  20. response.send("Please field the required fields");
  21. return;
  22. }
  23. try {
  24. const userWithSameMail = await userCollection.find({
  25. email,
  26. }).count();
  27. if (userWithSameMail > 0) {
  28. response.status(400);
  29. response.send('EmailID already exists');
  30. return;
  31. }
  32. } catch(e) {
  33. console.log(e);
  34. return;
  35. }
  36. try {
  37. bcrypt.hash(password, SALT_ROUNDS, (error, hashedPassword) => {
  38. if (error) {
  39. throw error;
  40. }
  41. userCollection.insertOne({
  42. name,
  43. email,
  44. password: hashedPassword,
  45. isVerified,
  46. userType,
  47. });
  48. });
  49. response.send("Registeration Complete, Please verify your profile to proceed further");
  50. } catch (e) {
  51. console.log(e);
  52. }
  53. return;
  54. });
  55. authRoutes.post('/api-auth/', async (request, response) => {
  56. const email = request.body.email;
  57. const password = request.body.password;
  58. const userType = request.body.userType;
  59. if (!email || !password || !userType) {
  60. response.status(400);
  61. response.send("Please field the required fields");
  62. return;
  63. }
  64. const userCollection = getDatabaseClient().db(DB_NAME).collection('users');
  65. let users = await userCollection.find({
  66. email,
  67. userType,
  68. }).toArray();
  69. const matchedUser = users[0];
  70. if (!matchedUser) {
  71. response.status(400);
  72. response.send('Wrong credentials');
  73. return;
  74. } else if (!matchedUser.isVerified) {
  75. response.status(400);
  76. response.send('Please complete user verification');
  77. return;
  78. }
  79. let passwordComparisonResult: boolean;
  80. try {
  81. passwordComparisonResult = await bcrypt.compare(password, matchedUser.password);
  82. if (passwordComparisonResult) {
  83. response.send({
  84. id: matchedUser._id,
  85. token: generateJWT(matchedUser._id),
  86. });
  87. } else {
  88. response.status(400);
  89. response.send('Wrong credentials');
  90. }
  91. } catch(e) {
  92. response.sendStatus(500);
  93. response.json(e);
  94. }
  95. return;
  96. // let passwordComparisonResult: boolean;
  97. // try {
  98. // passwordComparisonResult = await bcrypt.compare(password, user.password);
  99. // }
  100. });
  101. export default authRoutes;