roo roo roo down the river we go...
This commit is contained in:
		
							
								
								
									
										187
									
								
								mohportal/settings.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								mohportal/settings.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,187 @@ | ||||
| """ | ||||
| Django settings for MOHPortal project. | ||||
|  | ||||
| Generated by 'django-admin startproject' on 2025-10-25. | ||||
|  | ||||
| For more information on this file, see | ||||
| https://docs.djangoproject.com/en/4.2/topics/settings/ | ||||
|  | ||||
| For the full list of settings and their values, see | ||||
| https://docs.djangoproject.com/en/4.2/ref/settings/ | ||||
| """ | ||||
|  | ||||
| import os | ||||
| from pathlib import Path | ||||
|  | ||||
| # Build paths inside the project like this: BASE_DIR / 'subdir'. | ||||
| BASE_DIR = Path(__file__).resolve().parent.parent | ||||
|  | ||||
|  | ||||
| # Quick-start development settings - unsuitable for production | ||||
| # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ | ||||
|  | ||||
| # SECURITY WARNING: keep the secret key used in production secret! | ||||
| SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'django-insecure-development-key-change-in-production') | ||||
|  | ||||
| # SECURITY WARNING: don't run with debug turned on in production! | ||||
| DEBUG = os.environ.get('DEBUG', 'True').lower() == 'true' | ||||
|  | ||||
| ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', 'localhost,127.0.0.1').split(',') | ||||
|  | ||||
| # Application definition | ||||
| INSTALLED_APPS = [ | ||||
|     'django.contrib.admin', | ||||
|     'django.contrib.auth', | ||||
|     'django.contrib.contenttypes', | ||||
|     'django.contrib.sessions', | ||||
|     'django.contrib.messages', | ||||
|     'django.contrib.staticfiles', | ||||
|     'corsheaders', | ||||
|     'rest_framework', | ||||
|     'social_django', | ||||
|     # Custom apps | ||||
|     'users', | ||||
|     'jobs', | ||||
|     'tenants', | ||||
| ] | ||||
|  | ||||
| MIDDLEWARE = [ | ||||
|     'corsheaders.middleware.CorsMiddleware', | ||||
|     'django.middleware.security.SecurityMiddleware', | ||||
|     'whitenoise.middleware.WhiteNoiseMiddleware', | ||||
|     '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', | ||||
|     'social_django.middleware.SocialAuthExceptionMiddleware', | ||||
| ] | ||||
|  | ||||
| ROOT_URLCONF = 'mohportal.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', | ||||
|                 'social_django.context_processors.backends', | ||||
|                 'social_django.context_processors.login_redirect', | ||||
|             ], | ||||
|         }, | ||||
|     }, | ||||
| ] | ||||
|  | ||||
| WSGI_APPLICATION = 'mohportal.wsgi.application' | ||||
|  | ||||
|  | ||||
| # Database | ||||
| # https://docs.djangoproject.com/en/4.2/ref/settings/#databases | ||||
|  | ||||
| DATABASES = { | ||||
|     'default': { | ||||
|         'ENGINE': 'django.db.backends.postgresql', | ||||
|         'NAME': os.environ.get('DB_NAME', 'mohportal_db'), | ||||
|         'USER': os.environ.get('DB_USER', 'mohportal_user'), | ||||
|         'PASSWORD': os.environ.get('DB_PASSWORD', 'mohportal_password'), | ||||
|         'HOST': os.environ.get('DB_HOST', 'db'), | ||||
|         'PORT': os.environ.get('DB_PORT', '5432'), | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| # Password validation | ||||
| # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators | ||||
|  | ||||
| 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 | ||||
| # https://docs.djangoproject.com/en/4.2/topics/i18n/ | ||||
|  | ||||
| LANGUAGE_CODE = 'en-us' | ||||
|  | ||||
| TIME_ZONE = 'UTC' | ||||
|  | ||||
| USE_I18N = True | ||||
|  | ||||
| USE_TZ = True | ||||
|  | ||||
|  | ||||
| # Static files (CSS, JavaScript, Images) | ||||
| # https://docs.djangoproject.com/en/4.2/howto/static-files/ | ||||
|  | ||||
| STATIC_URL = '/static/' | ||||
| STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') | ||||
| STATICFILES_DIRS = [ | ||||
|     BASE_DIR / 'static', | ||||
| ] | ||||
| STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' | ||||
|  | ||||
| # Default primary key field type | ||||
| # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field | ||||
|  | ||||
| DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' | ||||
|  | ||||
| # Authentication backends | ||||
| AUTHENTICATION_BACKENDS = [ | ||||
|     'django.contrib.auth.backends.ModelBackend', | ||||
|     'social_core.backends.google.GoogleOpenId', | ||||
|     'social_core.backends.google.GoogleOAuth2', | ||||
|     'social_core.backends.github.GithubOAuth2', | ||||
|     'social_core.backends.azuread_tenant.AzureADTenantOAuth2', | ||||
| ] | ||||
|  | ||||
| # Social auth settings | ||||
| SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = os.environ.get('GOOGLE_OAUTH2_KEY') | ||||
| SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = os.environ.get('GOOGLE_OAUTH2_SECRET') | ||||
|  | ||||
| SOCIAL_AUTH_GITHUB_KEY = os.environ.get('GITHUB_KEY') | ||||
| SOCIAL_AUTH_GITHUB_SECRET = os.environ.get('GITHUB_SECRET') | ||||
|  | ||||
| SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_KEY = os.environ.get('AZUREAD_KEY') | ||||
| SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET = os.environ.get('AZUREAD_SECRET') | ||||
| SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID = os.environ.get('AZUREAD_TENANT_ID') | ||||
|  | ||||
| # Django REST Framework settings | ||||
| REST_FRAMEWORK = { | ||||
|     'DEFAULT_AUTHENTICATION_CLASSES': [ | ||||
|         'rest_framework.authentication.SessionAuthentication', | ||||
|     ], | ||||
|     'DEFAULT_PERMISSION_CLASSES': [ | ||||
|         'rest_framework.permissions.IsAuthenticated', | ||||
|     ], | ||||
|     'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', | ||||
|     'PAGE_SIZE': 20, | ||||
| } | ||||
|  | ||||
| # Security settings for production | ||||
| if not DEBUG: | ||||
|     SECURE_BROWSER_XSS_FILTER = True | ||||
|     SECURE_CONTENT_TYPE_NOSNIFF = True | ||||
|     SECURE_HSTS_INCLUDE_SUBDOMAINS = True | ||||
|     SECURE_HSTS_SECONDS = 3153600 | ||||
|     SECURE_REDIRECT_EXEMPT = [] | ||||
|     SECURE_SSL_REDIRECT = True | ||||
|     SESSION_COOKIE_SECURE = True | ||||
|     CSRF_COOKIE_SECURE = True | ||||
|     X_FRAME_OPTIONS = 'DENY' | ||||
							
								
								
									
										32
									
								
								mohportal/urls.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								mohportal/urls.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| """MOHPortal URL Configuration | ||||
|  | ||||
| The `urlpatterns` list routes URLs to views. For more information please see: | ||||
|     https://docs.djangoproject.com/en/4.2/topics/http/urls/ | ||||
| Examples: | ||||
| Function views | ||||
|     1. Add an import:  from my_app import views | ||||
|     2. Add a URL to urlpatterns:  path('', views.home, name='home') | ||||
| Class-based views | ||||
|     1. Add an import:  from other_app.views import Home | ||||
|     2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home') | ||||
| Including another URLconf | ||||
|     1. Import the include() function: from django.urls import include, path | ||||
|     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls')) | ||||
| """ | ||||
| from django.contrib import admin | ||||
| from django.urls import path, include | ||||
| from django.conf import settings | ||||
| from django.conf.urls.static import static | ||||
|  | ||||
| urlpatterns = [ | ||||
|     path('admin/', admin.site.urls), | ||||
|     path('auth/', include('social_django.urls', namespace='social')), | ||||
|     path('api/users/', include('users.urls')), | ||||
|     path('api/jobs/', include('jobs.urls')), | ||||
|     path('api/tenants/', include('tenants.urls')), | ||||
|     path('api-auth/', include('rest_framework.urls')), | ||||
| ] | ||||
|  | ||||
| # Serve static files in development | ||||
| if settings.DEBUG: | ||||
|     urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) | ||||
							
								
								
									
										16
									
								
								mohportal/wsgi.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								mohportal/wsgi.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| """ | ||||
| WSGI config for MOHPortal project. | ||||
|  | ||||
| It exposes the WSGI callable as a module-level variable named ``application``. | ||||
|  | ||||
| For more information on this file, see | ||||
| https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ | ||||
| """ | ||||
|  | ||||
| import os | ||||
|  | ||||
| from django.core.wsgi import get_wsgi_application | ||||
|  | ||||
| os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mohportal.settings') | ||||
|  | ||||
| application = get_wsgi_application() | ||||
		Reference in New Issue
	
	Block a user