caverav / auditforge

AuditForge is a pentest reporting application making it simple and easy to write your findings and generate a customizable report.
https://auditforge.feriadesoftware.cl
MIT License
21 stars 0 forks source link

CWE Model Update #161

Closed jllanosg closed 6 days ago

jllanosg commented 1 week ago

Descripción

Agrega el backend y el frontend para actualizar el modelo de CWE Si es necesario

Motivación y Contexto

HU04

¿Cómo ha sido probado?

Si hay una actualización disponible, aparece un modal que indica si se quiere actualizar o no. En caso de aceptarla, debería comenzar a actualizarse, apareciendo un icono de carga. Si se rechaza, entonces aparece el mismo ícono pero que permite abrir nuevamente el modal y aceptar la actualización.

Como esto es dificil de hacer ya que el modelo no cambia constantemente, se puede moficar el efecto que hace el checkeo en ModeUpdateContainer.tsx, linea 26:

setIsOpenModal(result);

De esta manera abrirá el modal aunque no haya actualización, y permite hacer el flujo de actualizar el modelo.

Capturas de pantalla (si es apropiado):

Tipos de cambios

Lista de verificación:

Summary by CodeRabbit

coderabbitai[bot] commented 1 week ago

[!CAUTION]

Review failed

The pull request is closed.

📝 Walkthrough ```markdown
📝 Walkthrough ## Walkthrough Este pull request introduce nuevas funcionalidades en la aplicación, específicamente relacionadas con la gestión de actualizaciones del modelo CWE. Se agregan nuevas rutas en el backend para verificar y actualizar el modelo CWE, así como mejoras en la generación de secretos JWT y permisos de usuario. También se implementan nuevos componentes en el frontend para manejar el proceso de actualización, incluyendo la verificación de actualizaciones y la interacción del usuario a través de un modal. ## Changes | Archivo | Resumen de cambios | |---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| | `backend/src/app.js` | Se agregan nuevas rutas: `check-cwe-update` y `update-cwe-model`. | | `backend/src/lib/auth.js` | Se modifica la generación de secretos JWT y se amplían los permisos del rol `user` para incluir `'check-update:all'` y `'update-model:all'`. | | `backend/src/routes/check-cwe-update.js` | Se crea un nuevo manejador de ruta para `/api/check-cwe-update` que verifica actualizaciones del modelo CWE. | | `backend/src/routes/update-cwe-model.js` | Se crea un nuevo manejador de ruta para `/api/update-cwe-model` que permite actualizar el modelo CWE. | | `cwe_api/Dockerfile` | Se modifica la lógica de instalación del modelo `modelo_cwe`, eliminando la eliminación del archivo zip después de descomprimir. | | `cwe_api/main.py` | Se añaden constantes y funciones para gestionar el modelo CWE, incluyendo nuevos endpoints para verificar y actualizar el modelo. | | `frontend/src/i18n/en-US/index.ts` | Se agregan nuevos mensajes y etiquetas para la interfaz de usuario relacionados con la actualización del modelo CWE. | | `frontend/src/routes/root.tsx` | Se importa y se añade el componente `ModelUpdateContainer` dentro de la jerarquía del componente `Root`. | | `frontend/src/routes/settings/ModelUpdateContainer.tsx` | Se crea un nuevo componente para gestionar el proceso de actualización del modelo, incluyendo lógica para verificar y realizar actualizaciones. | | `frontend/src/services/settings.ts` | Se añaden nuevas funciones asíncronas para verificar y actualizar el modelo CWE. | ## Possibly related PRs - **#104**: Este PR también involucra la adición de nuevas rutas en `backend/src/app.js`, que está directamente relacionado con las nuevas rutas añadidas en el PR principal. - **#161**: Este PR introduce nuevas rutas en `backend/src/app.js` para verificar y actualizar el modelo CWE, alineándose con los cambios realizados en el PR principal. ## Suggested reviewers - Icksir - massi-ponce - jllanosg - Sealra
```

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
🪧 Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): > ‼️ **IMPORTANT** > Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged. - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
caverav commented 1 week ago

Sin cambiar el set state me salta el modal para la actualización, y por más que le doy que sí, sigue saltando

caverav commented 1 week ago

No veo ningún feedback al usuario del estado de actualización (ya que no es instantáneo, pero me sale un toaster que dice que se actualizó satisfactoriamente) como usuario no puedo saber cuándo está lista la actualización, si todavía sigue actualizando, nada. Tal vez es parte del bug de que me sale que debo actualizar cuando en realidad no? No lo sé

jllanosg commented 1 week ago

No veo ningún feedback al usuario del estado de actualización (ya que no es instantáneo, pero me sale un toaster que dice que se actualizó satisfactoriamente) como usuario no puedo saber cuándo está lista la actualización, si todavía sigue actualizando, nada. Tal vez es parte del bug de que me sale que debo actualizar cuando en realidad no? No lo sé

que raro, se supone que cuando aceptas la actualización aparece un spinner abajo a la derecha con un tooltip que te indica que está actualizando

jllanosg commented 1 week ago

No veo ningún feedback al usuario del estado de actualización (ya que no es instantáneo, pero me sale un toaster que dice que se actualizó satisfactoriamente) como usuario no puedo saber cuándo está lista la actualización, si todavía sigue actualizando, nada. Tal vez es parte del bug de que me sale que debo actualizar cuando en realidad no? No lo sé

respecto al bug que mencionas, necesito más logs y detalles al respecto, ya que no me pasa actualmente

