inventory / backend / sebn_inventory / settings / common.py
common.py
Raw
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"