@manticore-labs/nest 0.0.59 → 0.0.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/.circleci/config.yml +47 -47
  2. package/.idea/codeStyles/Project.xml +37 -37
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/encodings.xml +3 -3
  5. package/.idea/inspectionProfiles/Project_Default.xml +5 -5
  6. package/.idea/manticore-labs-nest.iml +11 -11
  7. package/.idea/misc.xml +5 -5
  8. package/.idea/modules.xml +7 -7
  9. package/.idea/vcs.xml +5 -5
  10. package/.idea/workspace.xml +207 -353
  11. package/.npmignore +14 -0
  12. package/LICENSE +8 -8
  13. package/README.1.md +116 -116
  14. package/README.md +1 -1
  15. package/build/main/index.d.ts +39 -39
  16. package/build/main/index.js +22 -22
  17. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  18. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +24 -24
  19. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  20. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +24 -24
  21. package/build/main/lib/auth0/auth0.controller.d.ts +37 -37
  22. package/build/main/lib/auth0/auth0.controller.js +514 -514
  23. package/build/main/lib/auth0/auth0.service.d.ts +42 -42
  24. package/build/main/lib/auth0/auth0.service.js +513 -513
  25. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  26. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +25 -25
  27. package/build/main/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  28. package/build/main/lib/auth0/interfaces/busqueda-nombre.js +2 -2
  29. package/build/main/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  30. package/build/main/lib/auth0/interfaces/funciones-seguridad.js +2 -2
  31. package/build/main/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  32. package/build/main/lib/auth0/interfaces/mensajes-controlador.js +2 -2
  33. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  34. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.js +3 -3
  35. package/build/main/lib/funciones-util/buscar-registro.d.ts +1 -1
  36. package/build/main/lib/funciones-util/buscar-registro.js +147 -147
  37. package/build/main/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  38. package/build/main/lib/funciones-util/buscar-un-registro-por-id.js +25 -25
  39. package/build/main/lib/funciones-util/buscar-where-or.d.ts +1 -1
  40. package/build/main/lib/funciones-util/buscar-where-or.js +33 -33
  41. package/build/main/lib/funciones-util/contar-registros.d.ts +1 -1
  42. package/build/main/lib/funciones-util/contar-registros.js +41 -41
  43. package/build/main/lib/funciones-util/crear-un-registro.d.ts +1 -1
  44. package/build/main/lib/funciones-util/crear-un-registro.js +24 -24
  45. package/build/main/lib/funciones-util/editar-un-registro.d.ts +1 -1
  46. package/build/main/lib/funciones-util/editar-un-registro.js +24 -24
  47. package/build/main/lib/funciones-util/eliminar-uno.d.ts +1 -1
  48. package/build/main/lib/funciones-util/eliminar-uno.js +35 -35
  49. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  50. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +21 -21
  51. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  52. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.js +2 -2
  53. package/build/main/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  54. package/build/main/lib/interfaces-util/broadcast-join.gateway.js +2 -2
  55. package/build/main/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  56. package/build/main/lib/interfaces-util/campos-a-buscar.js +9 -9
  57. package/build/main/lib/interfaces-util/delete-service.d.ts +12 -12
  58. package/build/main/lib/interfaces-util/delete-service.js +2 -2
  59. package/build/main/lib/interfaces-util/dto.d.ts +4 -4
  60. package/build/main/lib/interfaces-util/dto.js +2 -2
  61. package/build/main/lib/interfaces-util/find-where-relations.d.ts +9 -9
  62. package/build/main/lib/interfaces-util/find-where-relations.js +2 -2
  63. package/build/main/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  64. package/build/main/lib/interfaces-util/funciones-seguridad.js +2 -2
  65. package/build/main/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  66. package/build/main/lib/interfaces-util/funciones.gateway.js +2 -2
  67. package/build/main/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  68. package/build/main/lib/interfaces-util/mensajes-controller.js +2 -2
  69. package/build/main/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  70. package/build/main/lib/interfaces-util/politicas-de-seguridad.js +2 -2
  71. package/build/main/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  72. package/build/main/lib/interfaces-util/respuesta-general.gateway.js +2 -2
  73. package/build/main/lib/menu/entities/menu-entity.d.ts +13 -13
  74. package/build/main/lib/menu/entities/menu-entity.js +93 -93
  75. package/build/main/lib/one-signal/interfaces/funciones-seguridad.d.ts +9 -9
  76. package/build/main/lib/one-signal/interfaces/funciones-seguridad.js +2 -2
  77. package/build/main/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  78. package/build/main/lib/one-signal/interfaces/one-signal-device.js +2 -2
  79. package/build/main/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  80. package/build/main/lib/one-signal/interfaces/one-signal-notification.js +2 -2
  81. package/build/main/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  82. package/build/main/lib/one-signal/interfaces/one-signal-notifications.js +2 -2
  83. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  84. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.js +2 -2
  85. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  86. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.js +2 -2
  87. package/build/main/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  88. package/build/main/lib/one-signal/interfaces/one-signal-success.js +2 -2
  89. package/build/main/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  90. package/build/main/lib/one-signal/interfaces/one-signal-tags.js +2 -2
  91. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  92. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.js +2 -2
  93. package/build/main/lib/one-signal/one-signal.controller.d.ts +15 -15
  94. package/build/main/lib/one-signal/one-signal.controller.js +250 -250
  95. package/build/main/lib/one-signal/one-signal.service.d.ts +32 -32
  96. package/build/main/lib/one-signal/one-signal.service.js +84 -84
  97. package/build/main/lib/principal.controller.d.ts +20 -20
  98. package/build/main/lib/principal.controller.js +309 -309
  99. package/build/main/lib/principal.dto.d.ts +5 -5
  100. package/build/main/lib/principal.dto.js +21 -21
  101. package/build/main/lib/principal.entity.d.ts +7 -7
  102. package/build/main/lib/principal.entity.js +42 -42
  103. package/build/main/lib/principal.find-many-options.d.ts +14 -14
  104. package/build/main/lib/principal.find-many-options.js +48 -48
  105. package/build/main/lib/principal.find-many-where-or.d.ts +10 -10
  106. package/build/main/lib/principal.find-many-where-or.js +28 -28
  107. package/build/main/lib/principal.gateway.d.ts +35 -35
  108. package/build/main/lib/principal.gateway.js +399 -399
  109. package/build/main/lib/principal.id.d.ts +3 -3
  110. package/build/main/lib/principal.id.js +16 -16
  111. package/build/main/lib/principal.resolver.d.ts +21 -21
  112. package/build/main/lib/principal.resolver.js +343 -343
  113. package/build/main/lib/principal.service.d.ts +38 -38
  114. package/build/main/lib/principal.service.js +255 -255
  115. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  116. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.js +16 -16
  117. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  118. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +26 -26
  119. package/build/main/lib/seguridad/funciones/index.d.ts +6 -6
  120. package/build/main/lib/seguridad/funciones/index.js +12 -12
  121. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  122. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.js +6 -6
  123. package/build/main/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  124. package/build/main/lib/seguridad/funciones/obtener-request.js +6 -6
  125. package/build/main/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  126. package/build/main/lib/seguridad/funciones/obtener-response.js +6 -6
  127. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  128. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.js +13 -13
  129. package/build/main/lib/seguridad/seguridad.decorator.d.ts +1 -1
  130. package/build/main/lib/seguridad/seguridad.decorator.js +4 -4
  131. package/build/module/index.d.ts +39 -39
  132. package/build/module/index.js +17 -17
  133. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  134. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +21 -21
  135. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  136. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +21 -21
  137. package/build/module/lib/auth0/auth0.controller.d.ts +37 -37
  138. package/build/module/lib/auth0/auth0.controller.js +512 -512
  139. package/build/module/lib/auth0/auth0.service.d.ts +42 -42
  140. package/build/module/lib/auth0/auth0.service.js +511 -511
  141. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  142. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +22 -22
  143. package/build/module/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  144. package/build/module/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  145. package/build/module/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  146. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  147. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.js +1 -1
  148. package/build/module/lib/funciones-util/buscar-registro.d.ts +1 -1
  149. package/build/module/lib/funciones-util/buscar-registro.js +144 -144
  150. package/build/module/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  151. package/build/module/lib/funciones-util/buscar-un-registro-por-id.js +22 -22
  152. package/build/module/lib/funciones-util/buscar-where-or.d.ts +1 -1
  153. package/build/module/lib/funciones-util/buscar-where-or.js +30 -30
  154. package/build/module/lib/funciones-util/contar-registros.d.ts +1 -1
  155. package/build/module/lib/funciones-util/contar-registros.js +38 -38
  156. package/build/module/lib/funciones-util/crear-un-registro.d.ts +1 -1
  157. package/build/module/lib/funciones-util/crear-un-registro.js +21 -21
  158. package/build/module/lib/funciones-util/editar-un-registro.d.ts +1 -1
  159. package/build/module/lib/funciones-util/editar-un-registro.js +21 -21
  160. package/build/module/lib/funciones-util/eliminar-uno.d.ts +1 -1
  161. package/build/module/lib/funciones-util/eliminar-uno.js +32 -32
  162. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  163. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +18 -18
  164. package/build/module/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  165. package/build/module/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  166. package/build/module/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  167. package/build/module/lib/interfaces-util/campos-a-buscar.js +6 -6
  168. package/build/module/lib/interfaces-util/delete-service.d.ts +12 -12
  169. package/build/module/lib/interfaces-util/dto.d.ts +4 -4
  170. package/build/module/lib/interfaces-util/find-where-relations.d.ts +9 -9
  171. package/build/module/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  172. package/build/module/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  173. package/build/module/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  174. package/build/module/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  175. package/build/module/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  176. package/build/module/lib/menu/entities/menu-entity.d.ts +13 -13
  177. package/build/module/lib/menu/entities/menu-entity.js +90 -90
  178. package/build/module/lib/one-signal/interfaces/funciones-seguridad.d.ts +9 -9
  179. package/build/module/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  180. package/build/module/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  181. package/build/module/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  182. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  183. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  184. package/build/module/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  185. package/build/module/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  186. package/build/module/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  187. package/build/module/lib/one-signal/one-signal.controller.d.ts +15 -15
  188. package/build/module/lib/one-signal/one-signal.controller.js +248 -248
  189. package/build/module/lib/one-signal/one-signal.service.d.ts +32 -32
  190. package/build/module/lib/one-signal/one-signal.service.js +82 -82
  191. package/build/module/lib/principal.controller.d.ts +20 -20
  192. package/build/module/lib/principal.controller.js +306 -306
  193. package/build/module/lib/principal.dto.d.ts +5 -5
  194. package/build/module/lib/principal.dto.js +18 -18
  195. package/build/module/lib/principal.entity.d.ts +7 -7
  196. package/build/module/lib/principal.entity.js +39 -39
  197. package/build/module/lib/principal.find-many-options.d.ts +14 -14
  198. package/build/module/lib/principal.find-many-options.js +45 -45
  199. package/build/module/lib/principal.find-many-where-or.d.ts +10 -10
  200. package/build/module/lib/principal.find-many-where-or.js +25 -25
  201. package/build/module/lib/principal.gateway.d.ts +35 -35
  202. package/build/module/lib/principal.gateway.js +396 -396
  203. package/build/module/lib/principal.id.d.ts +3 -3
  204. package/build/module/lib/principal.id.js +13 -13
  205. package/build/module/lib/principal.resolver.d.ts +21 -21
  206. package/build/module/lib/principal.resolver.js +340 -340
  207. package/build/module/lib/principal.service.d.ts +38 -38
  208. package/build/module/lib/principal.service.js +252 -252
  209. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  210. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.js +13 -13
  211. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  212. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +23 -23
  213. package/build/module/lib/seguridad/funciones/index.d.ts +6 -6
  214. package/build/module/lib/seguridad/funciones/index.js +6 -6
  215. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  216. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.js +3 -3
  217. package/build/module/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  218. package/build/module/lib/seguridad/funciones/obtener-request.js +3 -3
  219. package/build/module/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  220. package/build/module/lib/seguridad/funciones/obtener-response.js +3 -3
  221. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  222. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.js +10 -10
  223. package/build/module/lib/seguridad/seguridad.decorator.d.ts +1 -1
  224. package/build/module/lib/seguridad/seguridad.decorator.js +2 -2
  225. package/package.json +1 -1
