Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
ada:howto:sicoferp:factory:new-migracion-sicoferp:front:configuracion-libreria-encriptacion [2025/01/29 16:59] 192.168.175.192 |
ada:howto:sicoferp:factory:new-migracion-sicoferp:front:configuracion-libreria-encriptacion [2025/03/18 14:14] (actual) 192.168.175.219 |
||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Configuración librería encriptación ====== | ====== Configuración librería encriptación ====== | ||
- | Esta librería funciona como un repositorio centralizado de componentes, permitiendo compartir y reutilizar elementos visuales de manera consistente en todas las aplicaciones. Al mantener un sistema de diseño unificado, garantiza la coherencia visual y mejora la eficiencia del desarrollo, reduciendo la duplicación de código y simplificando el mantenimiento de la interfaz de usuario. | + | Librería para encriptar y desencriptar datos de forma segura, garantizando la protección de la información transmitida y recibida. |
===== Uso ===== | ===== Uso ===== | ||
Línea 9: | Línea 9: | ||
* Instale la librería de npm crypto-js [[https://www.npmjs.com/package/crypto-js|Enlace a la librería]] | * Instale la librería de npm crypto-js [[https://www.npmjs.com/package/crypto-js|Enlace a la librería]] | ||
+ | <code> | ||
npm i crypto-js | npm i crypto-js | ||
+ | </code> | ||
* Crea un archivo **.npmrc** en la raíz del proyecto, el cual va a contener la configuración para instalación de la librería alojada en Nexus Repository. | * Crea un archivo **.npmrc** en la raíz del proyecto, el cual va a contener la configuración para instalación de la librería alojada en Nexus Repository. | ||
- | * Agregue la dependencia al archivo **package.json** **(Recuerde verificar la versión actual de la librería)** e instale las dependencias. | + | * Agregue la dependencia al archivo **package.json** en el bloque "dependencies" **(Recuerde verificar la versión actual de la librería)** e instale las dependencias. |
+ | <code> | ||
"crypto-util-library": "http://10.1.40.130:8081/repository/npm-hosted/crypto-util-library/-/crypto-util-library-1.0.0.tgz" | "crypto-util-library": "http://10.1.40.130:8081/repository/npm-hosted/crypto-util-library/-/crypto-util-library-1.0.0.tgz" | ||
+ | </code> | ||
* Crea un servicio para centralizar y gestionar la encriptación y desencriptación de datos, utilizando los métodos proporcionados por la librería **crypto-util-library**. Esto facilita la reutilización del código y garantiza un manejo seguro y consistente de la información en toda la aplicación. | * Crea un servicio para centralizar y gestionar la encriptación y desencriptación de datos, utilizando los métodos proporcionados por la librería **crypto-util-library**. Esto facilita la reutilización del código y garantiza un manejo seguro y consistente de la información en toda la aplicación. | ||
+ | <code> | ||
import { CryptoUtil } from 'crypto-util-library'; | import { CryptoUtil } from 'crypto-util-library'; | ||
Línea 27: | Línea 29: | ||
return this.cryptoUtil.decryptObject(data); | return this.cryptoUtil.decryptObject(data); | ||
} | } | ||
+ | | ||
encryptData(data: any) { | encryptData(data: any) { | ||
return this.cryptoUtil.encryptObject(data); | return this.cryptoUtil.encryptObject(data); | ||
} | } | ||
+ | </code> | ||
* Configura un **interceptor** encargado de la encriptación y desencriptación de los datos en las solicitudes HTTP. Este interceptor recibe como parámetro un **archivo de configuración** que permite definir una lista de URLs excluidas, en las cuales no es necesario aplicar estos procesos. De esta manera, se optimiza el rendimiento y se garantiza que solo las comunicaciones sensibles sean protegidas mediante encriptación. | * Configura un **interceptor** encargado de la encriptación y desencriptación de los datos en las solicitudes HTTP. Este interceptor recibe como parámetro un **archivo de configuración** que permite definir una lista de URLs excluidas, en las cuales no es necesario aplicar estos procesos. De esta manera, se optimiza el rendimiento y se garantiza que solo las comunicaciones sensibles sean protegidas mediante encriptación. | ||
- | ==== Interceptor ==== | + | * [[ada:howto:sicoferp:factory:new-migracion-sicoferp:front:configuracion-libreria-encriptacion:interceptor-encriptacion|Interceptor ]] |
+ | * [[ada:howto:sicoferp:factory:new-migracion-sicoferp:front:configuracion-libreria-encriptacion:archivo-configuracion-interceptor-encriptacion|Archivo de configuración]] | ||
- | import { CryptoConfig } from './crypto.config'; | + | * Realice la configuración del interceptor en el archivo **app.confi.ts** en el array de providers y asegúrese de pasar el archivo de configuración como parámetro para definir las reglas de encriptación y exclusión de URLs. La implementación debe realizarse de la siguiente manera:: |
- | import { CryptoUtilLibraryService } from '../services/crypto-util-library.service'; | + | |
+ | <code> | ||
+ | import { cryptoInterceptorInterceptor } from './shared/interceptors/crypto-interceptor.interceptor'; | ||
+ | import { cryptoConfig } from './shared/interceptors/crypto.config'; | ||
+ | |||
+ | export const appConfig: ApplicationConfig = { | ||
+ | providers: [ | ||
+ | provideHttpClient( | ||
+ | withInterceptors([cryptoInterceptorInterceptor(cryptoConfig)]) | ||
+ | ) | ||
+ | ] | ||
+ | }; | ||
+ | </code> | ||
- | export const cryptoInterceptorInterceptor = (config: CryptoConfig): HttpInterceptorFn => | ||
- | (request, next) => { | ||
- | const cryptoService = inject(CryptoUtilLibraryService); | ||
- | const shouldSkip = config.excludedUrls.some(url => | ||
- | request.url.includes(url) | ||
- | ); | ||
- | if (shouldSkip) { | ||
- | return next(request); | ||
- | } | ||
- | if (request.body) { | ||
- | return from(cryptoService.encryptData(request.body)).pipe( | ||
- | switchMap(encryptedBody => { | ||
- | const clonedRequest = request.clone({ body: encryptedBody }); | ||
- | return next(clonedRequest).pipe( | ||
- | switchMap(event => { | ||
- | if (event instanceof HttpResponse && event.body) { | ||
- | const decryptedBodyPromise = cryptoService.decryptResponse(event.body); | ||
- | return from(decryptedBodyPromise).pipe( | ||
- | map(decryptedBody => event.clone({ body: decryptedBody })) | ||
- | ); | ||
- | } | ||
- | return [event]; | ||
- | }), | ||
- | catchError(error => { | ||
- | if (error instanceof HttpErrorResponse && error.error) { | ||
- | const decryptedErrorPromise = cryptoService.decryptResponse(error.error); | ||
- | return from(decryptedErrorPromise).pipe( | ||
- | switchMap(decryptedError => { | ||
- | const clonedError = new HttpErrorResponse({ | ||
- | ...error, | ||
- | error: decryptedError, | ||
- | url: error.url ?? undefined | ||
- | }); | ||
- | return throwError(() => clonedError); | ||
- | }) | ||
- | ); | ||
- | } | ||
- | return throwError(() => error); | ||
- | }) | ||
- | ); | ||
- | }) | ||
- | ); | ||
- | } | ||
- | return next(request).pipe( | ||
- | switchMap(event => { | ||
- | if (event instanceof HttpResponse && event.body) { | ||
- | const decryptedBodyPromise = cryptoService.decryptResponse(event.body); | ||
- | return from(decryptedBodyPromise).pipe( | ||
- | map(decryptedBody => event.clone({ body: decryptedBody })) | ||
- | ); | ||
- | } | ||
- | return [event]; | ||
- | }), | ||
- | catchError(error => { | ||
- | if (error instanceof HttpErrorResponse && error.error) { | ||
- | const decryptedErrorPromise = cryptoService.decryptResponse(error.error); | ||
- | return from(decryptedErrorPromise).pipe( | ||
- | switchMap(decryptedError => { | ||
- | const clonedError = new HttpErrorResponse({ | ||
- | ...error, | ||
- | error: decryptedError, | ||
- | url: error.url ?? undefined | ||
- | }); | ||
- | return throwError(() => clonedError); | ||
- | }) | ||
- | ); | ||
- | } | ||
- | return throwError(() => error); | ||
- | }) | ||
- | ); | ||
- | }; | ||
[[ada:howto:sicoferp:factory:new-migracion-sicoferp:front|←Regresar]] | [[ada:howto:sicoferp:factory:new-migracion-sicoferp:front|←Regresar]] | ||
+ | |||
+ | ---- | ||
+ | |||
+ | //Documento actualizado: 03/03/2025//\\ | ||
+ | //Elaborado por: Luis Ardila - Desarrollador frontEnd// |