Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

validatesession.js 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. 'use strict'
  2. const { plugin } = require('@hapi/inert')
  3. const Joi = require('joi')
  4. const pluginConfig = {
  5. handlerType: 'jwt',
  6. docs: {
  7. get: {
  8. description: 'validates session token for each step of survey',
  9. notes: 'validates session token for each step of survey',
  10. },
  11. },
  12. }
  13. module.exports = {
  14. method: 'POST',
  15. path: '/validatesession',
  16. options: {
  17. ...pluginConfig.docs.get,
  18. tags: ['api'],
  19. auth: false,
  20. cors: {
  21. headers: ['Authorization', 'Content-Type'],
  22. exposedHeaders: ['Authorization', 'Access-Control-Expose-Headers'],
  23. },
  24. handler: async function (request, h) {
  25. const hashedAccessToken = request.payload
  26. const { userService, profileService } = request.server.services()
  27. try {
  28. const validatedSessionToken =
  29. userService.validateSession(hashedAccessToken)
  30. const user = await userService.findByUserEmail(
  31. validatedSessionToken.email,
  32. )
  33. const type = user.is_poster == 1 ? 'poster' : 'seeker'
  34. const profiles = await profileService.getCompleteProfilesFor(
  35. user.user_id,
  36. type,
  37. )
  38. // TODO: handle user with multiple profiles...
  39. const profileId = profiles[0].profile_id
  40. const responses = []
  41. profiles[0].responses.forEach(response => {
  42. responses.push({
  43. response_key_id: response.response_key_id,
  44. val: response.val,
  45. })
  46. })
  47. return {
  48. ok: true,
  49. handler: pluginConfig.handlerType,
  50. data: {
  51. ...validatedSessionToken,
  52. profileId: profileId,
  53. responses: responses,
  54. },
  55. }
  56. } catch (err) {
  57. return {
  58. ok: false,
  59. handler: pluginConfig.handlerType,
  60. data: { error: err.message },
  61. }
  62. }
  63. },
  64. validate: {
  65. failAction: 'log',
  66. },
  67. response: {
  68. schema: Joi.object({
  69. ok: Joi.bool(),
  70. handler: Joi.string(),
  71. data: Joi.object(),
  72. }).label('validate_session_res'),
  73. failAction: 'log',
  74. },
  75. },
  76. }