diff --git a/config/settings/development.py b/config/settings/development.py index 64ff093..9997f35 100644 --- a/config/settings/development.py +++ b/config/settings/development.py @@ -5,21 +5,25 @@ Use this for local development. """ import os +import sys +from django.core.management.utils import get_random_secret_key from .base import * # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.environ.get( - 'SECRET_KEY', - 'django-insecure-dev-key-change-this-in-production-abc123xyz' -) +# Generate a random key for development on each startup if not provided +SECRET_KEY = os.environ.get('SECRET_KEY') +if not SECRET_KEY: + SECRET_KEY = get_random_secret_key() + print(f"WARNING: Using auto-generated SECRET_KEY for development. Set SECRET_KEY env var to persist sessions.", file=sys.stderr) # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]', '10.0.2.2', '192.168.1.241', 'tasks.firebugit.com'] +# Development-only hosts - production domains should NOT be here +ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]', '10.0.2.2', '192.168.1.241'] -# CSRF - trust HTTPS origin -CSRF_TRUSTED_ORIGINS = ['https://tasks.firebugit.com'] +# CSRF - for development testing only +CSRF_TRUSTED_ORIGINS = os.environ.get('CSRF_TRUSTED_ORIGINS', '').split(',') if os.environ.get('CSRF_TRUSTED_ORIGINS') else [] # Database - SQLite for development DATABASES = { diff --git a/config/settings/selfhosted.py b/config/settings/selfhosted.py index 781b7da..d43d4a1 100644 --- a/config/settings/selfhosted.py +++ b/config/settings/selfhosted.py @@ -5,11 +5,27 @@ Use this for users running their own instance. """ import os +import sys from .base import * # Security -SECRET_KEY = os.environ.get('SECRET_KEY', 'change-this-secret-key-in-production') +SECRET_KEY = os.environ.get('SECRET_KEY') +if not SECRET_KEY: + raise ValueError( + "SECRET_KEY environment variable is required for self-hosted deployment. " + "Generate one with: python -c \"from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())\"" + ) + +# Validate SECRET_KEY strength +if len(SECRET_KEY) < 50: + print("WARNING: SECRET_KEY is too short. Use at least 50 characters for security.", file=sys.stderr) + DEBUG = os.environ.get('DEBUG', 'False').lower() == 'true' + +# Force DEBUG to False in self-hosted mode for security +if DEBUG: + print("WARNING: DEBUG=True in self-hosted mode is a security risk!", file=sys.stderr) + ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', 'localhost,127.0.0.1').split(',') # Database - PostgreSQL for self-hosted