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