from pathlib import Path import os import dj_database_url from dotenv import load_dotenv load_dotenv() BASE_DIR = Path(__file__).resolve().parent.parent BASE_URL = "https://app.polisplexity.tech" import sys sys.path.append(str(BASE_DIR)) # Core security settings SECRET_KEY = os.getenv("SECRET_KEY") DEBUG = os.getenv("DEBUG", "False") == "True" ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS", "").split(",") # Application definition INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", # App modules "core", "pxy_de", "pxy_cr", "pxy_whatsapp", "pxy_city_digital_twins", "pxy_bots", "pxy_openai", "pxy_meta_pages", "pxy_langchain", "pxy_neo4j", "pxy_dashboard", "pxy_dashboard.custom", "pxy_dashboard.apps", "pxy_dashboard.components", "pxy_dashboard.layouts", ] MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ] ROOT_URLCONF = "polisplexity.urls" TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [os.path.join(BASE_DIR, "templates")], "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], }, }, ] WSGI_APPLICATION = "polisplexity.wsgi.application" # Database DATABASES = { "default": dj_database_url.config(default=os.getenv("DATABASE_URL")) } # Password validation AUTH_PASSWORD_VALIDATORS = [ {"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"}, {"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"}, {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"}, {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"}, ] # Internationalization LANGUAGE_CODE = "en-us" TIME_ZONE = "UTC" USE_I18N = True USE_TZ = True # Static & Media Files STATIC_URL = "/static/" STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") STATICFILES_DIRS = [ os.path.join(BASE_DIR, "polisplexity/pxy_dashboard/static"), # Jidox assets ] MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles") # Default primary key field type DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" # External services PAGE_ACCESS_TOKEN = os.getenv("PAGE_ACCESS_TOKEN") VERIFY_TOKEN = os.getenv("VERIFY_TOKEN") # Async-safe for Neo4j or Celery os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" # ...pero silenciamos la comprobación que falla en producción: SILENCED_SYSTEM_CHECKS = ["async.E001"] # Neo4j NEO4J_URI = os.getenv("NEO4J_URI") NEO4J_USERNAME = os.getenv("NEO4J_USERNAME") NEO4J_PASSWORD = os.getenv("NEO4J_PASSWORD") # OpenAI OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") # CSRF protection for production CSRF_TRUSTED_ORIGINS = [ "https://app.polisplexity.tech", ] # Support for secure reverse proxy (e.g., Nginx or Hostinger HTTPS proxy) SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")