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