diff --git a/app/settings.dev.py b/app/settings.dev.py deleted file mode 100644 index aca5ca1..0000000 --- a/app/settings.dev.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Django dev settings for cas_eleves project. - -Generated by 'django-admin startproject' using Django 2.1.15. - -For more information on this file, see -https://docs.djangoproject.com/en/2.1/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/2.1/ref/settings/ -""" - -import os -from .settings_base import * - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = "CHANGE_ME" - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - -# Database -# https://docs.djangoproject.com/en/2.1/ref/settings/#databases - -DATABASES = { - "default": { - "ENGINE": "django.db.backends.sqlite3", - "NAME": os.path.join(BASE_DIR, "db.sqlite3"), - } -} - -# Internationalization -# https://docs.djangoproject.com/en/2.1/topics/i18n/ - -LANGUAGE_CODE = "fr-fr" -TIME_ZONE = "Europe/Paris" -USE_I18N = True -USE_L10N = True -USE_TZ = True diff --git a/app/settings.prod.py b/app/settings.prod.py deleted file mode 100644 index 2e764fc..0000000 --- a/app/settings.prod.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Django prod settings for cas_eleves project. - -Generated by 'django-admin startproject' using Django 2.1.15. - -For more information on this file, see -https://docs.djangoproject.com/en/2.1/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/2.1/ref/settings/ -""" - -import os -from .settings_base import * - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = "CHANGE_ME" # FIXME eg. the result of `pwgen 60 1` - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = False - -ALLOWED_HOSTS = [] # FIXME eg. `['cas.eleves.ens.fr']` - -# Database -# https://docs.djangoproject.com/en/2.1/ref/settings/#databases - -DATABASES = { # FIXME change to something else, see URL above - "default": { - "ENGINE": "django.db.backends.sqlite3", - "NAME": os.path.join(BASE_DIR, "db.sqlite3"), - } -} - -# Internationalization -# https://docs.djangoproject.com/en/2.1/topics/i18n/ - -LANGUAGE_CODE = "fr-fr" -TIME_ZONE = "Europe/Paris" -USE_I18N = True -USE_L10N = True -USE_TZ = True - -# CAS backend settings -# See https://github.com/nitmir/django-cas-server#settings - -CAS_AUTH_CLASS = "cas_server.auth.LdapAuthUser" -CAS_LDAP_SERVER = "example.com" # FIXME -CAS_LDAP_USER = "" # FIXME or remove if unnecessary -CAS_LDAP_PASSWORD = "" # FIXME or remove if unnecessary -# CAS_LDAP_BASE_DN = "ou=data,dc=example,dc=com" -# CAS_LDAP_USER_QUERY = "(uid=%s)" -# CAS_LDAP_USERNAME_ATTR = "uid" # FIXME -# CAS_LDAP_PASSWORD_ATTR = "userPassword" # FIXME -# CAS_LDAP_PASSWORD_CHECK = "ldap" # FIXME diff --git a/app/settings.py b/app/settings.py index fd0a397..b2e52af 100644 --- a/app/settings.py +++ b/app/settings.py @@ -2,8 +2,10 @@ Django settings for the DGSI project. """ +import ssl from pathlib import Path +import ldap3 from loadcredential import Credentials credentials = Credentials(env_prefix="CE_") @@ -19,6 +21,8 @@ DEBUG = credentials.get_json("DEBUG", False) ALLOWED_HOSTS = credentials.get_json("ALLOWED_HOSTS", []) +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" + ### # List the installed applications @@ -29,7 +33,7 @@ INSTALLED_APPS = [ "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", - "cas_eleves", + # "cas_eleves", "cas_server", ] @@ -52,10 +56,13 @@ MIDDLEWARE = [ ROOT_URLCONF = "app.urls" +### +# Template configuration: + TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": [], + "DIRS": [(BASE_DIR / "cas_eleves" / "templates")], "APP_DIRS": True, "OPTIONS": { "context_processors": [ @@ -68,10 +75,29 @@ TEMPLATES = [ }, ] -WSGI_APPLICATION = "cas_eleves.wsgi.application" +CAS_LOGGED_TEMPLATE = "cas_eleves/logged.html" +CAS_LOGIN_TEMPLATE = "cas_eleves/login.html" +CAS_LOGOUT_TEMPLATE = "cas_eleves/logout.html" +CAS_WARN_TEMPLATE = "cas_eleves/warn.html" -# Password validation -# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators +### +# Static files (CSS, JavaScript, Images) configuration +# -> https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = "/static/" +STATICFILES_DIRS = [BASE_DIR / "cas_eleves" / "static"] + +STATIC_ROOT = credentials["STATIC_ROOT"] + +CAS_SHOW_SERVICE_MESSAGES = False + +### +# WSGI application configuration + +WSGI_APPLICATION = "app.wsgi.application" + +### +# Authentication configuration AUTH_PASSWORD_VALIDATORS = [ { @@ -88,34 +114,29 @@ AUTH_PASSWORD_VALIDATORS = [ }, ] -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/2.1/howto/static-files/ - -PUBLIC_DIR = BASE_DIR / "public" - -STATIC_URL = "/static/" -STATIC_ROOT = PUBLIC_DIR / "static" - -CAS_SHOW_SERVICE_MESSAGES = False - -# Internationalization - -LOCALE_PATHS = [(BASE_DIR / "locale")] - -# Database -# https://docs.djangoproject.com/en/2.1/ref/settings/#databases +### +# Database configuration +# -> https://docs.djangoproject.com/en/4.2/ref/settings/#databases DATABASES = { - "default": { - "ENGINE": "django.db.backends.postgresql", - "NAME": "cas_server", - "USER": "cas_server", - "HOST": "/var/run/postgresql/", - } + "default": ( + { + "ENGINE": "django.db.backends.sqlite3", + "NAME": BASE_DIR / "db.sqlite3", + } + if DEBUG + else { + "ENGINE": "django.db.backends.postgresql", + "NAME": "cas_server", + "USER": "cas_server", + "HOST": "/var/run/postgresql/", + } + ) } -# Internationalization -# https://docs.djangoproject.com/en/2.1/topics/i18n/ +### +# Internationalization configuration +# -> https://docs.djangoproject.com/en/4.2/topics/i18n/ LANGUAGE_CODE = "fr-fr" TIME_ZONE = "Europe/Paris" @@ -123,7 +144,10 @@ USE_I18N = True USE_L10N = True USE_TZ = True -# Logging +LOCALE_PATHS = [(BASE_DIR / "cas_eleves" / "locale")] + +### +# Logging configuration LOGGING = { "version": 1, @@ -135,16 +159,25 @@ LOGGING = { }, "root": { "handlers": ["console"], - "level": "WARNING", + "level": "DEBUG", }, } -# CAS backend settings -# See https://github.com/nitmir/django-cas-server#settings +### +# CAS backend configuration +# -> https://github.com/nitmir/django-cas-server#settings CAS_AUTH_CLASS = "cas_server.auth.LdapAuthUser" -CAS_LDAP_SERVER = "ldaps://ldap.spi.ens.fr" -# CAS_LDAP_USER = "cn=root,dc=spi,dc=ens,dc=fr" +CAS_LDAP_SERVER = ldap3.Server( + "ldaps://ldap.spi.ens.fr:6636", + get_info=ldap3.ALL, + tls=ldap3.Tls( + validate=ssl.CERT_REQUIRED, + version=ssl.PROTOCOL_TLSv1_1, + ciphers="AES256-SHA", + ssl_options=[ssl.OP_LEGACY_SERVER_CONNECT], + ), +) CAS_LDAP_BASE_DN = "dc=spi,dc=ens,dc=fr" CAS_LDAP_USER_QUERY = "(uid=%s)" CAS_LDAP_USERNAME_ATTR = "uid" diff --git a/app/settings_base.py b/app/settings_base.py deleted file mode 100644 index 24b87a4..0000000 --- a/app/settings_base.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -Django settings for cas_eleves project. - -Generated by 'django-admin startproject' using Django 2.1.15. - -For more information on this file, see -https://docs.djangoproject.com/en/2.1/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/2.1/ref/settings/ -""" - -import os - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -PUBLIC_DIR = os.path.join(BASE_DIR, "public") - -# Application definition - -INSTALLED_APPS = [ - "django.contrib.admin", - "django.contrib.auth", - "django.contrib.contenttypes", - "django.contrib.sessions", - "django.contrib.messages", - "django.contrib.staticfiles", - "customize_cas", - "cas_server", -] - -MIDDLEWARE = [ - "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", - "django.middleware.locale.LocaleMiddleware", -] - -ROOT_URLCONF = "cas_eleves.urls" - -TEMPLATES = [ - { - "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", - ], - }, - }, -] - -WSGI_APPLICATION = "cas_eleves.wsgi.application" - -# Password validation -# https://docs.djangoproject.com/en/2.1/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", - }, -] - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/2.1/howto/static-files/ - -STATIC_URL = "/static/" -STATIC_ROOT = os.path.join(PUBLIC_DIR, "static") - -CAS_SHOW_SERVICE_MESSAGES = False - -# Internationalization - -LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")] diff --git a/app/wsgi.py b/app/wsgi.py index 2ded7c6..fd1467c 100644 --- a/app/wsgi.py +++ b/app/wsgi.py @@ -11,6 +11,6 @@ import os from django.core.wsgi import get_wsgi_application -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cas_eleves.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings") application = get_wsgi_application()