in_time.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. """
  2. Middleware para agregar headers de no-cache a las respuestas
  3. """
  4. from fastapi.responses import HTMLResponse
  5. from fastapi.security import HTTPAuthorizationCredentials
  6. from starlette.middleware.base import BaseHTTPMiddleware
  7. from starlette.requests import Request
  8. from starlette.responses import Response
  9. from auth.security import get_current_user
  10. from config import settings
  11. import datetime
  12. start_time = datetime.time(10, 0, 0)
  13. end_time = datetime.time(23, 30, 0)
  14. class InTimeMiddleware(BaseHTTPMiddleware):
  15. """
  16. Middleware que revisa si la peticion se hizo dentro del horario de funcionamiento del local
  17. 10:00 a 23:30 horario de Chile
  18. """
  19. async def dispatch(self, request: Request, call_next):
  20. authorization = request.headers.get("Authorization")
  21. if not authorization:
  22. if settings.IS_OPEN_STORE:
  23. return await call_next(request)
  24. else:
  25. return HTMLResponse("""
  26. <!DOCTYPE html>
  27. <html lang="en">
  28. <head>
  29. <meta charset="UTF-8">
  30. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  31. <title>Local Cerrando :(</title>
  32. <script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
  33. </head>
  34. <body>
  35. <!-- Header -->
  36. <div class="bg-[#101419] h-screen flex justify-center items-center flex- px-6 py-8 text-white text-center relative">
  37. <!-- Icono principal -->
  38. <div class="text-6xl mb-3">😫</div>
  39. <!-- Título -->
  40. <h2 class="text-2xl font-bold mb-2">¡El local se encuentra cerrado!</h2>
  41. </div>
  42. </body>
  43. </html>
  44. """, status_code=420)
  45. time = datetime.datetime.now().time()
  46. user = await get_current_user(
  47. HTTPAuthorizationCredentials(scheme="Bearer", credentials=authorization)
  48. )
  49. if ((time >= start_time and time <= end_time) and settings.IS_OPEN_STORE) or (user.permissions or 0) >= 1:
  50. response = await call_next(request)
  51. return response
  52. else:
  53. return HTMLResponse("""
  54. <!DOCTYPE html>
  55. <html lang="en">
  56. <head>
  57. <meta charset="UTF-8">
  58. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  59. <title>Local Cerrando :(</title>
  60. <script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
  61. </head>
  62. <body>
  63. <!-- Header -->
  64. <div class="bg-[#101419] h-screen flex justify-center items-center flex- px-6 py-8 text-white text-center relative">
  65. <!-- Icono principal -->
  66. <div class="text-6xl mb-3">😫</div>
  67. <!-- Título -->
  68. <h2 class="text-2xl font-bold mb-2">¡El local se encuentra cerrado!</h2>
  69. </div>
  70. </body>
  71. </html>
  72. """, status_code=420)