@manticore-labs/nest 0.0.73 → 0.0.74

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