Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

validate-session.js 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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: '/validate-session',
  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 hashedSessionToken = request.payload
  26. const { userService, profileService } = request.server.services()
  27. try {
  28. const validatedSessionToken =
  29. userService.validateSession(hashedSessionToken)
  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. return {
  41. ok: true,
  42. handler: pluginConfig.handlerType,
  43. data: {
  44. ...validatedSessionToken,
  45. profileId: profileId,
  46. },
  47. }
  48. } catch (err) {
  49. return {
  50. ok: false,
  51. handler: pluginConfig.handlerType,
  52. data: { error: err.message },
  53. }
  54. }
  55. },
  56. validate: {
  57. failAction: 'log',
  58. },
  59. response: {
  60. schema: Joi.object({
  61. ok: Joi.bool(),
  62. handler: Joi.string(),
  63. data: Joi.object(),
  64. }).label('validate_session_res'),
  65. failAction: 'log',
  66. },
  67. },
  68. }