Advertisement
Guest User

Untitled

a guest
Mar 5th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.58 KB | None | 0 0
  1. const usersService = require('../services/userService');
  2. const cvService = require('../../employee/services/cvService');
  3. const employeesService = require('../../employee/services/employeeService');
  4. const companiesService = require('../../company/services/companyService');
  5. const messageService = require('../../message/services/messageService');
  6.  
  7. const logger = require("../../../utils/logger");
  8. const account = require("../../blockchain/utils/account");
  9. const web3 = require("../../blockchain/utils/web3");
  10.  
  11. const FIRST_STATE = 1;
  12. const SECOND_STATE = 2;
  13.  
  14. module.exports.func = (router) => {
  15.  
  16.  
  17. /**
  18. * уввеличивать статус пользователя пока все не заполнит
  19. * является функцией вызова promise
  20. * @param req
  21. * @param res
  22. * @param stateNumber -
  23. * при каком стейте у пользовател должен делаться инкремент
  24. * для блокирования инкремента при возврате пользователем на шаг назад
  25. * @returns {Function}
  26. */
  27. incrementStatusAndReturnResponse = async function (req, res, stateNumber) {
  28. let user = req.user;
  29. if (user.status === stateNumber) {
  30. user = await usersService.incrementStep(req.user);
  31. }
  32. res.json({
  33. registrationStep: user.status,
  34. userId: user.id,
  35. });
  36. };
  37.  
  38. /**
  39. * шаг регистрации с высыланием проверочного кода на почту
  40. */
  41. router.post('/signup/email', async (req, res) => {
  42. if (!(await usersService.isEmailFree(req.body.email))) {
  43. res.status(400).json('email is already in use');
  44. } else {
  45.  
  46. if (String(req.body.password) !== String(req.body.passwordConfirmation)) {
  47. return res.status(400).json("passwords not equal");
  48. }
  49.  
  50. req.session.email = req.body.email;
  51. req.session.password = req.body.password;
  52. req.session.role = req.body.role;
  53. req.session.verifyCode = messageService.sendCodeToUser(req.body.email);
  54. res.json({data: 'success'});
  55.  
  56. logger.log(req.session.verifyCode);
  57. }
  58. });
  59.  
  60. /**
  61. * шаг проверки высланного кода на почту
  62. * если пароль верный то регистрируем и аунтифицируем
  63. * пользователя
  64. */
  65. router.post('/signup/verification', async (req, res) => {
  66. try {
  67. if (req.session.verifyCode === parseInt(req.body.verifyCode)) {
  68. let keyPassword = web3.utils.randomHex(32);
  69. let encryptedKey = JSON.stringify(account.generateAccount(keyPassword));
  70.  
  71. let accountAddress = account.decryptAccount(JSON.parse(encryptedKey), keyPassword).address;
  72. let user = await usersService.saveUser(
  73. req.session.email,
  74. req.session.password,
  75. req.session.role,
  76. FIRST_STATE,
  77. encryptedKey,
  78. keyPassword,
  79. accountAddress
  80. );
  81. req.login(user, (err) => {
  82. if (err) {
  83. res.status(401).json({error: "Unauthorized"});
  84. } else {
  85. res.json({
  86. registrationStep: user.status,
  87. role: req.session.role,
  88. userId: req.user.id,
  89. });
  90. }
  91. });
  92. } else {
  93. res.status(400).json('code mismatch')
  94. }
  95. } catch (err) {
  96. logger.error(err.stack);
  97. res.status(500).json({
  98. error: err.message
  99. });
  100. }
  101. });
  102.  
  103. /**
  104. * Шаг заполнения скилов и профилей компании
  105. * или работника
  106. */
  107. router.post('/signup/specification', async (req, res) => {
  108. try {
  109. // profiles - объекты класса профиль, содержащие скиллы.
  110. let profiles = req.body.specifications;
  111. switch (req.user.role) {
  112. case 'EMPLOYEE':
  113. let employee = await employeesService.save(req.user.id);
  114. for (let i = 0; i < profiles.length; i++) {
  115. let cv = await cvService.save(profiles[i], employee);
  116. for (let j = 0; j < profiles[i].skills.length; j++) {
  117. await cvService.addSkill(cv, profiles[i].skills[j])
  118. }
  119. }
  120. break;
  121. case 'COMPANY':
  122. let company = await companiesService.save(req.user.id);
  123. for (let i = 0; i < profiles.length; ++i) {
  124. await companiesService.addProfileToCompany(company.id, profiles[i].id);
  125. }
  126. break;
  127. }
  128. await incrementStatusAndReturnResponse(req, res, FIRST_STATE);
  129. } catch (err) {
  130. logger.error(err.stack);
  131. res.status(500).json({
  132. error: err.message
  133. });
  134. }
  135. });
  136.  
  137. /**
  138. * шаг заполнения лично информации
  139. */
  140. router.post('/signup/info', async (req, res) => {
  141. try {
  142. switch (req.user.role) {
  143. case 'EMPLOYEE':
  144. await employeesService.update(req.user.employee, req.body);
  145. break;
  146. case 'COMPANY':
  147. await companiesService.update(req.user.id, req.body);
  148. break;
  149. }
  150. await incrementStatusAndReturnResponse(req, res, SECOND_STATE);
  151. } catch (err) {
  152. logger.error(err.stack);
  153. res.status(500).json({
  154. error: err.message
  155. });
  156. }
  157. });
  158.  
  159. /**
  160. * метод удаления пользователя из системы
  161. */
  162. router.delete('/unreg', async (req, res) => {
  163. if (await usersService.deleteUser(req.user)) {
  164. res.json({data: "success"});
  165. } else {
  166. res.status(500).json('server error');
  167. }
  168. });
  169.  
  170. return router;
  171.  
  172. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement