From 916b4a2367bed7974eba31c7b6f32f18d6f0bfba Mon Sep 17 00:00:00 2001 From: jeromelebleu Date: Thu, 27 Feb 2020 10:27:22 +0100 Subject: [PATCH] Update settings template and test_project's one (#1830) --- .../core/commands/templates/settings.py.tpl | 15 +- modoboa/test_settings.py | 4 +- test_project/test_project/settings.py | 268 ++++++++++-------- 3 files changed, 153 insertions(+), 134 deletions(-) diff --git a/modoboa/core/commands/templates/settings.py.tpl b/modoboa/core/commands/templates/settings.py.tpl index fd9605784..0cebfae59 100644 --- a/modoboa/core/commands/templates/settings.py.tpl +++ b/modoboa/core/commands/templates/settings.py.tpl @@ -1,12 +1,11 @@ -# -*- coding: utf-8 -*- """ Django settings for {{ name }} project. For more information on this file, see -https://docs.djangoproject.com/en/1.11/topics/settings/ +https://docs.djangoproject.com/en/2.2/topics/settings/ For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.11/ref/settings/ +https://docs.djangoproject.com/en/2.2/ref/settings/ """ from logging.handlers import SysLogHandler @@ -22,7 +21,7 @@ BASE_DIR = os.path.realpath(os.path.dirname(os.path.dirname(__file__))) # Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ +# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '{{ secret_key }}' @@ -145,14 +144,14 @@ WSGI_APPLICATION = '{{ name }}.wsgi.application' # Database -# https://docs.djangoproject.com/en/1.11/ref/settings/#databases +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases DATABASES = { {% for conn in db_connections.values %}{{ conn|safe }}{% endfor %} } # Internationalization -# https://docs.djangoproject.com/en/1.11/topics/i18n/ +# https://docs.djangoproject.com/en/2.2/topics/i18n/ LANGUAGE_CODE = '{{ lang }}' @@ -165,7 +164,7 @@ USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.11/howto/static-files/ +# https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/sitestatic/' STATIC_ROOT = os.path.join(BASE_DIR, 'sitestatic') @@ -193,7 +192,7 @@ REST_FRAMEWORK = { MODOBOA_API_URL = 'https://api.modoboa.org/1/' # Password validation -# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators +# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { diff --git a/modoboa/test_settings.py b/modoboa/test_settings.py index 0ad16752e..c0ac76ee9 100644 --- a/modoboa/test_settings.py +++ b/modoboa/test_settings.py @@ -1,7 +1,7 @@ import os # Database -# https://docs.djangoproject.com/en/1.11/ref/settings/#databases +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases DB = os.environ.get("DB", "POSTGRESQL") @@ -20,7 +20,7 @@ if DB == "MYSQL": # into errors. It is strongly recommended you activate it. # MySQL >= 5.7 set STRICT_TRANS_TABLES by default # See: - # https://docs.djangoproject.com/en/1.11/ref/databases/#mysql-sql-mode + # https://docs.djangoproject.com/en/2.2/ref/databases/#mysql-sql-mode "OPTIONS": { "init_command": ( "SET sql_mode = 'STRICT_TRANS_TABLES';" diff --git a/test_project/test_project/settings.py b/test_project/test_project/settings.py index bfc096869..df88ee963 100644 --- a/test_project/test_project/settings.py +++ b/test_project/test_project/settings.py @@ -1,75 +1,83 @@ """ Django settings for test_project project. -Generated by 'django-admin startproject' using Django 1.11.8. - For more information on this file, see -https://docs.djangoproject.com/en/1.11/topics/settings/ +https://docs.djangoproject.com/en/2.2/topics/settings/ For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.11/ref/settings/ +https://docs.djangoproject.com/en/2.2/ref/settings/ """ -from __future__ import unicode_literals - -import os from logging.handlers import SysLogHandler +import os from modoboa.test_settings import * # noqa + # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.realpath(os.path.dirname(os.path.dirname(__file__))) # Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ +# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = "!8o(-dbbl3e+*bh7nx-^xysdt)1gso*%@4ze4-9_9o+i&t--u_" +SECRET_KEY = '!8o(-dbbl3e+*bh7nx-^xysdt)1gso*%@4ze4-9_9o+i&t--u_' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = "DEBUG" in os.environ +DEBUG = 'DEBUG' in os.environ ALLOWED_HOSTS = [ - "127.0.0.1", - "localhost", + '127.0.0.1', + 'localhost', ] SITE_ID = 1 +# A list of all the people who get code error notifications. When DEBUG=False +# and a view raises an exception, Django will email these people with the full +# exception information. +# See https://docs.djangoproject.com/en/dev/ref/settings/#admins +#ADMINS = [('Administrator', 'admin@example.net')] + +# The email address that error messages come from, such as those sent to ADMINS +#SERVER_EMAIL = 'webmaster@example.net' + # Security settings X_FRAME_OPTIONS = "SAMEORIGIN" +CSRF_COOKIE_SECURE = True +SESSION_COOKIE_SECURE = True # Application definition INSTALLED_APPS = ( - "django.contrib.auth", - "django.contrib.contenttypes", - "django.contrib.sessions", - "django.contrib.messages", - "django.contrib.sites", - "django.contrib.staticfiles", - "reversion", - "ckeditor", - "ckeditor_uploader", - "rest_framework", - "rest_framework.authtoken", + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.sites', + 'django.contrib.staticfiles', + 'reversion', + 'ckeditor', + 'ckeditor_uploader', + 'rest_framework', + 'rest_framework.authtoken', ) # A dedicated place to register Modoboa applications # Do not delete it. # Do not change the order. MODOBOA_APPS = ( - "modoboa", - "modoboa.core", - "modoboa.lib", - "modoboa.admin", - "modoboa.transport", - "modoboa.relaydomains", - "modoboa.limits", - "modoboa.parameters", - "modoboa.dnstools", + 'modoboa', + 'modoboa.core', + 'modoboa.lib', + 'modoboa.admin', + 'modoboa.transport', + 'modoboa.relaydomains', + 'modoboa.limits', + 'modoboa.parameters', + 'modoboa.dnstools', # Modoboa extensions here. ) @@ -82,27 +90,27 @@ else: INSTALLED_APPS += MODOBOA_APPS -AUTH_USER_MODEL = "core.User" +AUTH_USER_MODEL = 'core.User' MIDDLEWARE = ( - "x_forwarded_for.middleware.XForwardedForMiddleware", - "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.locale.LocaleMiddleware", - "django.middleware.clickjacking.XFrameOptionsMiddleware", - "modoboa.core.middleware.LocalConfigMiddleware", - "modoboa.lib.middleware.AjaxLoginRedirect", - "modoboa.lib.middleware.CommonExceptionCatcher", - "modoboa.lib.middleware.RequestCatcherMiddleware", + 'x_forwarded_for.middleware.XForwardedForMiddleware', + '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.locale.LocaleMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'modoboa.core.middleware.LocalConfigMiddleware', + 'modoboa.lib.middleware.AjaxLoginRedirect', + 'modoboa.lib.middleware.CommonExceptionCatcher', + 'modoboa.lib.middleware.RequestCatcherMiddleware', ) AUTHENTICATION_BACKENDS = ( # 'modoboa.lib.authbackends.LDAPBackend', # 'modoboa.lib.authbackends.SMTPBackend', - "django.contrib.auth.backends.ModelBackend", + 'django.contrib.auth.backends.ModelBackend', ) # SMTP authentication @@ -113,37 +121,36 @@ AUTHENTICATION_BACKENDS = ( 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.template.context_processors.i18n", - "django.template.context_processors.media", - "django.template.context_processors.static", - "django.template.context_processors.tz", - "django.contrib.messages.context_processors.messages", - "modoboa.core.context_processors.top_notifications", + '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.template.context_processors.i18n', + 'django.template.context_processors.media', + 'django.template.context_processors.static', + 'django.template.context_processors.tz', + 'django.contrib.messages.context_processors.messages', + 'modoboa.core.context_processors.top_notifications', ], - "debug": DEBUG, + 'debug': DEBUG, }, }, ] -ROOT_URLCONF = "test_project.urls" - -WSGI_APPLICATION = "test_project.wsgi.application" +ROOT_URLCONF = 'test_project.urls' +WSGI_APPLICATION = 'test_project.wsgi.application' # Internationalization -# https://docs.djangoproject.com/en/1.11/topics/i18n/ +# https://docs.djangoproject.com/en/2.2/topics/i18n/ -LANGUAGE_CODE = "en-us" +LANGUAGE_CODE = 'en-us' -TIME_ZONE = "UTC" +TIME_ZONE = 'UTC' USE_I18N = True @@ -152,23 +159,23 @@ USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.11/howto/static-files/ +# https://docs.djangoproject.com/en/2.2/howto/static-files/ -STATIC_URL = "/sitestatic/" -STATIC_ROOT = os.path.join(BASE_DIR, "sitestatic") +STATIC_URL = '/sitestatic/' +STATIC_ROOT = os.path.join(BASE_DIR, 'sitestatic') STATICFILES_DIRS = ( - os.path.join(BASE_DIR, "..", "modoboa", "bower_components"), + os.path.join(BASE_DIR, '..', 'modoboa', 'bower_components'), ) -MEDIA_URL = "/media/" -MEDIA_ROOT = os.path.join(BASE_DIR, "media") +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # Rest framework settings REST_FRAMEWORK = { - "DEFAULT_AUTHENTICATION_CLASSES": ( - "rest_framework.authentication.TokenAuthentication", - "rest_framework.authentication.SessionAuthentication", + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework.authentication.TokenAuthentication', + 'rest_framework.authentication.SessionAuthentication', ), } @@ -177,31 +184,31 @@ REST_FRAMEWORK = { # DOVECOT_LOOKUP_PATH = ('/path/to/dovecot', ) -MODOBOA_API_URL = "https://api.modoboa.org/1/" +MODOBOA_API_URL = 'https://api.modoboa.org/1/' # Password validation -# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators +# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { - "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", # NOQA:E501 + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { - "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", # NOQA:E501 + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { - "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", # NOQA:E501 + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { - "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", # NOQA:E501 + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, { - "NAME": "modoboa.core.password_validation.ComplexityValidator", - "OPTIONS": { - "upper": 1, - "lower": 1, - "digits": 1, - "specials": 0 + 'NAME': 'modoboa.core.password_validation.ComplexityValidator', + 'OPTIONS': { + 'upper': 1, + 'lower': 1, + 'digits': 1, + 'specials': 0 } }, ] @@ -219,21 +226,21 @@ CKEDITOR_BROWSE_SHOW_DIRS = True CKEDITOR_ALLOW_NONIMAGE_FILES = False CKEDITOR_CONFIGS = { - "default": { - "allowedContent": True, - "toolbar": "Modoboa", - "width": None, - "toolbar_Modoboa": [ - ["Bold", "Italic", "Underline"], - ["JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock"], - ["BidiLtr", "BidiRtl", "Language"], - ["NumberedList", "BulletedList", "-", "Outdent", "Indent"], - ["Undo", "Redo"], - ["Link", "Unlink", "Anchor", "-", "Smiley"], - ["TextColor", "BGColor", "-", "Source"], - ["Font", "FontSize"], - ["Image", ], - ["SpellChecker"] + 'default': { + 'allowedContent': True, + 'toolbar': 'Modoboa', + 'width': None, + 'toolbar_Modoboa': [ + ['Bold', 'Italic', 'Underline'], + ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'], + ['BidiLtr', 'BidiRtl', 'Language'], + ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent'], + ['Undo', 'Redo'], + ['Link', 'Unlink', 'Anchor', '-', 'Smiley'], + ['TextColor', 'BGColor', '-', 'Source'], + ['Font', 'FontSize'], + ['Image', ], + ['SpellChecker'] ], }, } @@ -241,35 +248,48 @@ CKEDITOR_CONFIGS = { # Logging configuration LOGGING = { - "version": 1, - "disable_existing_loggers": False, - "formatters": { - "syslog": { - "format": "%(name)s: %(levelname)s %(message)s" + 'version': 1, + 'formatters': { + 'syslog': { + 'format': '%(name)s: %(levelname)s %(message)s' }, }, - "handlers": { - "syslog-auth": { - "class": "logging.handlers.SysLogHandler", - "facility": SysLogHandler.LOG_AUTH, - "formatter": "syslog" + 'handlers': { + 'mail-admins': { + 'level': 'ERROR', + 'class': 'django.utils.log.AdminEmailHandler', + 'include_html': True }, - "modoboa": { - "class": "modoboa.core.loggers.SQLHandler", + 'syslog-auth': { + 'class': 'logging.handlers.SysLogHandler', + 'facility': SysLogHandler.LOG_AUTH, + 'formatter': 'syslog' + }, + 'modoboa': { + 'class': 'modoboa.core.loggers.SQLHandler', } }, - "loggers": { - "modoboa.auth": { - "handlers": ["syslog-auth", "modoboa"], - "level": "INFO", - "propagate": False + 'loggers': { + 'django': { + 'handlers': ['mail-admins'], + 'level': 'ERROR', + 'propagate': False }, - "modoboa.admin": { - "handlers": ["modoboa"], - "level": "INFO", - "propagate": False + 'modoboa.auth': { + 'handlers': ['syslog-auth', 'modoboa'], + 'level': 'INFO', + 'propagate': False + }, + 'modoboa.admin': { + 'handlers': ['modoboa'], + 'level': 'INFO', + 'propagate': False } } } +SILENCED_SYSTEM_CHECKS = [ + "security.W019", # modoboa uses iframes to display e-mails +] + # Load settings from extensions