import requests import json from celery.schedules import crontab import os.path from datetime import timedelta from django_auth_ldap.config import LDAPSearch, GroupOfNamesType from ldap import OPT_REFERRALS, SCOPE_SUBTREE # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) SECRET_KEY = os.environ.get("SECRET_KEY") ALLOWED_HOSTS = ["*"] INTERNAL_IPS = [ # ... "172.23.0.1", # ... ] DEFAULT_AUTO_FIELD = "django.db.models.AutoField" AUTHENTICATION_BACKENDS = [ "django_auth_ldap.backend.LDAPBackend", "django.contrib.auth.backends.ModelBackend", ] AUTH_LDAP_ALWAYS_UPDATE_USER = False AUTH_LDAP_BIND_DN = os.environ.get("LDAP_BIND_DN") AUTH_LDAP_BIND_PASSWORD = os.environ.get("LDAP_BIND_PASSWORD") AUTH_LDAP_CONNECTION_OPTIONS = {OPT_REFERRALS: 0} AUTH_LDAP_SERVER_URI = "ldap://{}:{}".format( os.environ.get("LDAP_HOST"), os.environ.get("LDAP_PORT") ) AUTH_LDAP_GROUP_SEARCH = LDAPSearch( os.environ.get("LDAP_ADMINS"), SCOPE_SUBTREE, "(objectClass=groupOfNames)" ) AUTH_LDAP_GROUP_TYPE = GroupOfNamesType() AUTH_LDAP_USER_FLAGS_BY_GROUP = { "is_active": os.environ.get("LDAP_ADMINS"), "is_staff": os.environ.get("LDAP_ADMINS"), "is_superuser": os.environ.get("LDAP_ADMINS"), } LOGGING = { "version": 1, "disable_existing_loggers": False, "handlers": {"console": {"class": "logging.StreamHandler"}}, "loggers": {"django_auth_ldap": {"level": "DEBUG", "handlers": ["console"]}}, } AUTH_LDAP_USER_ATTR_MAP = { "username": "samAccountName", "first_name": "givenName", "last_name": "sn", "email": "mail", } LDAP_AUTH_USE_TLS = False DEFAULT_AUTO_FIELD = "django.db.models.AutoField" AUTH_LDAP_USER_SEARCH = LDAPSearch( os.environ.get("LDAP_BASE"), SCOPE_SUBTREE, "(samAccountName=%(user)s)" ) DATA_UPLOAD_MAX_NUMBER_FIELDS = 100000 # region Send mail config EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = "10.180.2.7" EMAIL_USE_TLS = False EMAIL_HOST_USER = "sebn_inventory@sebn.com" # endregion # Application definition GRAPPELLI_ADMIN_TITLE = "sebn-inventory" INSTALLED_APPS = [ "grappelli", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "corsheaders", "import_export", "import_export_celery", "debug_toolbar", "rest_framework", "django_filters", "simple_history", "main", "sap", "django_celery_results", "frontend_client", "versionfield", ] MIDDLEWARE = [ "corsheaders.middleware.CorsMiddleware", "author.middlewares.AuthorDefaultBackendMiddleware", "simple_history.middleware.HistoryRequestMiddleware", "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "debug_toolbar.middleware.DebugToolbarMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ] ROOT_URLCONF = "sebn_inventory.urls" DATA_UPLOAD_MAX_NUMBER_FIELDS = 100000 TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [ os.path.join(PROJECT_ROOT, "templates").replace("\\", "/"), ], "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", ], "loaders": [ "django.template.loaders.filesystem.Loader", "django.template.loaders.app_directories.Loader", ], }, }, ] REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": ( "rest_framework_simplejwt.authentication.JWTAuthentication", ), "DEFAULT_PERMISSION_CLASSES": [ "rest_framework.permissions.IsAuthenticatedOrReadOnly" ], "DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"], "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", "PAGE_SIZE": 100, } # Authentication SIMPLE_JWT = { "ACCESS_TOKEN_LIFETIME": timedelta(minutes=5), "REFRESH_TOKEN_LIFETIME": timedelta(days=14), "AUTH_HEADER_TYPES": ("Bearer",), "ROTATE_REFRESH_TOKENS": True, } CORS_ORIGIN_ALLOW_ALL = True WSGI_APPLICATION = "sebn_inventory.wsgi.application" # Password validation # https://docs.djangoproject.com/en/3.0/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", }, ] LANGUAGE_CODE = "en-us" TIME_ZONE = os.environ.get("TZ") USE_I18N = True USE_L10N = True USE_TZ = False # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.0/howto/static-files/ STATICFILES_FINDERS = [ "django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder", ] DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": os.environ.get("MYSQL_DATABASE"), "USER": "root", "PASSWORD": os.environ.get("MYSQL_PASSWORD"), "HOST": os.environ.get("MYSQL_HOST"), "PORT": os.environ.get("MYSQL_PORT"), }, } IMPORT_EXPORT_CELERY_INIT_MODULE = "sebn_inventory.celery" def resource(): # Optional from sap.models import SapItemResource return SapItemResource IMPORT_EXPORT_CELERY_MODELS = { "SapItem": { "app_label": "sap", "model_name": "SapItem", "resource": resource, } } CELERY_BROKER_URL = os.environ.get("CELERY_BROKER") CELERY_RESULT_BACKEND = "django-db"