settings.py 4.7 KB
Newer Older
Florent Chehab's avatar
Florent Chehab committed
1
"""
Florent Chehab's avatar
Florent Chehab committed
2
Django settings
Florent Chehab's avatar
Florent Chehab committed
3 4 5 6 7 8 9 10 11

For more information on this file, see
https://docs.djangoproject.com/en/2.0/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.0/ref/settings/
"""

import os
12
from os.path import dirname, normpath, join
13
import sys
Florent Chehab's avatar
Florent Chehab committed
14

15
# Build paths inside the project like this: join(BASE_DIR, ...)
Florent Chehab's avatar
Florent Chehab committed
16
# Is the root of the REPOSITORY
Florent Chehab's avatar
Florent Chehab committed
17
BASE_DIR = dirname(dirname(dirname(os.path.abspath(__file__))))
Florent Chehab's avatar
Florent Chehab committed
18

Florent Chehab's avatar
Florent Chehab committed
19
SECRET_KEY = os.environ["SECRET_KEY"]
20 21

# Application definition
Florent Chehab's avatar
Florent Chehab committed
22
INSTALLED_APPS = [
23 24 25 26 27 28 29 30 31 32 33 34
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "django_cas_ng",
    "reversion",
    "reversion_compare",
    "rest_framework",
    "rest_framework.authtoken",
    "backend_app",
Florent Chehab's avatar
Florent Chehab committed
35
    "base_app",
36
    "webpack_loader",
Florent Chehab's avatar
Florent Chehab committed
37 38 39
]

MIDDLEWARE = [
40 41 42 43 44 45 46 47
    "django.middleware.security.SecurityMiddleware",
    "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",
    "base_app.middleware.LoginRequiredMiddleware",
Florent Chehab's avatar
Florent Chehab committed
48
]
Florent Chehab's avatar
Florent Chehab committed
49
MODERATION_ACTIVATED = True
Florent Chehab's avatar
Florent Chehab committed
50

Florent Chehab's avatar
Florent Chehab committed
51 52 53 54 55
if os.environ["ENV"] == "DEV":
    DEBUG = True
    ALLOWED_HOSTS = ["*"]
    INSTALLED_APPS += ["django_extensions", "debug_toolbar"]
    MIDDLEWARE = ["debug_toolbar.middleware.DebugToolbarMiddleware"] + MIDDLEWARE
Florent Chehab's avatar
Florent Chehab committed
56

57 58
    DEBUG_TOOLBAR_CONFIG = {"SHOW_TOOLBAR_CALLBACK": "base_app.utils.show_toolbar"}

59

Florent Chehab's avatar
Florent Chehab committed
60 61 62 63 64
else:
    DEBUG = False

WEBPACK_LOADER = {
    "DEFAULT": {
Florent Chehab's avatar
Florent Chehab committed
65
        "BUNDLE_DIR_NAME": "base_app/bundles/",
66
        "STATS_FILE": join(BASE_DIR, "frontend/webpack-stats.json"),
Florent Chehab's avatar
Florent Chehab committed
67 68 69 70
    }
}

ALLOWED_PHOTOS_EXTENSION = ["jpg", "jpeg", "png", "svg"]
Florent Chehab's avatar
Florent Chehab committed
71

72
LOGIN_URL = "/user/login"
Florent Chehab's avatar
Florent Chehab committed
73
LOGIN_EXEMPT_URLS = [LOGIN_URL, "/admin/"]
Florent Chehab's avatar
Florent Chehab committed
74 75

AUTHENTICATION_BACKENDS = [
76 77
    "django.contrib.auth.backends.ModelBackend",
    "django_cas_ng.backends.CASBackend",
Florent Chehab's avatar
Florent Chehab committed
78
]
Florent Chehab's avatar
Florent Chehab committed
79

80
CAS_SERVER_URL = "https://cas.utc.fr/cas/"
Florent Chehab's avatar
Florent Chehab committed
81
CAS_APPLY_ATTRIBUTES_TO_USER = True
82
CAS_RENAME_ATTRIBUTES = {"mail": "email", "givenName": "first_name", "sn": "last_name"}
Florent Chehab's avatar
Florent Chehab committed
83

Florent Chehab's avatar
Florent Chehab committed
84 85 86 87 88
TESTING = "pytest" in sys.modules
if TESTING:
    LOGIN_EXEMPT_URLS.append("api")


Florent Chehab's avatar
Florent Chehab committed
89 90
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
91 92 93 94 95 96
    "DEFAULT_PERMISSION_CLASSES": (
        "rest_framework.permissions.DjangoModelPermissions",
    ),
    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework.authentication.SessionAuthentication",
        "rest_framework.authentication.TokenAuthentication",
Florent Chehab's avatar
Florent Chehab committed
97 98 99
    ),
}

Florent Chehab's avatar
Florent Chehab committed
100
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
Florent Chehab's avatar
Florent Chehab committed
101

102
ROOT_URLCONF = "base_app.urls"
Florent Chehab's avatar
Florent Chehab committed
103 104 105

TEMPLATES = [
    {
106 107 108 109 110 111 112 113 114 115
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [],
        "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",
            ]
Florent Chehab's avatar
Florent Chehab committed
116
        },
117
    }
Florent Chehab's avatar
Florent Chehab committed
118 119
]

120
WSGI_APPLICATION = "base_app.wsgi.application"
Florent Chehab's avatar
Florent Chehab committed
121 122 123 124 125


# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

Florent Chehab's avatar
Florent Chehab committed
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": os.environ["POSTGRES_DB"],
        "USER": os.environ["POSTGRES_USER"],
        "PASSWORD": os.environ["POSTGRES_PASSWORD"],
        "HOST": os.environ["DB_HOST"],
        "PORT": os.environ["DB_PORT"],
    }
}

# To use Sqlite, uncomment below
# PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
# DATABASES = {
#     "default": {
#         "ENGINE": "django.db.backends.sqlite3",
142
#         "NAME": join(PROJECT_DIR, "../database.db"),
Florent Chehab's avatar
Florent Chehab committed
143 144
#     }
# }
Florent Chehab's avatar
Florent Chehab committed
145 146 147 148 149 150 151


# Password validation
# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
152 153
        "NAME": "django.contrib.auth.password_validation."
        "UserAttributeSimilarityValidator"
Florent Chehab's avatar
Florent Chehab committed
154
    },
155 156 157
    {"NAME": "django.contrib.auth.password_validation." "MinimumLengthValidator"},
    {"NAME": "django.contrib.auth.password_validation." "CommonPasswordValidator"},
    {"NAME": "django.contrib.auth.password_validation." "NumericPasswordValidator"},
Florent Chehab's avatar
Florent Chehab committed
158 159 160 161 162 163
]


# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

164 165
LANGUAGE_CODE = "fr-fr"
TIME_ZONE = "Europe/Paris"
Florent Chehab's avatar
Florent Chehab committed
166 167 168 169
USE_I18N = True
USE_L10N = True
USE_TZ = True

Florent Chehab's avatar
Florent Chehab committed
170
STATIC_URL = "/static/"
171
STATIC_ROOT = normpath(join(BASE_DIR, "static"))
Florent Chehab's avatar
Florent Chehab committed
172

173
MEDIA_ROOT = normpath(join(BASE_DIR, "media"))
174
MEDIA_URL = "/media/"