96 lines
2.4 KiB
Python
96 lines
2.4 KiB
Python
import os
|
|
from datetime import timedelta
|
|
from dotenv import load_dotenv
|
|
|
|
# Cargar variables de entorno desde archivo .env
|
|
load_dotenv()
|
|
|
|
# Directorio base donde se ejecuta la aplicación
|
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
|
|
|
|
|
class Config:
|
|
"""Configuración base."""
|
|
|
|
# Seguridad
|
|
SECRET_KEY = os.environ.get("SECRET_KEY") or "clave-secreta-por-defecto"
|
|
BCRYPT_LOG_ROUNDS = 12
|
|
WTF_CSRF_ENABLED = True
|
|
|
|
# Sesión
|
|
SESSION_TYPE = "filesystem"
|
|
SESSION_FILE_DIR = os.path.join(basedir, "flask_session")
|
|
SESSION_PERMANENT = True
|
|
PERMANENT_SESSION_LIFETIME = timedelta(days=1)
|
|
SESSION_USE_SIGNER = True
|
|
|
|
# Caché
|
|
CACHE_TYPE = "SimpleCache"
|
|
CACHE_DEFAULT_TIMEOUT = 300
|
|
|
|
# Almacenamiento
|
|
STORAGE_PATH = os.environ.get("STORAGE_PATH") or os.path.join(basedir, "storage")
|
|
MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50 MB
|
|
|
|
# Configuración de la aplicación
|
|
APP_NAME = "Arch"
|
|
ADMIN_EMAIL = os.environ.get("ADMIN_EMAIL") or "admin@example.com"
|
|
ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD") or "admin"
|
|
|
|
@staticmethod
|
|
def init_app(app):
|
|
"""Inicialización adicional de la aplicación."""
|
|
os.makedirs(Config.SESSION_FILE_DIR, exist_ok=True)
|
|
|
|
|
|
class DevelopmentConfig(Config):
|
|
"""Configuración para desarrollo."""
|
|
|
|
DEBUG = True
|
|
TESTING = False
|
|
|
|
|
|
class TestingConfig(Config):
|
|
"""Configuración para pruebas."""
|
|
|
|
TESTING = True
|
|
DEBUG = True
|
|
WTF_CSRF_ENABLED = False
|
|
BCRYPT_LOG_ROUNDS = 4 # más rápido para pruebas
|
|
STORAGE_PATH = os.path.join(basedir, "test_storage")
|
|
|
|
|
|
class ProductionConfig(Config):
|
|
"""Configuración para producción."""
|
|
|
|
DEBUG = False
|
|
TESTING = False
|
|
|
|
# Override secret key in production
|
|
SECRET_KEY = os.environ.get("SECRET_KEY")
|
|
|
|
# Opciones de seguridad más estrictas
|
|
SESSION_COOKIE_SECURE = True
|
|
SESSION_COOKIE_HTTPONLY = True
|
|
REMEMBER_COOKIE_SECURE = True
|
|
REMEMBER_COOKIE_HTTPONLY = True
|
|
|
|
@staticmethod
|
|
def init_app(app):
|
|
Config.init_app(app)
|
|
|
|
# Verificar SECRET_KEY
|
|
if app.config["SECRET_KEY"] == "clave-secreta-por-defecto":
|
|
import warnings
|
|
|
|
warnings.warn("SECRET_KEY no configurada para producción!")
|
|
|
|
|
|
# Mapeo de configuraciones
|
|
config = {
|
|
"development": DevelopmentConfig,
|
|
"testing": TestingConfig,
|
|
"production": ProductionConfig,
|
|
"default": DevelopmentConfig,
|
|
}
|