|
|
@@ -2,6 +2,23 @@ import os
|
|
|
from fastapi import HTTPException
|
|
|
from fastapi.responses import HTMLResponse, FileResponse
|
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
+from starlette.responses import Response
|
|
|
+from starlette.types import Scope, Receive, Send
|
|
|
+
|
|
|
+
|
|
|
+class NoCacheStaticFiles(StaticFiles):
|
|
|
+ """StaticFiles que agrega headers para evitar cache"""
|
|
|
+
|
|
|
+ async def get_response(self, path: str, scope: Scope) -> Response:
|
|
|
+ """Override para agregar headers de no-cache"""
|
|
|
+ response = await super().get_response(path, scope)
|
|
|
+
|
|
|
+ # Agregar headers para evitar cache
|
|
|
+ response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate, max-age=0"
|
|
|
+ response.headers["Pragma"] = "no-cache"
|
|
|
+ response.headers["Expires"] = "0"
|
|
|
+
|
|
|
+ return response
|
|
|
|
|
|
|
|
|
async def serve_app_html():
|
|
|
@@ -9,26 +26,47 @@ async def serve_app_html():
|
|
|
index_path = os.path.join("public","main", "index.html")
|
|
|
if not os.path.exists(index_path):
|
|
|
raise HTTPException(status_code=404, detail="public/index.html not found.")
|
|
|
- return FileResponse(index_path)
|
|
|
+
|
|
|
+ # Headers para evitar cache
|
|
|
+ headers = {
|
|
|
+ "Cache-Control": "no-cache, no-store, must-revalidate, max-age=0",
|
|
|
+ "Pragma": "no-cache",
|
|
|
+ "Expires": "0"
|
|
|
+ }
|
|
|
+ return FileResponse(index_path, headers=headers)
|
|
|
|
|
|
async def serve_register_html():
|
|
|
"""Serve the register HTML file"""
|
|
|
register_path = os.path.join("public", "register", "index.html")
|
|
|
if not os.path.exists(register_path):
|
|
|
raise HTTPException(status_code=404, detail="public/register/index.html not found.")
|
|
|
- return FileResponse(register_path)
|
|
|
+
|
|
|
+ # Headers para evitar cache
|
|
|
+ headers = {
|
|
|
+ "Cache-Control": "no-cache, no-store, must-revalidate, max-age=0",
|
|
|
+ "Pragma": "no-cache",
|
|
|
+ "Expires": "0"
|
|
|
+ }
|
|
|
+ return FileResponse(register_path, headers=headers)
|
|
|
|
|
|
def mount_register_static_files(app):
|
|
|
"""Mount static files for the register page"""
|
|
|
- app.mount("/register/", StaticFiles(directory="public/register", html=False), name="register_static")
|
|
|
+ app.mount("/register/", NoCacheStaticFiles(directory="public/register", html=False), name="register_static")
|
|
|
|
|
|
def mount_main_static_files(app):
|
|
|
"""Mount static files"""
|
|
|
- app.mount("/express/", StaticFiles(directory="public/main", html=False), name="public_root_assets")
|
|
|
+ app.mount("/express/", NoCacheStaticFiles(directory="public/main", html=False), name="public_root_assets")
|
|
|
|
|
|
def serve_image(image_path: str):
|
|
|
"""Serve images from the public/images directory"""
|
|
|
image_full_path = os.path.join("public", "images", image_path)
|
|
|
if not os.path.exists(image_full_path):
|
|
|
raise HTTPException(status_code=404, detail=f"Image '{image_path}' not found.")
|
|
|
- return FileResponse(image_full_path)
|
|
|
+
|
|
|
+ # Headers para evitar cache en imágenes también
|
|
|
+ headers = {
|
|
|
+ "Cache-Control": "no-cache, no-store, must-revalidate, max-age=0",
|
|
|
+ "Pragma": "no-cache",
|
|
|
+ "Expires": "0"
|
|
|
+ }
|
|
|
+ return FileResponse(image_full_path, headers=headers)
|