@manticore-labs/nest 0.0.56 → 0.0.58

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