caverav commented 1 week ago

No veo ningún feedback al usuario del estado de actualización (ya que no es instantáneo, pero me sale un toaster que dice que se actualizó satisfactoriamente) como usuario no puedo saber cuándo está lista la actualización, si todavía sigue actualizando, nada. Tal vez es parte del bug de que me sale que debo actualizar cuando en realidad no? No lo sé

respecto al bug que mencionas, necesito más logs y detalles al respecto, ya que no me pasa actualmente

No te puedo dar más logs y detalles porque no hay, es tal cual lo que digo, no hay logs al respecto, ni en los contenedores ni en la consola

Icksir commented 1 week ago

Cómo se hace correctamente el testeo? Modifiqué el link de descarga del archivo de CWE a otro archivo en el .env, pero no me saltó ningún pop up indicándome la actualización

jllanosg commented 1 week ago

Cómo se hace correctamente el testeo? Modifiqué el link de descarga del archivo de CWE a otro archivo en el .env, pero no me saltó ningún pop up indicándome la actualización

image

Icksir commented 1 week ago

Me queda duda eso sí respecto cómo evalúan cuál es el último modelo, probé cambiando el link al modelo antiguo y efectivamente se actualizó al actual (al menos así me indicaba). No quiero cambiar el link del modelo actual pa no pitearmelo, pero de qué forma consideran el más nuevo?

Sealra commented 1 week ago

Me queda duda eso sí respecto cómo evalúan cuál es el último modelo, probé cambiando el link al modelo antiguo y efectivamente se actualizó al actual (al menos así me indicaba). No quiero cambiar el link del modelo actual pa no pitearmelo, pero de qué forma consideran el más nuevo?

Se considera en base a que supuestamente es una url fija (o al menos en eso se había quedado en las reuniones), entonces siempre el archivo de la url será el 'más' nuevo, mientras que el .zip local será la versión anterior.

massi-ponce commented 1 week ago

Hay algo que me genera un poco de dudas. Y es el hecho de que, al refrescar la página (en cualquier sección dentro de AuditForge), el modal de actualización vuelve a aparecer incluso cuando anteriormente uno clickeó en "Dismiss". ¿Ese comportamiento es el esperado?

Lo contrasto con la situación en la que: el usuario clickee en "Dismiss", aparece el spinner abajo a la derecha, y si refresca la página, se mantiene el spinner (no aparece nuevamente el modal).

massi-ponce commented 1 week ago

Si le doy a actualizar el modelo y luego refresco la página, el spinner de abajo a la derecha desaparece, dejando sin feedback al usuario de lo que está sucediendo (el modelo se sigue actualizando, se canceló la actualización, etc). Luego, debo volver a refrescar para que nuevamente se abra el modal de actualización. (esto también pasa si le doy a actualizar, me deslogueo, y luego, vuelvo a loguearme)

Esto me genera la duda de cómo se maneja la actualización "por debajo", ya que no sé si este "bug" aparece solamente por la forma en la que estamos probando el PR o no.

jllanosg commented 1 week ago

Hay algo que me genera un poco de dudas. Y es el hecho de que, al refrescar la página (en cualquier sección dentro de AuditForge), el modal de actualización vuelve a aparecer incluso cuando anteriormente uno clickeó en "Dismiss". ¿Ese comportamiento es el esperado?

Lo contrasto con la situación en la que: el usuario clickee en "Dismiss", aparece el spinner abajo a la derecha, y si refresca la página, se mantiene el spinner (no aparece nuevamente el modal).

Técnicamente como es una single page application no está considerado el recargar la página, tampoco existe forma actualmente de saber en tiempo real el estado de la actualización. Lo que se espera es que muy de vez en cuando el usuario tenga una actualización disponible y la aplique si es que lo haya necesario. Este es el comportamiento esperado dado el diseño de figma. Es deficiente en el sentido que mencionas? Si, pero para cambiarlo se necesitaría mucho más tiempo del disponible

jllanosg commented 1 week ago

Considerando que las 2 cosas que comenté ocurren cuando se refresca la página, y que nuestra app actualmente no es completamente una "single page application" (hay secciones en las que hay que refrescar para observar cambios)... LGTM

Que haya secciones hechas a medias no cambia el hecho de que nuestra app esté planteada como una SPA.

massi-ponce commented 1 week ago

Considerando que las 2 cosas que comenté ocurren cuando se refresca la página, y que nuestra app actualmente no es completamente una "single page application" (hay secciones en las que hay que refrescar para observar cambios)... LGTM

Que haya secciones hechas a medias no cambia el hecho de que nuestra app esté planteada como una SPA.

Nunca dije que nuestra app no estuviera planteada como una SPA. Solamente aclaré que las cosas que pillé ocurren solamente cuando se refresca la página y que, actualmente en la app, hay secciones que requieren refrescar la página. No le veo lo malo(?

jllanosg commented 1 week ago

Considerando que las 2 cosas que comenté ocurren cuando se refresca la página, y que nuestra app actualmente no es completamente una "single page application" (hay secciones en las que hay que refrescar para observar cambios)... LGTM

Que haya secciones hechas a medias no cambia el hecho de que nuestra app esté planteada como una SPA.

Nunca dije que nuestra app no estuviera planteada como una SPA. Solamente aclaré que las cosas que pillé ocurren solamente cuando se refresca la página y que, actualmente en la app, hay secciones que requieren refrescar la página. No le veo lo malo(?

El tema es que no debería ser así