…lity
- Added URL configuration for the Django app.
- Created MT5 login form and associated views for handling login and logout.
- Implemented middleware to protect routes requiring MT5 authentication.
- Developed dashboard view to display account information and open positions.
- Created templates for login and dashboard pages with Bootstrap styling.
- Established MT5 client API for robust interaction with the MT5 server.
- Updated Dockerfile for the MT5 service to use Debian Bookworm and optimize package installations.
- Introduced JWT-based authentication for the Flask MT5 API with session management.
- Secured API routes with authentication middleware and updated Swagger documentation.
- Adjusted docker-compose configuration for service port mapping.
Summary
Corrige 5 problemas críticos detectados en el sistema de autenticación
MT5 y el setup de dependencias:
desconectaba el terminal MT5 para todos los usuarios concurrentes,
no solo el que cerraba sesión. Además, no había guardia contra logins
simultáneos con cuentas distintas (el MetaTrader5 singleton del
proceso solo puede hospedar una cuenta a la vez).
restart de Flask y no era compatible con más de 1 worker de gunicorn.
con 'your-super-secret-key-change-in-production' si la variable no
estaba seteada, permitiendo firmar/verificar JWTs con una clave pública.
fallaba en muchos entornos al no detectar la codificación.
dependían de la TZ local del contenedor.
Cambios
por la propia Redis vía SETEX/EXPIRE. Nueva clave mt5:current_login
para marcar qué login "posee" el terminal en cada momento. El /login
rechaza con 409 Conflict si ya hay otra cuenta activa, salvo que se
pase "force": true. El /logout ya no llama a mt5.shutdown():
solo borra la sesión y libera el marcador current_login si era suyo.
Todas las marcas temporales pasan a datetime.now(timezone.utc).
con instrucciones si falta o es un placeholder conocido. Inicializa
el store de sesiones vía init_session_store(REDIS_URL).
añade PyJWT==2.8.0 (lo importaba mt5_client.py pero faltaba).
comando de generación; se añade REDIS_URL=redis://redis:6379/1.