import os import sys from pathlib import Path from dotenv import load_dotenv # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Load .env file if available load_dotenv(BASE_DIR / ".env") # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = os.environ.get( "SECRET_KEY", "django-insecure-docverify-multi-vendor-verification-engine-suite-key-2026", ) # SECURITY WARNING: don't run with debug turned on in production! DEBUG = os.environ.get("DEBUG", "1") in ("1", "true", "True") ALLOWED_HOSTS = ["*"] # Application definition INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", # Third party apps "rest_framework", # Local apps "verifier", ] MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "docverify.middleware.RequestLoggingMiddleware", "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 = "docverify.urls" TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [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 = "docverify.wsgi.application" # Database Configuration: PostgreSQL db_host = os.environ.get('DB_HOST', '16.113.106.152') db_port = int(os.environ.get('DB_PORT', '5432')) db_user = os.environ.get('DB_USER', 'vignesh') db_pass = os.environ.get('DB_PASSWORD', 'vignesh_secret_pass_2026') env_name = os.environ.get('ENVIRONMENT', 'beta') db_name = os.environ.get('DB_NAME', f"{env_name}-documentverifcation" if env_name == "beta" else "documentverifcation") if 'test' in sys.argv: DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": ":memory:", } } else: DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": db_name, "USER": db_user, "PASSWORD": db_pass, "HOST": db_host, "PORT": db_port, "CONN_MAX_AGE": 60, } } 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"}, ] LANGUAGE_CODE = "en-us" TIME_ZONE = "Asia/Kolkata" USE_I18N = True USE_TZ = True STATIC_URL = "static/" STATIC_ROOT = BASE_DIR / "staticfiles" DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" REST_FRAMEWORK = { "DEFAULT_PERMISSION_CLASSES": [ "rest_framework.permissions.AllowAny", ], "DEFAULT_RENDERER_CLASSES": [ "rest_framework.renderers.JSONRenderer", "rest_framework.renderers.BrowsableAPIRenderer", ], } # ────────────────────────────────────────────────────────────────────────────── # Vendor API Configurations # ────────────────────────────────────────────────────────────────────────────── # Codeplus API Credentials CODEPLUS_BASE_URL = os.environ.get("CODEPLUS_BASE_URL", "https://apihub.services") CODEPLUS_CLIENT_API_ID = os.environ.get("CODEPLUS_CLIENT_API_ID", "CAPI-YYR0YJIE0VMTDENY") CODEPLUS_CLIENT_API_SECRET = os.environ.get("CODEPLUS_CLIENT_API_SECRET", "s24Ts9wFsgl64mFzA61OqG0RDLRs2HFCpmOZBmqs") # ────────────────────────────────────────────────────────────────────────────── # Comprehensive Logging Configuration & CloudWatch Shipments # ────────────────────────────────────────────────────────────────────────────── LOGS_DIR = BASE_DIR / "logs" LOGS_DIR.mkdir(exist_ok=True) LOGGING = { "version": 1, "disable_existing_loggers": False, "formatters": { "verbose": { "format": "{levelname} {asctime} [{name}] {process:d} {thread:d} {message}", "style": "{", }, "simple": { "format": "{levelname} {asctime} {message}", "style": "{", }, }, "handlers": { "console": { "class": "logging.StreamHandler", "formatter": "simple", }, "app_file": { "level": "INFO", "class": "logging.handlers.RotatingFileHandler", "filename": str(LOGS_DIR / "app.log"), "maxBytes": 10 * 1024 * 1024, # 10 MB "backupCount": 5, "formatter": "verbose", }, "error_file": { "level": "ERROR", "class": "logging.handlers.RotatingFileHandler", "filename": str(LOGS_DIR / "error.log"), "maxBytes": 10 * 1024 * 1024, # 10 MB "backupCount": 5, "formatter": "verbose", }, "requests_file": { "level": "INFO", "class": "logging.handlers.RotatingFileHandler", "filename": str(LOGS_DIR / "requests.log"), "maxBytes": 10 * 1024 * 1024, # 10 MB "backupCount": 5, "formatter": "simple", }, }, "loggers": { "django": { "handlers": ["console", "app_file", "error_file"], "level": "INFO", "propagate": True, }, "django.request": { "handlers": ["console", "requests_file", "error_file"], "level": "INFO", "propagate": False, }, "verifier": { "handlers": ["console", "app_file", "error_file"], "level": "INFO", "propagate": True, }, }, }