@@ -1,512 +1,512 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __param = (this && this.__param) || function (paramIndex, decorator) {
8
- return function (target, key) { decorator(target, key, paramIndex); }
9
- };
10
- import { ActualizarUsuarioCuentaDto } from './actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto';
11
- import { BadRequestException, Body, Controller, HttpCode, Post, InternalServerErrorException, Param, Response, Request, Query, Get } from '@nestjs/common';
12
- import { validate } from 'class-validator';
13
- import { ActualizarUsuarioDto } from './actualizar-usuario-dto/actualizar-usuario-dto';
14
- import { aplicarPoliticasDeSeguridad } from '../seguridad/aplicar-politicas-de-seguridad';
15
- import { mergeMap } from 'rxjs/operators';
16
- import { from, of } from 'rxjs';
17
- import { CrearUsuarioDto } from './crear-usuario-dto/crear-usuario-dto';
18
- let PrincipalAuth0Controller = class PrincipalAuth0Controller {
19
- constructor(_funcionesSeguridad, _auth0Service, _mensajes = {
20
- mensajeProcesoInicial: 'Proceso inicial completado exitosamente.',
21
- mensajeCuentaActualizada: 'Cuenta actualizada.',
22
- mensajeCuentaYCorreoActualizado: 'Cuenta actualizada. Revise su correo para confirmar su email.'
23
- }, debug = true, skip = 0, take = 30, contexto) {
24
- this._funcionesSeguridad = _funcionesSeguridad;
25
- this._auth0Service = _auth0Service;
26
- this._mensajes = _mensajes;
27
- this.debug = debug;
28
- this.skip = skip;
29
- this.take = take;
30
- this.contexto = contexto;
31
- }
32
- async actualizarUsuarioPorPrimeraVez(email, name, user_id, request, response) {
33
- const actualizacionUsuario = new ActualizarUsuarioDto();
34
- actualizacionUsuario.name = name;
35
- actualizacionUsuario.email = email;
36
- actualizacionUsuario.user_id = user_id;
37
- const errores = await validate(actualizacionUsuario);
38
- const hayErrores = errores.length > 0;
39
- if (hayErrores) {
40
- if (this.debug) {
41
- console.error('Error de validacion', errores);
42
- }
43
- throw new BadRequestException('No envia parametros');
44
- }
45
- else {
46
- const tipoPoliticaSeguridad = {
47
- web: {
48
- request,
49
- response
50
- }
51
- };
52
- const objetoPoliticasDeSeguridad = {
53
- funciones: this._funcionesSeguridad.updateUserForTheFirstTime ? this._funcionesSeguridad.updateUserForTheFirstTime : []
54
- };
55
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
56
- puedeRealizarAccion$
57
- .pipe(mergeMap((puedeRealizarAccion) => {
58
- if (puedeRealizarAccion) {
59
- return from(this.actualizarUsuarioPorPrimeraVezAccion(actualizacionUsuario));
60
- }
61
- else {
62
- return of({ error: 403, mensaje: 'No tiene permisos' });
63
- }
64
- }))
65
- .subscribe((respuesta) => {
66
- if (respuesta.error) {
67
- return response.status(respuesta.error).send(respuesta);
68
- }
69
- else {
70
- return response.send(respuesta);
71
- }
72
- }, (error) => {
73
- if (this.debug) {
74
- console.error('Error', error);
75
- }
76
- return response.status(500).json({ error: 500, mensaje: 'Error del servidor' });
77
- });
78
- }
79
- }
80
- async actualizarUsuarioPorPrimeraVezAccion(actualizacionUsuario) {
81
- const objetoActualizar = {
82
- email: actualizacionUsuario.email
83
- };
84
- objetoActualizar.user_metadata = {
85
- name: actualizacionUsuario.name,
86
- roles: [1]
87
- };
88
- const respuestaUsuarioActualizado = await this._auth0Service
89
- .findOneByIdAndUpdate(actualizacionUsuario.user_id, objetoActualizar);
90
- if (respuestaUsuarioActualizado.error) {
91
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
92
- }
93
- else {
94
- const respuestaEmailVerification = await this._auth0Service
95
- .sendEmailVerification(actualizacionUsuario.user_id);
96
- if (!respuestaEmailVerification.error) {
97
- const respuestaCambioPassword = await this._auth0Service
98
- .changePassword(actualizacionUsuario.email);
99
- if (respuestaCambioPassword.error) {
100
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
101
- }
102
- else {
103
- return new Promise(r => r({ mensaje: this._mensajes.mensajeProcesoInicial }));
104
- }
105
- }
106
- else {
107
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
108
- }
109
- }
110
- }
111
- async actualizarCuenta(email, name, user_id, request, response) {
112
- const actualizacionUsuario = new ActualizarUsuarioCuentaDto();
113
- actualizacionUsuario.name = name;
114
- actualizacionUsuario.email = email;
115
- actualizacionUsuario.user_id = user_id;
116
- const errores = await validate(actualizacionUsuario);
117
- const hayErrores = errores.length > 0;
118
- if (hayErrores) {
119
- if (this.debug) {
120
- console.error('Error de validacion', errores);
121
- }
122
- throw new BadRequestException('No envia parametros');
123
- }
124
- else {
125
- const tipoPoliticaSeguridad = {
126
- web: {
127
- request,
128
- response
129
- }
130
- };
131
- const objetoPoliticasDeSeguridad = {
132
- funciones: this._funcionesSeguridad.updateAccount ? this._funcionesSeguridad.updateAccount : []
133
- };
134
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
135
- puedeRealizarAccion$
136
- .pipe(mergeMap((puedeRealizarAccion) => {
137
- if (puedeRealizarAccion) {
138
- return from(this.actualizarCuentaAccion(actualizacionUsuario));
139
- }
140
- else {
141
- return of({ error: 403, mensaje: 'No tiene permisos' });
142
- }
143
- }))
144
- .subscribe((respuesta) => {
145
- if (respuesta.error) {
146
- return response.status(respuesta.error).send(respuesta);
147
- }
148
- else {
149
- return response.send(respuesta);
150
- }
151
- }, (error) => {
152
- if (this.debug) {
153
- console.error('Error', error);
154
- }
155
- return response.status(500).json({ error: 500, mensaje: 'Error del servidor' });
156
- });
157
- }
158
- }
159
- async actualizarCuentaAccion(actualizacionUsuario) {
160
- const objetoActualizar = {};
161
- if (actualizacionUsuario.email) {
162
- objetoActualizar.email = actualizacionUsuario.email;
163
- }
164
- if (actualizacionUsuario.name) {
165
- objetoActualizar.user_metadata = {
166
- name: actualizacionUsuario.name
167
- };
168
- }
169
- const respuestaUsuarioActualizado = await this._auth0Service
170
- .findOneByIdAndUpdate(actualizacionUsuario.user_id, objetoActualizar);
171
- if (respuestaUsuarioActualizado.error) {
172
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
173
- }
174
- else {
175
- if (objetoActualizar.email) {
176
- const respuestaEmailVerification = await this._auth0Service
177
- .sendEmailVerification(actualizacionUsuario.user_id);
178
- if (respuestaEmailVerification.error) {
179
- return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
180
- }
181
- else {
182
- return { mensaje: this._mensajes.mensajeCuentaYCorreoActualizado };
183
- }
184
- }
185
- else {
186
- return { mensaje: this._mensajes.mensajeCuentaActualizada };
187
- }
188
- }
189
- }
190
- async findOneById(id, request, response) {
191
- const tipoPoliticaSeguridad = {
192
- web: {
193
- request,
194
- response
195
- }
196
- };
197
- const objetoPoliticasDeSeguridad = {
198
- funciones: this._funcionesSeguridad.findOne ? this._funcionesSeguridad.findOne : []
199
- };
200
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
201
- puedeRealizarAccion$
202
- .pipe(mergeMap((puedeRealizarAccion) => {
203
- if (puedeRealizarAccion) {
204
- return from(this._auth0Service.findOne(id));
205
- }
206
- else {
207
- return of({ error: 403, mensaje: 'No tiene permisos' });
208
- }
209
- }))
210
- .subscribe((respuesta) => {
211
- if (respuesta.error) {
212
- return response.status(respuesta.error).send(respuesta);
213
- }
214
- else {
215
- return response.send(respuesta);
216
- }
217
- }, (error) => {
218
- if (this.debug) {
219
- console.error('Error', error);
220
- }
221
- return response.status(500).send('Error del servidor');
222
- });
223
- }
224
- async findAll(criterioBusqueda, request, response) {
225
- const tipoPoliticaSeguridad = {
226
- web: {
227
- request,
228
- response
229
- }
230
- };
231
- const objetoPoliticasDeSeguridad = {
232
- funciones: this._funcionesSeguridad.findMany ? this._funcionesSeguridad.findMany : []
233
- };
234
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
235
- puedeRealizarAccion$
236
- .pipe(mergeMap((puedeRealizarAccion) => {
237
- if (puedeRealizarAccion) {
238
- let existeErrorEnConvertirAJSON = false;
239
- const criterioBusquedaNoEsUnObjeto = typeof criterioBusqueda !== 'object';
240
- if (criterioBusquedaNoEsUnObjeto) {
241
- try {
242
- criterioBusqueda = JSON.parse(criterioBusqueda);
243
- }
244
- catch (e) {
245
- if (this.debug) {
246
- console.error('Error en parseo JSON', e);
247
- }
248
- existeErrorEnConvertirAJSON = true;
249
- }
250
- }
251
- criterioBusqueda = existeErrorEnConvertirAJSON ? undefined : criterioBusqueda;
252
- return from(this._auth0Service.find(criterioBusqueda));
253
- }
254
- else {
255
- return of({ error: 403, mensaje: 'No tiene permisos' });
256
- }
257
- }))
258
- .subscribe((respuesta) => {
259
- if (respuesta.error) {
260
- return response.status(respuesta.error).send(respuesta);
261
- }
262
- else {
263
- return response.send(respuesta);
264
- }
265
- }, (error) => {
266
- if (this.debug) {
267
- console.error('Error', error);
268
- }
269
- return response.status(500).send('Error del servidor');
270
- });
271
- }
272
- async createOne(nuevoUsuario, datosUsuario, request, response) {
273
- const crearUsuario = new CrearUsuarioDto();
274
- crearUsuario.name = nuevoUsuario.name;
275
- crearUsuario.email = nuevoUsuario.email;
276
- crearUsuario.username = nuevoUsuario.username;
277
- const errores = await validate(crearUsuario);
278
- const nuevoDatoUsuario = new this._auth0Service.datosUsuarioDto();
279
- Object
280
- .keys(datosUsuario)
281
- .forEach((nombrePropiedad) => {
282
- nuevoDatoUsuario[nombrePropiedad] = datosUsuario[nombrePropiedad];
283
- });
284
- nuevoDatoUsuario.user_id = 'a';
285
- const erroresDatosUsuario = await validate(nuevoDatoUsuario);
286
- const hayErrores = errores.length > 0 || erroresDatosUsuario.length > 0;
287
- if (hayErrores) {
288
- if (this.debug) {
289
- console.error('Error de validacion', errores, erroresDatosUsuario);
290
- }
291
- throw new BadRequestException('No envia parametros');
292
- }
293
- else {
294
- const tipoPoliticaSeguridad = {
295
- web: {
296
- request,
297
- response
298
- }
299
- };
300
- const objetoPoliticasDeSeguridad = {
301
- funciones: this._funcionesSeguridad.create ? this._funcionesSeguridad.create : []
302
- };
303
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
304
- puedeRealizarAccion$
305
- .pipe(mergeMap((puedeRealizarAccion) => {
306
- if (puedeRealizarAccion) {
307
- return from(this._auth0Service.create(this.generarUsuario(crearUsuario)));
308
- }
309
- else {
310
- return of({ error: 403, mensaje: 'No tiene permisos' });
311
- }
312
- }))
313
- .subscribe(async (respuesta) => {
314
- try {
315
- if (respuesta.error) {
316
- return response.status(respuesta.error).send(respuesta);
317
- }
318
- else {
319
- if (this._auth0Service._datosUsuarioService && this._auth0Service.datosUsuarioDto) {
320
- const respuestaAuth0 = respuesta;
321
- nuevoDatoUsuario.user_id = respuestaAuth0.user_id;
322
- const respuestaDatosUsuario = await this._auth0Service._datosUsuarioService.create(nuevoDatoUsuario);
323
- if (respuestaDatosUsuario.error) {
324
- if (this.debug) {
325
- console.error('No se pudo crear el registro en la tabla de Datos usuario');
326
- }
327
- return response.status(500)
328
- .json({
329
- mensaje: 'Se creo el usuario en Auth0 pero no se creo el usuario en DatoUsuario. Error del servidor.',
330
- data: respuestaAuth0
331
- });
332
- }
333
- else {
334
- respuestaAuth0.usuario = respuestaDatosUsuario;
335
- return response.send(respuestaAuth0);
336
- }
337
- }
338
- else {
339
- if (this.debug) {
340
- console.info('No se tiene datos de usuario service y dto, no se crea el registro en Datos usuario');
341
- }
342
- return response.send(respuesta);
343
- }
344
- }
345
- }
346
- catch (e) {
347
- if (this.debug) {
348
- console.error('Error', e);
349
- }
350
- return response.status(500).send('Error del servidor');
351
- }
352
- }, (error) => {
353
- if (this.debug) {
354
- console.error('Error', error);
355
- }
356
- return response.status(500).send('Error del servidor');
357
- });
358
- }
359
- }
360
- generarUsuario(nuevoUsuario) {
361
- return {
362
- username: nuevoUsuario.username.toString(),
363
- password: `A${nuevoUsuario.username}a-`,
364
- connection: 'Username-Password-Authentication',
365
- name: nuevoUsuario.name,
366
- email: nuevoUsuario.email,
367
- user_metadata: {
368
- name: nuevoUsuario.name
369
- }
370
- };
371
- }
372
- findWhereOr(criterioBusqueda, request, response) {
373
- const tipoPoliticaSeguridad = {
374
- web: {
375
- request,
376
- response
377
- }
378
- };
379
- const objetoPoliticasDeSeguridad = {
380
- funciones: this._funcionesSeguridad.findWhereOr ? this._funcionesSeguridad.findWhereOr : []
381
- };
382
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
383
- puedeRealizarAccion$
384
- .pipe(mergeMap((puedeRealizarAccion) => {
385
- if (puedeRealizarAccion) {
386
- return from(this.buscarUsuarioFindWhereOr(criterioBusqueda));
387
- }
388
- else {
389
- return of({ error: 403, mensaje: 'No tiene permisos' });
390
- }
391
- }))
392
- .subscribe((respuesta) => {
393
- if (respuesta.error) {
394
- return response.status(respuesta.error).send(respuesta);
395
- }
396
- else {
397
- return response.send(respuesta);
398
- }
399
- }, (error) => {
400
- if (this.debug) {
401
- console.error('Error', error);
402
- }
403
- return response.status(500).send('Error del servidor');
404
- });
405
- }
406
- buscarUsuarioFindWhereOr(criterioBusqueda) {
407
- let camposUsuario;
408
- try {
409
- camposUsuario = JSON.parse(criterioBusqueda);
410
- }
411
- catch (e) {
412
- console.error('Error: ', e);
413
- }
414
- if (camposUsuario) {
415
- return this._auth0Service.findWhereOr(camposUsuario);
416
- }
417
- else {
418
- return of({ mensaje: 'Error en enviar parametros.', error: 400 });
419
- }
420
- }
421
- findAllDatosUsuario(criterioBusqueda, request, response) {
422
- const tipoPoliticaSeguridad = {
423
- web: {
424
- request,
425
- response
426
- }
427
- };
428
- const objetoPoliticasDeSeguridad = {
429
- funciones: this._funcionesSeguridad.findAll ? this._funcionesSeguridad.findAll : []
430
- };
431
- const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
432
- puedeRealizarAccion$
433
- .pipe(mergeMap((puedeRealizarAccion) => {
434
- if (puedeRealizarAccion) {
435
- return from(this._auth0Service.findAll(criterioBusqueda, this.skip, this.take));
436
- }
437
- else {
438
- return of({ error: 403, mensaje: 'No tiene permisos' });
439
- }
440
- }))
441
- .subscribe((respuesta) => {
442
- if (respuesta.error) {
443
- return response.status(respuesta.error).send(respuesta);
444
- }
445
- else {
446
- return response.send(respuesta);
447
- }
448
- }, (error) => {
449
- if (this.debug) {
450
- console.error('Error', error);
451
- }
452
- return response.status(500).send('Error del servidor');
453
- });
454
- }
455
- };
456
- __decorate([
457
- HttpCode(200),
458
- Post('actualizarUsuarioPorPrimeraVez'),
459
- __param(0, Body('email')),
460
- __param(1, Body('name')),
461
- __param(2, Body('user_id')),
462
- __param(3, Request()),
463
- __param(4, Response())
464
- ], PrincipalAuth0Controller.prototype, "actualizarUsuarioPorPrimeraVez", null);
465
- __decorate([
466
- HttpCode(200),
467
- Post('actualizarCuenta'),
468
- __param(0, Body('email')),
469
- __param(1, Body('name')),
470
- __param(2, Body('user_id')),
471
- __param(3, Request()),
472
- __param(4, Response())
473
- ], PrincipalAuth0Controller.prototype, "actualizarCuenta", null);
474
- __decorate([
475
- HttpCode(200),
476
- Get(':id'),
477
- __param(0, Param('id')),
478
- __param(1, Request()),
479
- __param(2, Response())
480
- ], PrincipalAuth0Controller.prototype, "findOneById", null);
481
- __decorate([
482
- HttpCode(200),
483
- Get(''),
484
- __param(0, Query('criterioBusqueda')),
485
- __param(1, Request()),
486
- __param(2, Response())
487
- ], PrincipalAuth0Controller.prototype, "findAll", null);
488
- __decorate([
489
- HttpCode(200),
490
- Post(''),
491
- __param(0, Body('datosAuth0')),
492
- __param(1, Body('datosUsuario')),
493
- __param(2, Request()),
494
- __param(3, Response())
495
- ], PrincipalAuth0Controller.prototype, "createOne", null);
496
- __decorate([
497
- Get('findWhereOrDatosUsuario'),
498
- __param(0, Query('criterioBusqueda')),
499
- __param(1, Request()),
500
- __param(2, Response())
501
- ], PrincipalAuth0Controller.prototype, "findWhereOr", null);
502
- __decorate([
503
- Get('findAllDatosUsuario'),
504
- __param(0, Query('criterioBusqueda')),
505
- __param(1, Request()),
506
- __param(2, Response())
507
- ], PrincipalAuth0Controller.prototype, "findAllDatosUsuario", null);
508
- PrincipalAuth0Controller = __decorate([
509
- Controller('auth0')
510
- ], PrincipalAuth0Controller);
511
- export { PrincipalAuth0Controller };
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aDAuY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXV0aDAvYXV0aDAuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMzRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLElBQUksRUFDSixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFDSiw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUNuRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQU12RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBT3hFLElBQXNCLHdCQUF3QixHQUE5QztJQUNFLFlBQ21CLG1CQUE0QyxFQUM1QyxhQUEwQyxFQUMxQyxZQUFzQztRQUNyRCxxQkFBcUIsRUFBRSwwQ0FBMEM7UUFDakUsd0JBQXdCLEVBQUUscUJBQXFCO1FBQy9DLCtCQUErQixFQUFFLCtEQUErRDtLQUNqRyxFQUNnQixRQUFpQixJQUFJLEVBQ3JCLE9BQWUsQ0FBQyxFQUNoQixPQUFlLEVBQUUsRUFDeEIsUUFBYTtRQVZOLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBeUI7UUFDNUMsa0JBQWEsR0FBYixhQUFhLENBQTZCO1FBQzFDLGNBQVMsR0FBVCxTQUFT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
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { ActualizarUsuarioCuentaDto } from './actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto';
11
+ import { BadRequestException, Body, Controller, HttpCode, Post, InternalServerErrorException, Param, Response, Request, Query, Get } from '@nestjs/common';
12
+ import { validate } from 'class-validator';
13
+ import { ActualizarUsuarioDto } from './actualizar-usuario-dto/actualizar-usuario-dto';
14
+ import { aplicarPoliticasDeSeguridad } from '../seguridad/aplicar-politicas-de-seguridad';
15
+ import { mergeMap } from 'rxjs/operators';
16
+ import { from, of } from 'rxjs';
17
+ import { CrearUsuarioDto } from './crear-usuario-dto/crear-usuario-dto';
18
+ let PrincipalAuth0Controller = class PrincipalAuth0Controller {
19
+ constructor(_funcionesSeguridad, _auth0Service, _mensajes = {
20
+ mensajeProcesoInicial: 'Proceso inicial completado exitosamente.',
21
+ mensajeCuentaActualizada: 'Cuenta actualizada.',
22
+ mensajeCuentaYCorreoActualizado: 'Cuenta actualizada. Revise su correo para confirmar su email.'
23
+ }, debug = true, skip = 0, take = 30, contexto) {
24
+ this._funcionesSeguridad = _funcionesSeguridad;
25
+ this._auth0Service = _auth0Service;
26
+ this._mensajes = _mensajes;
27
+ this.debug = debug;
28
+ this.skip = skip;
29
+ this.take = take;
30
+ this.contexto = contexto;
31
+ }
32
+ async actualizarUsuarioPorPrimeraVez(email, name, user_id, request, response) {
33
+ const actualizacionUsuario = new ActualizarUsuarioDto();
34
+ actualizacionUsuario.name = name;
35
+ actualizacionUsuario.email = email;
36
+ actualizacionUsuario.user_id = user_id;
37
+ const errores = await validate(actualizacionUsuario);
38
+ const hayErrores = errores.length > 0;
39
+ if (hayErrores) {
40
+ if (this.debug) {
41
+ console.error('Error de validacion', errores);
42
+ }
43
+ throw new BadRequestException('No envia parametros');
44
+ }
45
+ else {
46
+ const tipoPoliticaSeguridad = {
47
+ web: {
48
+ request,
49
+ response
50
+ }
51
+ };
52
+ const objetoPoliticasDeSeguridad = {
53
+ funciones: this._funcionesSeguridad.updateUserForTheFirstTime ? this._funcionesSeguridad.updateUserForTheFirstTime : []
54
+ };
55
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
56
+ puedeRealizarAccion$
57
+ .pipe(mergeMap((puedeRealizarAccion) => {
58
+ if (puedeRealizarAccion) {
59
+ return from(this.actualizarUsuarioPorPrimeraVezAccion(actualizacionUsuario));
60
+ }
61
+ else {
62
+ return of({ error: 403, mensaje: 'No tiene permisos' });
63
+ }
64
+ }))
65
+ .subscribe((respuesta) => {
66
+ if (respuesta.error) {
67
+ return response.status(respuesta.error).send(respuesta);
68
+ }
69
+ else {
70
+ return response.send(respuesta);
71
+ }
72
+ }, (error) => {
73
+ if (this.debug) {
74
+ console.error('Error', error);
75
+ }
76
+ return response.status(500).json({ error: 500, mensaje: 'Error del servidor' });
77
+ });
78
+ }
79
+ }
80
+ async actualizarUsuarioPorPrimeraVezAccion(actualizacionUsuario) {
81
+ const objetoActualizar = {
82
+ email: actualizacionUsuario.email
83
+ };
84
+ objetoActualizar.user_metadata = {
85
+ name: actualizacionUsuario.name,
86
+ roles: [1]
87
+ };
88
+ const respuestaUsuarioActualizado = await this._auth0Service
89
+ .findOneByIdAndUpdate(actualizacionUsuario.user_id, objetoActualizar);
90
+ if (respuestaUsuarioActualizado.error) {
91
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
92
+ }
93
+ else {
94
+ const respuestaEmailVerification = await this._auth0Service
95
+ .sendEmailVerification(actualizacionUsuario.user_id);
96
+ if (!respuestaEmailVerification.error) {
97
+ const respuestaCambioPassword = await this._auth0Service
98
+ .changePassword(actualizacionUsuario.email);
99
+ if (respuestaCambioPassword.error) {
100
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
101
+ }
102
+ else {
103
+ return new Promise(r => r({ mensaje: this._mensajes.mensajeProcesoInicial }));
104
+ }
105
+ }
106
+ else {
107
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
108
+ }
109
+ }
110
+ }
111
+ async actualizarCuenta(email, name, user_id, request, response) {
112
+ const actualizacionUsuario = new ActualizarUsuarioCuentaDto();
113
+ actualizacionUsuario.name = name;
114
+ actualizacionUsuario.email = email;
115
+ actualizacionUsuario.user_id = user_id;
116
+ const errores = await validate(actualizacionUsuario);
117
+ const hayErrores = errores.length > 0;
118
+ if (hayErrores) {
119
+ if (this.debug) {
120
+ console.error('Error de validacion', errores);
121
+ }
122
+ throw new BadRequestException('No envia parametros');
123
+ }
124
+ else {
125
+ const tipoPoliticaSeguridad = {
126
+ web: {
127
+ request,
128
+ response
129
+ }
130
+ };
131
+ const objetoPoliticasDeSeguridad = {
132
+ funciones: this._funcionesSeguridad.updateAccount ? this._funcionesSeguridad.updateAccount : []
133
+ };
134
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
135
+ puedeRealizarAccion$
136
+ .pipe(mergeMap((puedeRealizarAccion) => {
137
+ if (puedeRealizarAccion) {
138
+ return from(this.actualizarCuentaAccion(actualizacionUsuario));
139
+ }
140
+ else {
141
+ return of({ error: 403, mensaje: 'No tiene permisos' });
142
+ }
143
+ }))
144
+ .subscribe((respuesta) => {
145
+ if (respuesta.error) {
146
+ return response.status(respuesta.error).send(respuesta);
147
+ }
148
+ else {
149
+ return response.send(respuesta);
150
+ }
151
+ }, (error) => {
152
+ if (this.debug) {
153
+ console.error('Error', error);
154
+ }
155
+ return response.status(500).json({ error: 500, mensaje: 'Error del servidor' });
156
+ });
157
+ }
158
+ }
159
+ async actualizarCuentaAccion(actualizacionUsuario) {
160
+ const objetoActualizar = {};
161
+ if (actualizacionUsuario.email) {
162
+ objetoActualizar.email = actualizacionUsuario.email;
163
+ }
164
+ if (actualizacionUsuario.name) {
165
+ objetoActualizar.user_metadata = {
166
+ name: actualizacionUsuario.name
167
+ };
168
+ }
169
+ const respuestaUsuarioActualizado = await this._auth0Service
170
+ .findOneByIdAndUpdate(actualizacionUsuario.user_id, objetoActualizar);
171
+ if (respuestaUsuarioActualizado.error) {
172
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
173
+ }
174
+ else {
175
+ if (objetoActualizar.email) {
176
+ const respuestaEmailVerification = await this._auth0Service
177
+ .sendEmailVerification(actualizacionUsuario.user_id);
178
+ if (respuestaEmailVerification.error) {
179
+ return new InternalServerErrorException({ error: 500, mensaje: 'Error del servidor' });
180
+ }
181
+ else {
182
+ return { mensaje: this._mensajes.mensajeCuentaYCorreoActualizado };
183
+ }
184
+ }
185
+ else {
186
+ return { mensaje: this._mensajes.mensajeCuentaActualizada };
187
+ }
188
+ }
189
+ }
190
+ async findAll(criterioBusqueda, request, response) {
191
+ const tipoPoliticaSeguridad = {
192
+ web: {
193
+ request,
194
+ response
195
+ }
196
+ };
197
+ const objetoPoliticasDeSeguridad = {
198
+ funciones: this._funcionesSeguridad.findMany ? this._funcionesSeguridad.findMany : []
199
+ };
200
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
201
+ puedeRealizarAccion$
202
+ .pipe(mergeMap((puedeRealizarAccion) => {
203
+ if (puedeRealizarAccion) {
204
+ let existeErrorEnConvertirAJSON = false;
205
+ const criterioBusquedaNoEsUnObjeto = typeof criterioBusqueda !== 'object';
206
+ if (criterioBusquedaNoEsUnObjeto) {
207
+ try {
208
+ criterioBusqueda = JSON.parse(criterioBusqueda);
209
+ }
210
+ catch (e) {
211
+ if (this.debug) {
212
+ console.error('Error en parseo JSON', e);
213
+ }
214
+ existeErrorEnConvertirAJSON = true;
215
+ }
216
+ }
217
+ criterioBusqueda = existeErrorEnConvertirAJSON ? undefined : criterioBusqueda;
218
+ return from(this._auth0Service.find(criterioBusqueda));
219
+ }
220
+ else {
221
+ return of({ error: 403, mensaje: 'No tiene permisos' });
222
+ }
223
+ }))
224
+ .subscribe((respuesta) => {
225
+ if (respuesta.error) {
226
+ return response.status(respuesta.error).send(respuesta);
227
+ }
228
+ else {
229
+ return response.send(respuesta);
230
+ }
231
+ }, (error) => {
232
+ if (this.debug) {
233
+ console.error('Error', error);
234
+ }
235
+ return response.status(500).send('Error del servidor');
236
+ });
237
+ }
238
+ async createOne(nuevoUsuario, datosUsuario, request, response) {
239
+ const crearUsuario = new CrearUsuarioDto();
240
+ crearUsuario.name = nuevoUsuario.name;
241
+ crearUsuario.email = nuevoUsuario.email;
242
+ crearUsuario.username = nuevoUsuario.username;
243
+ const errores = await validate(crearUsuario);
244
+ const nuevoDatoUsuario = new this._auth0Service.datosUsuarioDto();
245
+ Object
246
+ .keys(datosUsuario)
247
+ .forEach((nombrePropiedad) => {
248
+ nuevoDatoUsuario[nombrePropiedad] = datosUsuario[nombrePropiedad];
249
+ });
250
+ nuevoDatoUsuario.user_id = 'a';
251
+ const erroresDatosUsuario = await validate(nuevoDatoUsuario);
252
+ const hayErrores = errores.length > 0 || erroresDatosUsuario.length > 0;
253
+ if (hayErrores) {
254
+ if (this.debug) {
255
+ console.error('Error de validacion', errores, erroresDatosUsuario);
256
+ }
257
+ throw new BadRequestException('No envia parametros');
258
+ }
259
+ else {
260
+ const tipoPoliticaSeguridad = {
261
+ web: {
262
+ request,
263
+ response
264
+ }
265
+ };
266
+ const objetoPoliticasDeSeguridad = {
267
+ funciones: this._funcionesSeguridad.create ? this._funcionesSeguridad.create : []
268
+ };
269
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
270
+ puedeRealizarAccion$
271
+ .pipe(mergeMap((puedeRealizarAccion) => {
272
+ if (puedeRealizarAccion) {
273
+ return from(this._auth0Service.create(this.generarUsuario(crearUsuario)));
274
+ }
275
+ else {
276
+ return of({ error: 403, mensaje: 'No tiene permisos' });
277
+ }
278
+ }))
279
+ .subscribe(async (respuesta) => {
280
+ try {
281
+ if (respuesta.error) {
282
+ return response.status(respuesta.error).send(respuesta);
283
+ }
284
+ else {
285
+ if (this._auth0Service._datosUsuarioService && this._auth0Service.datosUsuarioDto) {
286
+ const respuestaAuth0 = respuesta;
287
+ nuevoDatoUsuario.user_id = respuestaAuth0.user_id;
288
+ const respuestaDatosUsuario = await this._auth0Service._datosUsuarioService.create(nuevoDatoUsuario);
289
+ if (respuestaDatosUsuario.error) {
290
+ if (this.debug) {
291
+ console.error('No se pudo crear el registro en la tabla de Datos usuario');
292
+ }
293
+ return response.status(500)
294
+ .json({
295
+ mensaje: 'Se creo el usuario en Auth0 pero no se creo el usuario en DatoUsuario. Error del servidor.',
296
+ data: respuestaAuth0
297
+ });
298
+ }
299
+ else {
300
+ respuestaAuth0.usuario = respuestaDatosUsuario;
301
+ return response.send(respuestaAuth0);
302
+ }
303
+ }
304
+ else {
305
+ if (this.debug) {
306
+ console.info('No se tiene datos de usuario service y dto, no se crea el registro en Datos usuario');
307
+ }
308
+ return response.send(respuesta);
309
+ }
310
+ }
311
+ }
312
+ catch (e) {
313
+ if (this.debug) {
314
+ console.error('Error', e);
315
+ }
316
+ return response.status(500).send('Error del servidor');
317
+ }
318
+ }, (error) => {
319
+ if (this.debug) {
320
+ console.error('Error', error);
321
+ }
322
+ return response.status(500).send('Error del servidor');
323
+ });
324
+ }
325
+ }
326
+ generarUsuario(nuevoUsuario) {
327
+ return {
328
+ username: nuevoUsuario.username.toString(),
329
+ password: `A${nuevoUsuario.username}a-`,
330
+ connection: 'Username-Password-Authentication',
331
+ name: nuevoUsuario.name,
332
+ email: nuevoUsuario.email,
333
+ user_metadata: {
334
+ name: nuevoUsuario.name
335
+ }
336
+ };
337
+ }
338
+ findWhereOr(criterioBusqueda, request, response) {
339
+ const tipoPoliticaSeguridad = {
340
+ web: {
341
+ request,
342
+ response
343
+ }
344
+ };
345
+ const objetoPoliticasDeSeguridad = {
346
+ funciones: this._funcionesSeguridad.findWhereOr ? this._funcionesSeguridad.findWhereOr : []
347
+ };
348
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
349
+ puedeRealizarAccion$
350
+ .pipe(mergeMap((puedeRealizarAccion) => {
351
+ if (puedeRealizarAccion) {
352
+ return from(this.buscarUsuarioFindWhereOr(criterioBusqueda));
353
+ }
354
+ else {
355
+ return of({ error: 403, mensaje: 'No tiene permisos' });
356
+ }
357
+ }))
358
+ .subscribe((respuesta) => {
359
+ if (respuesta.error) {
360
+ return response.status(respuesta.error).send(respuesta);
361
+ }
362
+ else {
363
+ return response.send(respuesta);
364
+ }
365
+ }, (error) => {
366
+ if (this.debug) {
367
+ console.error('Error', error);
368
+ }
369
+ return response.status(500).send('Error del servidor');
370
+ });
371
+ }
372
+ buscarUsuarioFindWhereOr(criterioBusqueda) {
373
+ let camposUsuario;
374
+ try {
375
+ camposUsuario = JSON.parse(criterioBusqueda);
376
+ }
377
+ catch (e) {
378
+ console.error('Error: ', e);
379
+ }
380
+ if (camposUsuario) {
381
+ return this._auth0Service.findWhereOr(camposUsuario.camposABuscar);
382
+ }
383
+ else {
384
+ return of({ mensaje: 'Error en enviar parametros.', error: 400 });
385
+ }
386
+ }
387
+ findAllDatosUsuario(criterioBusqueda, request, response) {
388
+ const tipoPoliticaSeguridad = {
389
+ web: {
390
+ request,
391
+ response
392
+ }
393
+ };
394
+ const objetoPoliticasDeSeguridad = {
395
+ funciones: this._funcionesSeguridad.findAll ? this._funcionesSeguridad.findAll : []
396
+ };
397
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
398
+ puedeRealizarAccion$
399
+ .pipe(mergeMap((puedeRealizarAccion) => {
400
+ if (puedeRealizarAccion) {
401
+ return from(this._auth0Service.findAll(criterioBusqueda, this.skip, this.take));
402
+ }
403
+ else {
404
+ return of({ error: 403, mensaje: 'No tiene permisos' });
405
+ }
406
+ }))
407
+ .subscribe((respuesta) => {
408
+ if (respuesta.error) {
409
+ return response.status(respuesta.error).send(respuesta);
410
+ }
411
+ else {
412
+ return response.send(respuesta);
413
+ }
414
+ }, (error) => {
415
+ if (this.debug) {
416
+ console.error('Error', error);
417
+ }
418
+ return response.status(500).send('Error del servidor');
419
+ });
420
+ }
421
+ async findOneById(id, request, response) {
422
+ const tipoPoliticaSeguridad = {
423
+ web: {
424
+ request,
425
+ response
426
+ }
427
+ };
428
+ const objetoPoliticasDeSeguridad = {
429
+ funciones: this._funcionesSeguridad.findOne ? this._funcionesSeguridad.findOne : []
430
+ };
431
+ const puedeRealizarAccion$ = aplicarPoliticasDeSeguridad(tipoPoliticaSeguridad, objetoPoliticasDeSeguridad, this.contexto);
432
+ puedeRealizarAccion$
433
+ .pipe(mergeMap((puedeRealizarAccion) => {
434
+ if (puedeRealizarAccion) {
435
+ return from(this._auth0Service.findOne(id));
436
+ }
437
+ else {
438
+ return of({ error: 403, mensaje: 'No tiene permisos' });
439
+ }
440
+ }))
441
+ .subscribe((respuesta) => {
442
+ if (respuesta.error) {
443
+ return response.status(respuesta.error).send(respuesta);
444
+ }
445
+ else {
446
+ return response.send(respuesta);
447
+ }
448
+ }, (error) => {
449
+ if (this.debug) {
450
+ console.error('Error', error);
451
+ }
452
+ return response.status(500).send('Error del servidor');
453
+ });
454
+ }
455
+ };
456
+ __decorate([
457
+ HttpCode(200),
458
+ Post('actualizarUsuarioPorPrimeraVez'),
459
+ __param(0, Body('email')),
460
+ __param(1, Body('name')),
461
+ __param(2, Body('user_id')),
462
+ __param(3, Request()),
463
+ __param(4, Response())
464
+ ], PrincipalAuth0Controller.prototype, "actualizarUsuarioPorPrimeraVez", null);
465
+ __decorate([
466
+ HttpCode(200),
467
+ Post('actualizarCuenta'),
468
+ __param(0, Body('email')),
469
+ __param(1, Body('name')),
470
+ __param(2, Body('user_id')),
471
+ __param(3, Request()),
472
+ __param(4, Response())
473
+ ], PrincipalAuth0Controller.prototype, "actualizarCuenta", null);
474
+ __decorate([
475
+ HttpCode(200),
476
+ Get(''),
477
+ __param(0, Query('criterioBusqueda')),
478
+ __param(1, Request()),
479
+ __param(2, Response())
480
+ ], PrincipalAuth0Controller.prototype, "findAll", null);
481
+ __decorate([
482
+ HttpCode(200),
483
+ Post(''),
484
+ __param(0, Body('datosAuth0')),
485
+ __param(1, Body('datosUsuario')),
486
+ __param(2, Request()),
487
+ __param(3, Response())
488
+ ], PrincipalAuth0Controller.prototype, "createOne", null);
489
+ __decorate([
490
+ Get('findWhereOrDatosUsuario'),
491
+ __param(0, Query('criterioBusqueda')),
492
+ __param(1, Request()),
493
+ __param(2, Response())
494
+ ], PrincipalAuth0Controller.prototype, "findWhereOr", null);
495
+ __decorate([
496
+ Get('findAllDatosUsuario'),
497
+ __param(0, Query('criterioBusqueda')),
498
+ __param(1, Request()),
499
+ __param(2, Response())
500
+ ], PrincipalAuth0Controller.prototype, "findAllDatosUsuario", null);
501
+ __decorate([
502
+ HttpCode(200),
503
+ Get(':id'),
504
+ __param(0, Param('id')),
505
+ __param(1, Request()),
506
+ __param(2, Response())
507
+ ], PrincipalAuth0Controller.prototype, "findOneById", null);
508
+ PrincipalAuth0Controller = __decorate([
509
+ Controller('auth0')
510
+ ], PrincipalAuth0Controller);
511
+ export { PrincipalAuth0Controller };
512
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aDAuY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXV0aDAvYXV0aDAuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMzRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLElBQUksRUFDSixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFDSiw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUNuRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQU12RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBT3hFLElBQXNCLHdCQUF3QixHQUE5QztJQUNFLFlBQ21CLG1CQUE0QyxFQUM1QyxhQUEwQyxFQUMxQyxZQUFzQztRQUNyRCxxQkFBcUIsRUFBRSwwQ0FBMEM7UUFDakUsd0JBQXdCLEVBQUUscUJBQXFCO1FBQy9DLCtCQUErQixFQUFFLCtEQUErRDtLQUNqRyxFQUNnQixRQUFpQixJQUFJLEVBQ3JCLE9BQWUsQ0FBQyxFQUNoQixPQUFlLEVBQUUsRUFDeEIsUUFBYTtRQVZOLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBeUI7UUFDNUMsa0JBQWEsR0FBYixhQUFhLENBQTZCO1FBQzFDLGNBQVMsR0FBVCxTQUFT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