270 lines
9.2 KiB
Python
270 lines
9.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
import os
|
|
import django.conf.global_settings
|
|
gettext_noop = lambda s: s
|
|
|
|
PROJECT_PATH = os.path.join(os.path.dirname(__file__), '..')
|
|
PROJECT_NAME = 'docbow'
|
|
|
|
# boolean settings
|
|
__ENVIRONMENT_DEFAULTS = dict(
|
|
# booleans
|
|
DEBUG=False,
|
|
DEBUG_PROPAGATE_EXCEPTIONS=False,
|
|
USE_DEBUG_TOOLBAR=False,
|
|
TEMPLATE_DEBUG=False,
|
|
# paths
|
|
STATIC_ROOT='/var/lib/%s/static' % PROJECT_NAME,
|
|
STATIC_URL='/static/',
|
|
MEDIA_ROOT='/var/lib/%s/media' % PROJECT_NAME,
|
|
MEDIA_URL='/media/',
|
|
# i18n/l18n
|
|
TIME_ZONE = 'Europe/Paris',
|
|
LANGUAGE_CODE = 'fr',
|
|
SITE_ID = 1,
|
|
USE_I18N=True,
|
|
USE_L10N=True,
|
|
USE_TZ=True,
|
|
# core
|
|
ROOT_URLCONF='docbow_project.urls',
|
|
TEMPLATE_DIRS=('/var/lib/%s/templates' % PROJECT_NAME,),
|
|
STATICFILES_DIRS=('/var/lib/%s/extra-static/' % PROJECT_NAME,),
|
|
GRAPPELLI_ADMIN_TITLE=u"Plate-forme sécurisée d'échange de documents",
|
|
FILE_PER_PAGE=30,
|
|
TINYMCE_SPELLCHECKER=True,
|
|
TINYMCE_JS_URL="/static/js/tiny_mce/tiny_mce_src.js",
|
|
TINYMCE_COMPRESSOR=True,
|
|
DO_NOT_SEND_GROUPS=(
|
|
u'Administrateurs des groupes',
|
|
u'Administrateurs des types de document',
|
|
u'Administrateurs des utilisateurs',
|
|
u"Utilisateurs de l'application" ),
|
|
CONTACT_GROUPS=(u'Contact « Administrateur du système »',),
|
|
LOCALE_PATHS=(os.path.join(PROJECT_PATH, 'docbow_project', 'locale'),),
|
|
DEFAULT_FROM_EMAIL='admin@example.com',
|
|
CONTACT_SUBJECT_PREFIX='Contact depuis docbow: ',
|
|
ALLOWED_HOSTS=['*'],
|
|
LOGIN_REDIRECT_URL='/inbox',
|
|
MESSAGE_STORAGE='django.contrib.messages.storage.fallback.FallbackStorage',
|
|
AUTHENTICATION_BACKENDS=(
|
|
'docbow_project.docbow.auth_backend.DelegationAuthBackend',
|
|
'django.contrib.auth.backends.ModelBackend' ),
|
|
AUTH_LDAP_SERVER_URI='ldaps://ldap.libre-entreprise.org:636',
|
|
AUTH_LDAP_BIND_DN='uid=admin,ou=people,o=entrouvert,ou=companies,o=libre-entreprise',
|
|
AUTH_LDAP_BIND_PASSWORD='',
|
|
INTERNAL_IPS=('127.0.0.1','82.234.244.169'),
|
|
ADMINS=(),
|
|
SOUTH_TESTS_MIGRATE=True,
|
|
DOCBOW_BASE_URL='http://localhost:8000',
|
|
OVH_SMS_ACCOUNT='sms-db26857-1',
|
|
OVH_SMS_LOGIN='pfwb',
|
|
OVH_SMS_PASSWORD='',
|
|
OVH_SMS_FROM='Dauvergne',
|
|
DOCBOW_SMS_CARRIER_CLASS='docbow_project.docbow.sms_carrier_ovh.OVHSMSCarrier',
|
|
DOCBOW_ORGANIZATION_SHORT='PFWB',
|
|
DOCBOW_ORGANIZATION=u'Parlement de la Fédération Wallonie-Bruxelles',
|
|
DOCBOW_PFWB_GED_DIRECTORY='/var/lib/%s/ged/',
|
|
DOCBOW_NOTIFIERS=(
|
|
'docbow_project.docbow.notification.MailNotifier',
|
|
'docbow_project.docbow.notification.SMSNotifier',
|
|
),
|
|
DOCBOW_BASE_URL='https://secure.pfwb.be',
|
|
TEMPLATE_CONTEXT_PROCESSORS=django.conf.global_settings.TEMPLATE_CONTEXT_PROCESSORS+('django.core.context_processors.request',),
|
|
DATE_INPUT_FORMATS=('%d/%m/%Y', '%Y-%m-%d'),
|
|
CRISPY_TEMPLATE_PACK='uni_form',
|
|
)
|
|
|
|
for key, default in __ENVIRONMENT_DEFAULTS.iteritems():
|
|
try:
|
|
value = os.environ[key]
|
|
if default is True or default is False:
|
|
if value.isdigit():
|
|
value = bool(int(value))
|
|
else:
|
|
value = value.lower() in ('yes', 'true', 'y')
|
|
elif isinstance(default, (tuple, list)):
|
|
value = [ x.strip() for x in value.split(':')]
|
|
if len(default) or key in ('ADMINS',):
|
|
if key in ('ADMINS',) or isinstance(default[0], (tuple, list)):
|
|
value = [ x.split(';') for x in value ]
|
|
elif isinstance(default[0]. unicode):
|
|
value = [ unicode(x, 'utf8') for x in value ]
|
|
elif isinstance(default, unicode):
|
|
value = unicode(value, 'utf8')
|
|
except KeyError:
|
|
value = default
|
|
globals()[key] = value
|
|
|
|
MANAGERS = ADMINS
|
|
|
|
DATABASES = {
|
|
'default': {
|
|
'ENGINE': os.environ.get('DATABASE_ENGINE', 'django.db.backends.sqlite3'),
|
|
'NAME': os.environ.get('DATABASE_NAME', os.path.join(PROJECT_PATH, PROJECT_NAME + '.db')),
|
|
}
|
|
}
|
|
|
|
# Hey Entr'ouvert is in France !!
|
|
|
|
LANGUAGES = (
|
|
('fr', gettext_noop('French')),
|
|
)
|
|
|
|
TEMPLATE_LOADERS = (
|
|
'django.template.loaders.filesystem.Loader',
|
|
'django.template.loaders.app_directories.Loader',
|
|
)
|
|
|
|
MIDDLEWARE_CLASSES = (
|
|
'django.middleware.common.CommonMiddleware',
|
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
'django.middleware.csrf.CsrfViewMiddleware',
|
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
'django.contrib.messages.middleware.MessageMiddleware',
|
|
'django.middleware.transaction.TransactionMiddleware',
|
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
|
'docbow_project.docbow.middleware.KeepUserAroundMiddleware',
|
|
'django_journal.middleware.JournalMiddleware',
|
|
)
|
|
|
|
INSTALLED_APPS = (
|
|
'docbow_project.pfwb',
|
|
'docbow_project.docbow',
|
|
'django_tables2',
|
|
'grappelli',
|
|
'django_journal',
|
|
'crispy_forms',
|
|
'tinymce',
|
|
'south',
|
|
'django.contrib.admin',
|
|
'django.contrib.contenttypes',
|
|
'django.contrib.auth',
|
|
'django.contrib.sessions',
|
|
'django.contrib.messages',
|
|
'django.contrib.staticfiles',
|
|
'django.contrib.humanize',
|
|
)
|
|
|
|
STATICFILES_FINDERS = (
|
|
'django.contrib.staticfiles.finders.FileSystemFinder',
|
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
|
)
|
|
|
|
TINYMCE_DEFAULT_CONFIG = {
|
|
'theme': "advanced",
|
|
}
|
|
|
|
import logging.handlers
|
|
|
|
LOGGING = {
|
|
'version': 1,
|
|
'disable_existing_loggers': True,
|
|
'formatters': {
|
|
'syslog': {
|
|
'format': PROJECT_NAME + '(pid=%(process)d) %(levelname)s %(name)s: %(message)s',
|
|
},
|
|
'syslog_debug': {
|
|
'format': PROJECT_NAME + '(pid=%(process)d) %(levelname)s %(asctime)s t_%(thread)s %(name)s: %(message)s',
|
|
},
|
|
},
|
|
'handlers': {
|
|
'syslog': {
|
|
'level': 'DEBUG',
|
|
'class': 'entrouvert.logging.handlers.SysLogHandler',
|
|
'formatter': 'syslog_debug' if DEBUG else 'syslog',
|
|
'facility': logging.handlers.SysLogHandler.LOG_LOCAL0,
|
|
'address': '/dev/log',
|
|
'max_length': 999,
|
|
'filters': [],
|
|
},
|
|
'mail_admins': {
|
|
'level': 'ERROR',
|
|
'class': 'django.utils.log.AdminEmailHandler',
|
|
'filters': [],
|
|
'include_html': True,
|
|
},
|
|
'console': {
|
|
'class': 'logging.StreamHandler',
|
|
'formatter': 'syslog_debug',
|
|
'level': 'DEBUG',
|
|
},
|
|
},
|
|
'loggers': {
|
|
'django.db': {
|
|
'handlers': [ 'mail_admins', 'syslog' ],
|
|
'level': 'INFO',
|
|
'propagate': False,
|
|
},
|
|
'south': {
|
|
'handlers': [ 'mail_admins', 'syslog' ],
|
|
'level': 'INFO',
|
|
'propagate': False,
|
|
},
|
|
'docbow.mail_interface': {
|
|
'handlers': [ 'mail_admins', 'syslog' ],
|
|
'level': 'DEBUG' if DEBUG else 'INFO',
|
|
'propagate': False,
|
|
},
|
|
'docbow': {
|
|
'handlers': [ 'mail_admins', 'syslog' ],
|
|
'level': 'DEBUG' if DEBUG else 'INFO',
|
|
'propagate': False,
|
|
},
|
|
'': {
|
|
'handlers': [ 'mail_admins', 'syslog' ],
|
|
'level': 'DEBUG',
|
|
},
|
|
},
|
|
}
|
|
|
|
if DEBUG:
|
|
for key, logger in LOGGING['loggers'].iteritems():
|
|
logger['handlers'].append('console')
|
|
|
|
# LDAP backend configuration
|
|
try:
|
|
import ldap
|
|
except ImportError:
|
|
pass
|
|
else:
|
|
from django_auth_ldap.config import LDAPSearch, GroupOfUniqueNamesType
|
|
|
|
AUTHENTICATION_BACKENDS = ('django_auth_ldap.backend.LDAPBackend',) + AUTHENTICATION_BACKENDS
|
|
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=people,o=entrouvert,ou=companies,o=libre-entreprise",
|
|
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
|
|
AUTH_LDAP_GROUP_TYPE = GroupOfUniqueNamesType()
|
|
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("o=libre-entreprise",
|
|
ldap.SCOPE_SUBTREE, "(objectClass=legroup)")
|
|
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
|
|
"is_staff": "cn=ldapadmins,ou=groups,o=entrouvert,ou=companies,o=libre-entreprise",
|
|
"is_superuser": "cn=ldapadmins,ou=groups,o=entrouvert,ou=companies,o=libre-entreprise",
|
|
}
|
|
AUTH_LDAP_USER_ATTR_MAP = {
|
|
"first_name": "givenName",
|
|
"last_name": "sn",
|
|
"email": "mail"
|
|
}
|
|
|
|
try:
|
|
from local_settings import *
|
|
except ImportError, e:
|
|
if 'local_settings' not in e.args[0]:
|
|
raise
|
|
|
|
if DEBUG and 'SECRET_KEY' not in globals():
|
|
SECRET_KEY = 'coin'
|
|
|
|
if USE_DEBUG_TOOLBAR:
|
|
try:
|
|
import debug_toolbar
|
|
MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
|
|
INSTALLED_APPS += ('debug_toolbar',)
|
|
DEBUG_TOOLBAR_CONFIG = { 'INTERCEPT_REDIRECTS': False }
|
|
except ImportError:
|
|
print "Debug toolbar missing, not loaded"
|
|
|
|
# syntax checks
|
|
for admin in ADMINS:
|
|
assert len(admin) == 2, 'ADMINS setting must be a colon separated list of name and emails separated by a semi-colon: %s' % ADMINS
|
|
assert '@' in admin[1], 'ADMINS setting pairs second value must be emails: %s' % ADMINS
|