# -*- coding: utf-8 -*- """ Django common settings for GestionÉvénementiel Everything which is supposed to be identical between the production server and the local development server should be here. We also load the secrets in this file. """ import os from . import secret from django.core.urlresolvers import reverse_lazy from django.contrib import messages def import_secret(name): """ Shorthand for importing a value from the secret module and raising an informative exception if a secret is missing. """ try: return getattr(secret, name) except AttributeError: raise RuntimeError("Secret missing: {}".format(name)) SECRET_KEY = import_secret("SECRET_KEY") ADMINS = import_secret("ADMINS") DBNAME = import_secret("DBNAME") DBUSER = import_secret("DBUSER") DBPASSWD = import_secret("DBPASSWD") REDIS_PASSWD = import_secret("REDIS_PASSWD") REDIS_DB = import_secret("REDIS_DB") REDIS_HOST = import_secret("REDIS_HOST") REDIS_PORT = import_secret("REDIS_PORT") CREATE_USER_KEY = import_secret("CREATE_USER_KEY") BASE_DIR = os.path.dirname( os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ) INSTALLED_APPS = [ 'shared.apps.CustomAdminConfig', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', # 'channels', 'rest_framework', 'bootstrapform', 'widget_tweaks', 'taggit', 'allauth_ens', 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth_cas', 'allauth_ens.providers.clipper', 'api', 'communication', 'equipment', 'event', 'shared', 'users', ] MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.AllowAny', ], 'PAGE_SIZE': 10, 'TEST_REQUEST_DEFAULT_FORMAT': 'json', } ROOT_URLCONF = 'evenementiel.urls' STATIC_URL = "/static/" MEDIA_URL = "/media/" LOGIN_REDIRECT_URL = 'shared:home' LOGOUT_REDIRECT_URL = 'shared:home' AUTH_USER_MODEL = "users.User" 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', 'shared.shared.context_processor', ], }, }, ] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': DBNAME, 'USER': DBUSER, 'PASSWORD': DBPASSWD, 'PORT': 5432, 'HOST': 'localhost', } } # CHANNEL_LAYERS = { # "default": { # "BACKEND": "asgi_redis.RedisChannelLayer", # "CONFIG": { # "hosts": [( # "redis://:{passwd}@{host}:{port}/{db}" # .format(passwd=REDIS_PASSWD, host=REDIS_HOST, # port=REDIS_PORT, db=REDIS_DB) # )], # }, # "ROUTING": "evenementiel.routing.channel_routing", # } # } # Password validation # https://docs.djangoproject.com/en/1.9/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'}, ] # Internationalization # https://docs.djangoproject.com/en/1.8/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend', ) SITE_ID = 1 CAS_SERVER_URL = "https://cas.eleves.ens.fr/" #SPI CAS CAS_VERIFY_URL = "https://cas.eleves.ens.fr/" CAS_IGNORE_REFERER = True CAS_REDIRECT_URL = reverse_lazy('shared:home') CAS_EMAIL_FORMAT = "%s@clipper.ens.fr" CAS_FORCE_CHANGE_USERNAME_CASE = "lower" CAS_VERSION = 'CAS_2_SAML_1_0' LOGIN_URL = reverse_lazy('users:login') LOGOUT_URL = reverse_lazy('users:logout') LOGIN_REDIRECT_URL = reverse_lazy('shared:home') ACCOUNT_HOME_URL = reverse_lazy('shared:home') ACCOUNT_DETAILS_URL = reverse_lazy('shared:home') SOCIALACCOUNT_PROVIDERS = { # … 'clipper': { # These settings control whether a message containing a link to # disconnect from the CAS server is added when users log out. 'MESSAGE_SUGGEST_LOGOUT_ON_LOGOUT': True, 'MESSAGE_SUGGEST_LOGOUT_ON_LOGOUT_LEVEL': messages.INFO, }, } ACCOUNT_ADAPTER = 'shared.allauth_adapter.AccountAdapter' SOCIALACCOUNT_ADAPTER = 'shared.allauth_adapter.SocialAccountAdapter'