Repository navigation
fix(menu-dia): que el menú se vea y se descargue en la tablet del repartidor - #25
Merged
Merged
Conversation
…artidor La vista previa salia en blanco y Descargar respondia "popups disabled". Las dos cosas son la misma causa: la pantalla entregaba el PDF como blob: y el WebView de Android no sabe que hacer con eso. - El WebView no trae visor de PDF, asi que el <iframe> no dibujaba nada y no habia error en ninguna parte. Se agrega GET /menu-dia/imagen, que rasteriza el mismo PDF a PNG con PDFBox (150 DPI). Una imagen se ve en cualquier navegador. El PDF sigue siendo lo que se imprime. - Una descarga desde blob: no se dispara nunca en el WebView, y el clic acaba contando como ventana nueva, prohibida en modo kiosko. De ahi el mensaje. Se agrega una descarga por URL normal con un token de 3 minutos en la query, porque el gestor de descargas de Android no manda la cabecera Authorization. /menu-dia/descargar queda sin JWT a proposito: la credencial es el token, aleatorio de 256 bits y de vida corta, y solo abre el menu del dia — el mismo papel que se le da a los clientes. El porque completo esta escrito en EnlacesDeDescarga. Tests: 6 nuevos (PNG valido y legible, y las cuatro formas de que el token no deba entrar). Suite de 80 a 86.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
El repartidor no podía ver el menú ni descargarlo: la vista previa salía en blanco y el botón respondía "popups / new tab disabled".
Una sola causa, dos síntomas
La pantalla bajaba el PDF con axios y lo volvía un
blob:. En el WebView de Android —que es lo que corre dentro de Fully Kiosk— eso falla de dos maneras:<iframe>no dibujaba nada y no había error en ninguna parte.blob:no dispara nunca elDownloadListenerdel WebView, y el clic acaba contando como ventana nueva. Las tablets tienenenablePopups: false.Las tablets además llevan
disableContextMenu: trueyshowShareButton: false, así que tampoco había forma de guardar con pulsación larga. Esos ajustes son a propósito: la tablet es un kiosko, no un navegador. Este PR no toca ninguna tablet — arregla la aplicación para que funcione dentro del kiosko tal como está.Qué cambia
GET /menu-dia/imagen— el mismo PDF rasterizado a PNG conPDFRenderer(150 DPI). PDFBox ya estaba, no hay dependencia nueva. Una imagen se dibuja en cualquier navegador. El PDF sigue siendo lo que se descarga e imprime, que es vectorial.POST /menu-dia/enlace-descarga(autenticado) devuelve/menu-dia/descargar?t=…. Hace falta porque el gestor de descargas de Android pide el archivo por su cuenta y no manda la cabeceraAuthorization.Lo que hay que mirar con lupa
GET /menu-dia/descargares la única ruta de la API sin JWT aparte de/login,/actuator/healthy el WebSocket. La credencial es el token de la query:SecureRandom, 43 caracteres en Base64;No es de un solo uso a propósito: el gestor de descargas de Android puede repetir la petición (reintento, o un HEAD antes del GET), y con un solo uso la descarga se vería rota sin motivo aparente. Se acotó por tiempo, que es lo que de verdad limita la exposición. Hay un test que deja esa decisión escrita para que nadie la "arregle" sin saber qué rompe.
Tests
6 nuevos, suite de 80 a 86:
No lleva test de MockMvc porque el proyecto no tiene ninguno y no me pareció que un arreglo fuera el lugar para introducir ese andamiaje. La lógica nueva está cubierta; lo que queda sin cubrir es el cableado del controlador.
Sin probar en staging
restfood-staging.sh datosestá roto desde el endurecimiento del 27 de julio:restfood_backupsolo puede crear y borrarrestaurante_ensayo, norestaurante_staging, y esa base ya no existe. Va aparte, no en este PR.Va con RestFoodF#12. Los dos tienen que desplegarse juntos: la pantalla nueva pide rutas que solo existen con este backend.