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