Commit 2c7cd89992d4f6ce93aec561175faf86de35389c
1 parent
3dbf38eb
Exists in
master
and in
39 other branches
One settings.py to rule them all!
Showing
6 changed files
with
301 additions
and
511 deletions
Show diff stats
| ... | ... | @@ -0,0 +1,53 @@ |
| 1 | + | |
| 2 | +DEBUG: false | |
| 3 | +TEMPLATE_DEBUG: false | |
| 4 | + | |
| 5 | +ADMINS: &admin | |
| 6 | + - | |
| 7 | + - John Foo | |
| 8 | + - john@example.com | |
| 9 | + - | |
| 10 | + - Mary Bar | |
| 11 | + - mary@example.com | |
| 12 | + | |
| 13 | +MANAGERS: *admin | |
| 14 | + | |
| 15 | +COLAB_FROM_ADDRESS: '"Colab" <noreply@example.com>' | |
| 16 | +SERVER_EMAIL: '"Colab" <noreply@example.com>' | |
| 17 | + | |
| 18 | +EMAIL_HOST: localhost | |
| 19 | +EMAIL_PORT: 25 | |
| 20 | +EMAIL_SUBJECT_PREFIX: '[colab]' | |
| 21 | + | |
| 22 | +SECRET_KEY: '{{ secret_key }}' | |
| 23 | + | |
| 24 | +SITE_URL: 'http://www.example.com/' | |
| 25 | + | |
| 26 | +ALLOWED_HOSTS: | |
| 27 | + - example.com | |
| 28 | + - example.org | |
| 29 | + - example.net | |
| 30 | + | |
| 31 | +CONVERSEJS_ENABLED: false | |
| 32 | + | |
| 33 | +CONVERSEJS_AUTO_REGISTER: 'xmpp.example.com' | |
| 34 | + | |
| 35 | +DATABASES: | |
| 36 | + default: | |
| 37 | + ENGINE: django.db.backends.postgresql_psycopg2 | |
| 38 | + HOST: localhost | |
| 39 | + NAME: colab | |
| 40 | + USER: colab | |
| 41 | + PASSWORD: colab | |
| 42 | + | |
| 43 | +ROBOTS_NOINDEX: false | |
| 44 | + | |
| 45 | +# Set to false to disable | |
| 46 | +RAVEN_DSN: 'http://public:secret@example.com/1' | |
| 47 | + | |
| 48 | +PROXIED_APPS: | |
| 49 | + gitlab: | |
| 50 | + upstream: 'http://localhost:8090/gitlab/' | |
| 51 | + trac: | |
| 52 | + upstream: 'http://localhost:5000/trac/' | |
| 53 | + | ... | ... |
src/colab/custom_settings.py
| ... | ... | @@ -1,313 +0,0 @@ |
| 1 | -from settings import * | |
| 2 | -from django.utils.translation import ugettext_lazy as _ | |
| 3 | - | |
| 4 | -# Allow Django runserver to serve SVG files | |
| 5 | -# https://code.djangoproject.com/ticket/20162 | |
| 6 | -import mimetypes | |
| 7 | -mimetypes.add_type('image/svg+xml', '.svg') | |
| 8 | - | |
| 9 | -DEBUG = False | |
| 10 | - | |
| 11 | -TEMPLATE_DEBUG = False | |
| 12 | - | |
| 13 | -LANGUAGES = ( | |
| 14 | - ('en', _('English')), | |
| 15 | - ('pt-br', _('Portuguese')), | |
| 16 | - ('es', _('Spanish')), | |
| 17 | -) | |
| 18 | - | |
| 19 | -DJANGO_DATE_FORMAT_TO_JS = { | |
| 20 | - 'pt-br': ('pt-BR', 'dd/MM/yyyy'), | |
| 21 | - 'es': ('es', 'dd/MM/yyyy'), | |
| 22 | -} | |
| 23 | - | |
| 24 | -LANGUAGE_CODE = 'en' | |
| 25 | - | |
| 26 | -# The absolute path to the folder containing the attachments | |
| 27 | -ATTACHMENTS_FOLDER_PATH = '/mnt/trac/attachments/' | |
| 28 | - | |
| 29 | -# ORDERING_DATA receives the options to order for as it's keys and a dict as | |
| 30 | -# value, if you want to order for the last name, you can use something like: | |
| 31 | -# 'last_name': {'name': 'Last Name', 'fields': 'last_name'} inside the dict, | |
| 32 | -# you pass two major keys (name, fields) | |
| 33 | -# The major key name is the name to appear on the template | |
| 34 | -# the major key fields it show receive the name of the fields to order for in | |
| 35 | -# the indexes | |
| 36 | - | |
| 37 | -ORDERING_DATA = { | |
| 38 | - 'latest': { | |
| 39 | - 'name': _(u'Recent activity'), | |
| 40 | - 'fields': ('-modified', '-created'), | |
| 41 | - }, | |
| 42 | - 'hottest': { | |
| 43 | - 'name': _(u'Relevance'), | |
| 44 | - 'fields': None, | |
| 45 | - }, | |
| 46 | -} | |
| 47 | - | |
| 48 | -# File type groupings is a tuple of tuples containg what it should filter, | |
| 49 | -# how it should be displayed, and a tuple of which mimetypes it includes | |
| 50 | -FILE_TYPE_GROUPINGS = ( | |
| 51 | - ('document', _(u'Document'), | |
| 52 | - ('doc', 'docx', 'odt', 'otx', 'dotx', 'pdf', 'ott')), | |
| 53 | - ('presentation', _(u'Presentation'), ('ppt', 'pptx', 'odp')), | |
| 54 | - ('text', _(u'Text'), ('txt', 'po', 'conf', 'log')), | |
| 55 | - ('code', _(u'Code'), | |
| 56 | - ('py', 'php', 'js', 'sql', 'sh', 'patch', 'diff', 'html', '')), | |
| 57 | - ('compressed', _(u'Compressed'), ('rar', 'zip', 'gz', 'tgz', 'bz2')), | |
| 58 | - ('image', _(u'Image'), | |
| 59 | - ('jpg', 'jpeg', 'png', 'tiff', 'gif', 'svg', 'psd', 'planner', 'cdr')), | |
| 60 | - ('spreadsheet', _(u'Spreadsheet'), | |
| 61 | - ('ods', 'xls', 'xlsx', 'xslt', 'csv')), | |
| 62 | -) | |
| 63 | - | |
| 64 | - | |
| 65 | -# the following variable define how many characters should be shown before | |
| 66 | -# a highlighted word, to make sure that the highlighted word will appear | |
| 67 | -HIGHLIGHT_NUM_CHARS_BEFORE_MATCH = 30 | |
| 68 | -HAYSTACK_CUSTOM_HIGHLIGHTER = 'colab.utils.highlighting.ColabHighlighter' | |
| 69 | - | |
| 70 | -HAYSTACK_CONNECTIONS = { | |
| 71 | - 'default': { | |
| 72 | - 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', | |
| 73 | - 'URL': os.environ.get('COLAB_SOLR_URL', 'http://localhost:8983/solr'), | |
| 74 | - } | |
| 75 | -} | |
| 76 | - | |
| 77 | -DATABASES = { | |
| 78 | - 'default': { | |
| 79 | - 'ENGINE': 'django.db.backends.postgresql_psycopg2', | |
| 80 | - 'NAME': 'colab', | |
| 81 | - 'USER': 'colab', | |
| 82 | - 'PASSWORD': os.environ.get('COLAB_DEFAULT_DB_PWD'), | |
| 83 | - 'HOST': os.environ.get('COLAB_DEFAULT_DB_HOST'), | |
| 84 | - }, | |
| 85 | -} | |
| 86 | - | |
| 87 | -CACHES = { | |
| 88 | - 'default': { | |
| 89 | - 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', | |
| 90 | - 'LOCATION': '127.0.0.1:11211', | |
| 91 | - } | |
| 92 | -} | |
| 93 | - | |
| 94 | -DATABASE_ROUTERS = [] | |
| 95 | - | |
| 96 | -INSTALLED_APPS += ( | |
| 97 | - # First app to provide AUTH_USER_MODEL to others | |
| 98 | - 'accounts', | |
| 99 | - | |
| 100 | - # Not standard apps | |
| 101 | - 'raven.contrib.django.raven_compat', | |
| 102 | - 'cliauth', | |
| 103 | - 'django_mobile', | |
| 104 | - 'django_browserid', | |
| 105 | - 'conversejs', | |
| 106 | - 'haystack', | |
| 107 | - 'hitcounter', | |
| 108 | - 'i18n_model', | |
| 109 | - 'mptt', | |
| 110 | - 'dpaste', | |
| 111 | - | |
| 112 | - # Own apps | |
| 113 | - 'super_archives', | |
| 114 | - 'api', | |
| 115 | - 'rss', | |
| 116 | - 'planet', | |
| 117 | - 'search', | |
| 118 | - 'badger', | |
| 119 | - 'tz', | |
| 120 | - | |
| 121 | - # Feedzilla and deps | |
| 122 | - 'feedzilla', | |
| 123 | - 'taggit', | |
| 124 | - 'common', | |
| 125 | -) | |
| 126 | - | |
| 127 | -LOGGING = { | |
| 128 | - 'version': 1, | |
| 129 | - 'disable_existing_loggers': False, | |
| 130 | - 'root': { | |
| 131 | - 'level': 'WARNING', | |
| 132 | - 'handlers': ['sentry', 'console'], | |
| 133 | - }, | |
| 134 | - 'formatters': { | |
| 135 | - 'verbose': { | |
| 136 | - 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s', | |
| 137 | - }, | |
| 138 | - }, | |
| 139 | - 'filters': { | |
| 140 | - 'require_debug_false': { | |
| 141 | - '()': 'django.utils.log.RequireDebugFalse' | |
| 142 | - } | |
| 143 | - }, | |
| 144 | - 'handlers': { | |
| 145 | - 'mail_admins': { | |
| 146 | - 'level': 'ERROR', | |
| 147 | - 'class': 'django.utils.log.AdminEmailHandler', | |
| 148 | - 'include_html': True, | |
| 149 | - 'filters': ['require_debug_false'], | |
| 150 | - }, | |
| 151 | - 'sentry': { | |
| 152 | - 'level': 'ERROR', | |
| 153 | - 'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', | |
| 154 | - }, | |
| 155 | - 'console': { | |
| 156 | - 'level': 'DEBUG', | |
| 157 | - 'class': 'logging.StreamHandler', | |
| 158 | - 'formatter': 'verbose' | |
| 159 | - } | |
| 160 | - }, | |
| 161 | - 'loggers': { | |
| 162 | - 'django.request': { | |
| 163 | - 'handlers': ['mail_admins', 'sentry'], | |
| 164 | - 'level': 'ERROR', | |
| 165 | - 'propagate': True, | |
| 166 | - }, | |
| 167 | - 'django.db.backends': { | |
| 168 | - 'level': 'ERROR', | |
| 169 | - 'handlers': ['sentry'], | |
| 170 | - 'propagate': False, | |
| 171 | - }, | |
| 172 | - 'raven': { | |
| 173 | - 'level': 'DEBUG', | |
| 174 | - 'handlers': ['console'], | |
| 175 | - 'propagate': False, | |
| 176 | - }, | |
| 177 | - 'sentry.errors': { | |
| 178 | - 'level': 'DEBUG', | |
| 179 | - 'handlers': ['console'], | |
| 180 | - 'propagate': False, | |
| 181 | - }, | |
| 182 | - 'django_browserid': { | |
| 183 | - 'handlers': ['sentry'], | |
| 184 | - 'level': 'WARNING', | |
| 185 | - 'propagate': False, | |
| 186 | - }, | |
| 187 | - 'conversejs': { | |
| 188 | - 'handlers': ['console'], | |
| 189 | - 'level': 'DEBUG', | |
| 190 | - 'propagate': False, | |
| 191 | - }, | |
| 192 | - } | |
| 193 | -} | |
| 194 | - | |
| 195 | -TEMPLATE_CONTEXT_PROCESSORS = ( | |
| 196 | - 'django.contrib.auth.context_processors.auth', | |
| 197 | - 'django.core.context_processors.debug', | |
| 198 | - 'django.core.context_processors.i18n', | |
| 199 | - 'django.core.context_processors.media', | |
| 200 | - 'django.core.context_processors.static', | |
| 201 | - 'django.core.context_processors.tz', | |
| 202 | - 'django.contrib.messages.context_processors.messages', | |
| 203 | - 'django.core.context_processors.request', | |
| 204 | - 'django_mobile.context_processors.is_mobile', | |
| 205 | - 'super_archives.context_processors.mailarchive', | |
| 206 | - 'proxy.context_processors.proxied_apps', | |
| 207 | - 'home.context_processors.robots', | |
| 208 | -) | |
| 209 | - | |
| 210 | -MIDDLEWARE_CLASSES = ( | |
| 211 | - 'django.contrib.sessions.middleware.SessionMiddleware', | |
| 212 | - 'django.middleware.locale.LocaleMiddleware', | |
| 213 | - 'django.middleware.common.CommonMiddleware', | |
| 214 | - 'django.middleware.csrf.CsrfViewMiddleware', | |
| 215 | - 'django.contrib.auth.middleware.AuthenticationMiddleware', | |
| 216 | - 'django.contrib.messages.middleware.MessageMiddleware', | |
| 217 | - 'django.middleware.clickjacking.XFrameOptionsMiddleware', | |
| 218 | - 'django_mobile.middleware.MobileDetectionMiddleware', | |
| 219 | - 'django_mobile.middleware.SetFlavourMiddleware', | |
| 220 | - 'tz.middleware.TimezoneMiddleware', | |
| 221 | -) | |
| 222 | - | |
| 223 | -# Add the django_browserid authentication backend. | |
| 224 | -AUTHENTICATION_BACKENDS = ( | |
| 225 | - 'django.contrib.auth.backends.ModelBackend', | |
| 226 | - 'accounts.auth.ColabBrowserIDBackend', | |
| 227 | -) | |
| 228 | - | |
| 229 | -STATICFILES_DIRS = ( | |
| 230 | - os.path.join(BASE_DIR, 'static'), | |
| 231 | -) | |
| 232 | - | |
| 233 | -STATIC_ROOT = '/usr/share/nginx/colab/static/' | |
| 234 | -MEDIA_ROOT = '/usr/share/nginx/colab/media/' | |
| 235 | - | |
| 236 | -TEMPLATE_DIRS = ( | |
| 237 | - os.path.join(BASE_DIR, 'templates'), | |
| 238 | -) | |
| 239 | - | |
| 240 | -LOCALE_PATHS = ( | |
| 241 | - os.path.join(BASE_DIR, 'locale'), | |
| 242 | -) | |
| 243 | - | |
| 244 | -AUTH_USER_MODEL = 'accounts.User' | |
| 245 | - | |
| 246 | -ALLOWED_HOSTS = [] | |
| 247 | - | |
| 248 | -from django.contrib.messages import constants as messages | |
| 249 | -MESSAGE_TAGS = { | |
| 250 | - messages.INFO: 'alert-info', | |
| 251 | - messages.SUCCESS: 'alert-success', | |
| 252 | - messages.WARNING: 'alert-warning', | |
| 253 | - messages.ERROR: 'alert-danger', | |
| 254 | -} | |
| 255 | - | |
| 256 | -### Feedzilla (planet) | |
| 257 | -from feedzilla.settings import * | |
| 258 | -FEEDZILLA_PAGE_SIZE = 5 | |
| 259 | -FEEDZILLA_SITE_TITLE = _(u'Planet Colab') | |
| 260 | -FEEDZILLA_SITE_DESCRIPTION = _(u'Colab blog aggregator') | |
| 261 | - | |
| 262 | - | |
| 263 | -### Mailman API settings | |
| 264 | -MAILMAN_API_URL = 'http://localhost:9000' | |
| 265 | - | |
| 266 | - | |
| 267 | -### BrowserID / Persona | |
| 268 | -SITE_URL = 'localhost:8000' | |
| 269 | -BROWSERID_AUDIENCES = [SITE_URL, SITE_URL.replace('https', 'http')] | |
| 270 | - | |
| 271 | - | |
| 272 | -LOGIN_URL = '/' | |
| 273 | -LOGIN_REDIRECT_URL = '/' | |
| 274 | -LOGIN_REDIRECT_URL_FAILURE = '/' | |
| 275 | -LOGOUT_REDIRECT_URL = '/user/logout' | |
| 276 | -BROWSERID_CREATE_USER = False | |
| 277 | - | |
| 278 | - | |
| 279 | -## Proxy settings | |
| 280 | -COLAB_CI_URL = 'localhost:9000/ci/' | |
| 281 | - | |
| 282 | -REVPROXY_ADD_REMOTE_USER = True | |
| 283 | - | |
| 284 | - | |
| 285 | -## Converse.js settings | |
| 286 | -# This URL must use SSL in order to keep chat sessions secure | |
| 287 | -CONVERSEJS_BOSH_SERVICE_URL = SITE_URL + '/http-bind' | |
| 288 | - | |
| 289 | -CONVERSEJS_ALLOW_CONTACT_REQUESTS = False | |
| 290 | -CONVERSEJS_SHOW_ONLY_ONLINE_USERS = True | |
| 291 | - | |
| 292 | - | |
| 293 | -# Tastypie settings | |
| 294 | -TASTYPIE_DEFAULT_FORMATS = ['json', ] | |
| 295 | - | |
| 296 | - | |
| 297 | -# Dpaste settings | |
| 298 | -DPASTE_EXPIRE_CHOICES = ( | |
| 299 | - ('onetime', _(u'One Time Snippet')), | |
| 300 | - (3600, _(u'In one hour')), | |
| 301 | - (3600 * 24 * 7, _(u'In one week')), | |
| 302 | - (3600 * 24 * 30, _(u'In one month')), | |
| 303 | - ('never', _(u'Never')), | |
| 304 | -) | |
| 305 | -DPASTE_EXPIRE_DEFAULT = DPASTE_EXPIRE_CHOICES[4][0] | |
| 306 | -DPASTE_DEFAULT_GIST_DESCRIPTION = 'Gist created from Colab DPaste' | |
| 307 | -DPASTE_DEFAULT_GIST_NAME = 'colab_paste' | |
| 308 | -DPASTE_LEXER_DEFAULT = 'text' | |
| 309 | - | |
| 310 | -try: | |
| 311 | - from local_settings import * | |
| 312 | -except ImportError: | |
| 313 | - pass |
src/colab/local_settings-dev.py
| ... | ... | @@ -1,61 +0,0 @@ |
| 1 | - | |
| 2 | -from custom_settings import * | |
| 3 | - | |
| 4 | -DEBUG = True | |
| 5 | -TEMPLATE_DEBUG = DEBUG | |
| 6 | - | |
| 7 | -ADMINS = ( | |
| 8 | -) | |
| 9 | - | |
| 10 | -MANAGERS = ADMINS | |
| 11 | - | |
| 12 | -EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' | |
| 13 | -#EMAIL_HOST = '' | |
| 14 | -#EMAIL_PORT = 587 | |
| 15 | -EMAIL_SUBJECT_PREFIX = '' | |
| 16 | - | |
| 17 | -# Make this unique, and don't share it with anybody. | |
| 18 | -SECRET_KEY = ')(jksdfhsjkadfhjkh234ns!8fqu-1186h$vuj' | |
| 19 | - | |
| 20 | -SITE_URL = 'http://localhost:8000' | |
| 21 | -BROWSERID_AUDIENCES = [SITE_URL, SITE_URL.replace('https', 'http')] | |
| 22 | - | |
| 23 | -ALLOWED_HOSTS = ['*'] | |
| 24 | - | |
| 25 | -INTERNAL_IPS = ('127.0.0.1', ) | |
| 26 | - | |
| 27 | -CONVERSEJS_BOSH_SERVICE_URL = 'http://localhost:5280/http-bind' | |
| 28 | - | |
| 29 | -DATABASES['default']['PASSWORD'] = 'colab' | |
| 30 | -DATABASES['default']['HOST'] = 'localhost' | |
| 31 | - | |
| 32 | -HAYSTACK_CONNECTIONS['default']['URL'] = 'http://localhost:8983/solr/' | |
| 33 | - | |
| 34 | -COLAB_TRAC_URL = 'http://localhost:5000/trac/' | |
| 35 | -COLAB_CI_URL = 'http://localhost:8080/ci/' | |
| 36 | -COLAB_GITLAB_URL = 'http://localhost:8090/gitlab/' | |
| 37 | -COLAB_REDMINE_URL = 'http://localhost:9080/redmine/' | |
| 38 | - | |
| 39 | - | |
| 40 | -CONVERSEJS_ENABLED = False | |
| 41 | - | |
| 42 | -DIAZO_THEME = SITE_URL | |
| 43 | - | |
| 44 | -ROBOTS_NOINDEX = True | |
| 45 | - | |
| 46 | - | |
| 47 | -### Trac Settings | |
| 48 | - | |
| 49 | -#INSTALLED_APPS += ( | |
| 50 | -# 'proxy.trac', | |
| 51 | -#) | |
| 52 | -# | |
| 53 | -#DATABASE_ROUTERS += ['proxy.trac.routers.TracRouter'] | |
| 54 | -# | |
| 55 | -#DATABASES['trac'] = { | |
| 56 | -# 'ENGINE': 'django.db.backends.postgresql_psycopg2', | |
| 57 | -# 'NAME': 'trac_colab', | |
| 58 | -# 'USER': 'colab', | |
| 59 | -# 'PASSWORD': 'colab', | |
| 60 | -# 'HOST': 'localhost', | |
| 61 | -#} |
src/colab/local_settings-homolog.py
| ... | ... | @@ -1,65 +0,0 @@ |
| 1 | - | |
| 2 | -import os | |
| 3 | -import json | |
| 4 | - | |
| 5 | -from custom_settings import * | |
| 6 | - | |
| 7 | -SECRETS_FILE = '/home/colab/colab/secrets.json' | |
| 8 | - | |
| 9 | -if os.path.exists(SECRETS_FILE): | |
| 10 | - secrets = json.load(file(SECRETS_FILE)) | |
| 11 | - | |
| 12 | - | |
| 13 | -DEBUG = False | |
| 14 | -TEMPLATE_DEBUG = DEBUG | |
| 15 | - | |
| 16 | -ADMINS = ( | |
| 17 | - ('Paulo Meirelles', 'paulo@softwarelivre.org'), | |
| 18 | -) | |
| 19 | - | |
| 20 | -MANAGERS = ADMINS | |
| 21 | - | |
| 22 | -COLAB_FROM_ADDRESS = '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>' | |
| 23 | -SERVER_EMAIL = COLAB_FROM_ADDRESS | |
| 24 | -EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' | |
| 25 | -EMAIL_HOST = 'localhost' | |
| 26 | -EMAIL_PORT = 25 | |
| 27 | -EMAIL_SUBJECT_PREFIX = '' | |
| 28 | - | |
| 29 | -# Make this unique, and don't share it with anybody. | |
| 30 | -SECRET_KEY = secrets.get('SECRET_KEY') | |
| 31 | - | |
| 32 | -SITE_URL = 'http://beta.softwarepublico.gov.br' | |
| 33 | -BROWSERID_AUDIENCES = [SITE_URL, SITE_URL.replace('https', 'http')] | |
| 34 | - | |
| 35 | -ALLOWED_HOSTS = ['beta.softwarepublico.gov.br'] | |
| 36 | - | |
| 37 | -INTERNAL_IPS = ('127.0.0.1', ) | |
| 38 | - | |
| 39 | -DATABASES['default']['PASSWORD'] = secrets.get('COLAB_DB_PWD') | |
| 40 | -DATABASES['default']['HOST'] = 'localhost' | |
| 41 | - | |
| 42 | -TRAC_ENABLED = True | |
| 43 | - | |
| 44 | -if TRAC_ENABLED: | |
| 45 | - from trac_settings import * | |
| 46 | - DATABASES['trac'] = TRAC_DATABASE | |
| 47 | - DATABASES['trac']['PASSWORD'] = secrets.get('TRAC_DB_PWD') | |
| 48 | - DATABASES['trac']['HOST'] = 'localhost' | |
| 49 | - | |
| 50 | -HAYSTACK_CONNECTIONS['default']['URL'] = 'http://localhost:8983/solr/' | |
| 51 | - | |
| 52 | -COLAB_TRAC_URL = 'http://localhost:5000/trac/' | |
| 53 | -COLAB_CI_URL = 'http://localhost:8080/ci/' | |
| 54 | -COLAB_GITLAB_URL = 'http://localhost:8090/gitlab/' | |
| 55 | -COLAB_REDMINE_URL = 'http://localhost:9080/redmine/' | |
| 56 | - | |
| 57 | -CONVERSEJS_ENABLED = False | |
| 58 | - | |
| 59 | -DIAZO_THEME = SITE_URL | |
| 60 | - | |
| 61 | -ROBOTS_NOINDEX = True | |
| 62 | - | |
| 63 | -RAVEN_CONFIG = { | |
| 64 | - 'dsn': secrets.get('RAVEN_DSN', '') + '?timeout=30', | |
| 65 | -} |
src/colab/local_settings-prod.py
| ... | ... | @@ -1,54 +0,0 @@ |
| 1 | - | |
| 2 | -import os | |
| 3 | -import json | |
| 4 | - | |
| 5 | -from custom_settings import * | |
| 6 | - | |
| 7 | -SECRETS_FILE = '/home/colab/colab/secrets.json' | |
| 8 | - | |
| 9 | -if os.path.exists(SECRETS_FILE): | |
| 10 | - secrets = json.load(file(SECRETS_FILE)) | |
| 11 | - | |
| 12 | -DEBUG = False | |
| 13 | -TEMPLATE_DEBUG = DEBUG | |
| 14 | - | |
| 15 | -ADMINS = ( | |
| 16 | - ('Name Surname', 'email@provider.com'), | |
| 17 | -) | |
| 18 | -MANAGERS = ADMINS | |
| 19 | - | |
| 20 | -COLAB_FROM_ADDRESS = '"Colab" <noreply@domain.com>' | |
| 21 | -SERVER_EMAIL = COLAB_FROM_ADDRESS | |
| 22 | -EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' | |
| 23 | -EMAIL_HOST = '' | |
| 24 | -EMAIL_PORT = 25 | |
| 25 | -EMAIL_SUBJECT_PREFIX = '' | |
| 26 | - | |
| 27 | -# Make this unique, and don't share it with anybody. | |
| 28 | -SECRET_KEY = secrets.get('SECRET_KEY') | |
| 29 | - | |
| 30 | -SITE_URL = '' | |
| 31 | -ALLOWED_HOSTS = [] | |
| 32 | - | |
| 33 | -# XMPP Server | |
| 34 | -CONVERSEJS_AUTO_REGISTER = '' | |
| 35 | - | |
| 36 | -DATABASES['default']['PASSWORD'] = secrets.get('COLAB_DB_PWD') | |
| 37 | -DATABASES['default']['HOST'] = 'localhost' | |
| 38 | - | |
| 39 | -DATABASES['trac'] = 'trac_colab' | |
| 40 | -DATABASES['trac']['PASSWORD'] = secrets.get('TRAC_DB_PWD') | |
| 41 | -DATABASES['trac']['HOST'] = 'localhost' | |
| 42 | - | |
| 43 | -HAYSTACK_CONNECTIONS['default']['URL'] = 'http://localhost:8983/solr/' | |
| 44 | - | |
| 45 | -COLAB_TRAC_URL = 'http://localhost:5000/trac/' | |
| 46 | -COLAB_GITLAB_URL = 'http://localhost:8090/gitlab/' | |
| 47 | - | |
| 48 | -CONVERSEJS_ENABLED = False | |
| 49 | - | |
| 50 | -ROBOTS_NOINDEX = False | |
| 51 | - | |
| 52 | -RAVEN_CONFIG = { | |
| 53 | - 'dsn': secrets.get('RAVEN_DSN', '') + '?timeout=30', | |
| 54 | -} |
src/colab/settings.py
| ... | ... | @@ -2,22 +2,24 @@ |
| 2 | 2 | Django settings for colab project. |
| 3 | 3 | |
| 4 | 4 | For more information on this file, see |
| 5 | -https://docs.djangoproject.com/en/dev/topics/settings/ | |
| 5 | +https://docs.djangoproject.com/en/1.7/topics/settings/ | |
| 6 | 6 | |
| 7 | 7 | For the full list of settings and their values, see |
| 8 | -https://docs.djangoproject.com/en/dev/ref/settings/ | |
| 8 | +https://docs.djangoproject.com/en/1.7/ref/settings/ | |
| 9 | 9 | """ |
| 10 | 10 | |
| 11 | 11 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) |
| 12 | 12 | import os |
| 13 | 13 | BASE_DIR = os.path.dirname(os.path.dirname(__file__)) |
| 14 | 14 | |
| 15 | +# Used for settings translation | |
| 16 | +from django.utils.translation import ugettext_lazy as _ | |
| 15 | 17 | |
| 16 | 18 | # Quick-start development settings - unsuitable for production |
| 17 | -# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/ | |
| 19 | +# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ | |
| 18 | 20 | |
| 19 | 21 | # SECURITY WARNING: keep the secret key used in production secret! |
| 20 | -SECRET_KEY = 'd%gy$gfn4z2=z414qvqouyd2h6_i8nr_m4zmlxqklu15u!8&^@' | |
| 22 | +SECRET_KEY = "{{ secret_key }}" | |
| 21 | 23 | |
| 22 | 24 | # SECURITY WARNING: don't run with debug turned on in production! |
| 23 | 25 | DEBUG = True |
| ... | ... | @@ -26,6 +28,7 @@ TEMPLATE_DEBUG = True |
| 26 | 28 | |
| 27 | 29 | ALLOWED_HOSTS = [] |
| 28 | 30 | |
| 31 | +DATABASE_ROUTERS = [] | |
| 29 | 32 | |
| 30 | 33 | # Application definition |
| 31 | 34 | |
| ... | ... | @@ -36,6 +39,35 @@ INSTALLED_APPS = ( |
| 36 | 39 | 'django.contrib.sessions', |
| 37 | 40 | 'django.contrib.messages', |
| 38 | 41 | 'django.contrib.staticfiles', |
| 42 | + | |
| 43 | + # First app to provide AUTH_USER_MODEL to others | |
| 44 | + 'accounts', | |
| 45 | + | |
| 46 | + # Not standard apps | |
| 47 | + 'raven.contrib.django.raven_compat', | |
| 48 | + 'cliauth', | |
| 49 | + 'django_mobile', | |
| 50 | + 'django_browserid', | |
| 51 | + 'conversejs', | |
| 52 | + 'haystack', | |
| 53 | + 'hitcounter', | |
| 54 | + 'i18n_model', | |
| 55 | + 'mptt', | |
| 56 | + 'dpaste', | |
| 57 | + | |
| 58 | + # Own apps | |
| 59 | + 'super_archives', | |
| 60 | + 'api', | |
| 61 | + 'rss', | |
| 62 | + 'planet', | |
| 63 | + 'search', | |
| 64 | + 'badger', | |
| 65 | + 'tz', | |
| 66 | + | |
| 67 | + # Feedzilla and deps | |
| 68 | + 'feedzilla', | |
| 69 | + 'taggit', | |
| 70 | + 'common', | |
| 39 | 71 | ) |
| 40 | 72 | |
| 41 | 73 | MIDDLEWARE_CLASSES = ( |
| ... | ... | @@ -43,6 +75,7 @@ MIDDLEWARE_CLASSES = ( |
| 43 | 75 | 'django.middleware.common.CommonMiddleware', |
| 44 | 76 | 'django.middleware.csrf.CsrfViewMiddleware', |
| 45 | 77 | 'django.contrib.auth.middleware.AuthenticationMiddleware', |
| 78 | + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', | |
| 46 | 79 | 'django.contrib.messages.middleware.MessageMiddleware', |
| 47 | 80 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', |
| 48 | 81 | ) |
| ... | ... | @@ -51,19 +84,8 @@ ROOT_URLCONF = 'colab.urls' |
| 51 | 84 | |
| 52 | 85 | WSGI_APPLICATION = 'colab.wsgi.application' |
| 53 | 86 | |
| 54 | - | |
| 55 | -# Database | |
| 56 | -# https://docs.djangoproject.com/en/dev/ref/settings/#databases | |
| 57 | - | |
| 58 | -DATABASES = { | |
| 59 | - 'default': { | |
| 60 | - 'ENGINE': 'django.db.backends.sqlite3', | |
| 61 | - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), | |
| 62 | - } | |
| 63 | -} | |
| 64 | - | |
| 65 | 87 | # Internationalization |
| 66 | -# https://docs.djangoproject.com/en/dev/topics/i18n/ | |
| 88 | +# https://docs.djangoproject.com/en/1.7/topics/i18n/ | |
| 67 | 89 | |
| 68 | 90 | LANGUAGE_CODE = 'en-us' |
| 69 | 91 | |
| ... | ... | @@ -77,9 +99,217 @@ USE_TZ = True |
| 77 | 99 | |
| 78 | 100 | |
| 79 | 101 | # Static files (CSS, JavaScript, Images) |
| 80 | -# https://docs.djangoproject.com/en/dev/howto/static-files/ | |
| 102 | +# https://docs.djangoproject.com/en/1.7/howto/static-files/ | |
| 103 | + | |
| 104 | +STATIC_ROOT = '/usr/share/nginx/colab/static/' | |
| 105 | +MEDIA_ROOT = '/usr/share/nginx/colab/media/' | |
| 81 | 106 | |
| 82 | 107 | STATIC_URL = '/static/' |
| 83 | 108 | MEDIA_URL = '/media/' |
| 84 | 109 | |
| 85 | -from custom_settings import * | |
| 110 | + | |
| 111 | +# Normally you should not import ANYTHING from Django directly | |
| 112 | +# into your settings, but ImproperlyConfigured is an exception. | |
| 113 | +from django.core.exceptions import ImproperlyConfigured | |
| 114 | + | |
| 115 | + | |
| 116 | +def get_env_setting(setting): | |
| 117 | + """ Get the environment setting or return exception """ | |
| 118 | + try: | |
| 119 | + return os.environ[setting] | |
| 120 | + except KeyError: | |
| 121 | + error_msg = "Set the %s env variable" % setting | |
| 122 | + raise ImproperlyConfigured(error_msg) | |
| 123 | + | |
| 124 | + | |
| 125 | +# Allow Django runserver to serve SVG files | |
| 126 | +# https://code.djangoproject.com/ticket/20162 | |
| 127 | +import mimetypes | |
| 128 | +mimetypes.add_type('image/svg+xml', '.svg') | |
| 129 | + | |
| 130 | +LANGUAGES = ( | |
| 131 | + ('en', _('English')), | |
| 132 | + ('pt-br', _('Portuguese')), | |
| 133 | + ('es', _('Spanish')), | |
| 134 | +) | |
| 135 | + | |
| 136 | +DJANGO_DATE_FORMAT_TO_JS = { | |
| 137 | + 'pt-br': ('pt-BR', 'dd/MM/yyyy'), | |
| 138 | + 'es': ('es', 'dd/MM/yyyy'), | |
| 139 | +} | |
| 140 | + | |
| 141 | +LANGUAGE_CODE = 'en' | |
| 142 | + | |
| 143 | +# The absolute path to the folder containing the attachments | |
| 144 | +ATTACHMENTS_FOLDER_PATH = '/mnt/trac/attachments/' | |
| 145 | + | |
| 146 | +# ORDERING_DATA receives the options to order for as it's keys and a dict as | |
| 147 | +# value, if you want to order for the last name, you can use something like: | |
| 148 | +# 'last_name': {'name': 'Last Name', 'fields': 'last_name'} inside the dict, | |
| 149 | +# you pass two major keys (name, fields) | |
| 150 | +# The major key name is the name to appear on the template | |
| 151 | +# the major key fields it show receive the name of the fields to order for in | |
| 152 | +# the indexes | |
| 153 | + | |
| 154 | +ORDERING_DATA = { | |
| 155 | + 'latest': { | |
| 156 | + 'name': _(u'Recent activity'), | |
| 157 | + 'fields': ('-modified', '-created'), | |
| 158 | + }, | |
| 159 | + 'hottest': { | |
| 160 | + 'name': _(u'Relevance'), | |
| 161 | + 'fields': None, | |
| 162 | + }, | |
| 163 | +} | |
| 164 | + | |
| 165 | + | |
| 166 | +# File type groupings is a tuple of tuples containg what it should filter, | |
| 167 | +# how it should be displayed, and a tuple of which mimetypes it includes | |
| 168 | +FILE_TYPE_GROUPINGS = ( | |
| 169 | + ('document', _(u'Document'), | |
| 170 | + ('doc', 'docx', 'odt', 'otx', 'dotx', 'pdf', 'ott')), | |
| 171 | + ('presentation', _(u'Presentation'), ('ppt', 'pptx', 'odp')), | |
| 172 | + ('text', _(u'Text'), ('txt', 'po', 'conf', 'log')), | |
| 173 | + ('code', _(u'Code'), | |
| 174 | + ('py', 'php', 'js', 'sql', 'sh', 'patch', 'diff', 'html', '')), | |
| 175 | + ('compressed', _(u'Compressed'), ('rar', 'zip', 'gz', 'tgz', 'bz2')), | |
| 176 | + ('image', _(u'Image'), | |
| 177 | + ('jpg', 'jpeg', 'png', 'tiff', 'gif', 'svg', 'psd', 'planner', 'cdr')), | |
| 178 | + ('spreadsheet', _(u'Spreadsheet'), | |
| 179 | + ('ods', 'xls', 'xlsx', 'xslt', 'csv')), | |
| 180 | +) | |
| 181 | + | |
| 182 | +# the following variable define how many characters should be shown before | |
| 183 | +# a highlighted word, to make sure that the highlighted word will appear | |
| 184 | +HIGHLIGHT_NUM_CHARS_BEFORE_MATCH = 30 | |
| 185 | +HAYSTACK_CUSTOM_HIGHLIGHTER = 'colab.utils.highlighting.ColabHighlighter' | |
| 186 | + | |
| 187 | +HAYSTACK_CONNECTIONS = { | |
| 188 | + 'default': { | |
| 189 | + 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', | |
| 190 | + 'URL': 'http://localhost:8983/solr/', | |
| 191 | + } | |
| 192 | +} | |
| 193 | + | |
| 194 | +CACHES = { | |
| 195 | + 'default': { | |
| 196 | + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', | |
| 197 | + 'LOCATION': '127.0.0.1:11211', | |
| 198 | + } | |
| 199 | +} | |
| 200 | + | |
| 201 | +DATABASE_ROUTERS = [] | |
| 202 | + | |
| 203 | + | |
| 204 | +TEMPLATE_CONTEXT_PROCESSORS = ( | |
| 205 | + 'django.contrib.auth.context_processors.auth', | |
| 206 | + 'django.core.context_processors.debug', | |
| 207 | + 'django.core.context_processors.i18n', | |
| 208 | + 'django.core.context_processors.media', | |
| 209 | + 'django.core.context_processors.static', | |
| 210 | + 'django.core.context_processors.tz', | |
| 211 | + 'django.contrib.messages.context_processors.messages', | |
| 212 | + 'django.core.context_processors.request', | |
| 213 | + 'django_mobile.context_processors.is_mobile', | |
| 214 | + 'super_archives.context_processors.mailarchive', | |
| 215 | + 'proxy.context_processors.proxied_apps', | |
| 216 | + 'home.context_processors.robots', | |
| 217 | +) | |
| 218 | + | |
| 219 | +MIDDLEWARE_CLASSES = ( | |
| 220 | + 'django.contrib.sessions.middleware.SessionMiddleware', | |
| 221 | + 'django.middleware.locale.LocaleMiddleware', | |
| 222 | + 'django.middleware.common.CommonMiddleware', | |
| 223 | + 'django.middleware.csrf.CsrfViewMiddleware', | |
| 224 | + 'django.contrib.auth.middleware.AuthenticationMiddleware', | |
| 225 | + 'django.contrib.messages.middleware.MessageMiddleware', | |
| 226 | + 'django.middleware.clickjacking.XFrameOptionsMiddleware', | |
| 227 | + 'django_mobile.middleware.MobileDetectionMiddleware', | |
| 228 | + 'django_mobile.middleware.SetFlavourMiddleware', | |
| 229 | + 'tz.middleware.TimezoneMiddleware', | |
| 230 | +) | |
| 231 | + | |
| 232 | +# Add the django_browserid authentication backend. | |
| 233 | +AUTHENTICATION_BACKENDS = ( | |
| 234 | + 'django.contrib.auth.backends.ModelBackend', | |
| 235 | + 'accounts.auth.ColabBrowserIDBackend', | |
| 236 | +) | |
| 237 | + | |
| 238 | +STATICFILES_DIRS = ( | |
| 239 | + os.path.join(BASE_DIR, 'static'), | |
| 240 | +) | |
| 241 | + | |
| 242 | +TEMPLATE_DIRS = ( | |
| 243 | + os.path.join(BASE_DIR, 'templates'), | |
| 244 | +) | |
| 245 | + | |
| 246 | +LOCALE_PATHS = ( | |
| 247 | + os.path.join(BASE_DIR, 'locale'), | |
| 248 | +) | |
| 249 | + | |
| 250 | +AUTH_USER_MODEL = 'accounts.User' | |
| 251 | + | |
| 252 | +from django.contrib.messages import constants as messages | |
| 253 | +MESSAGE_TAGS = { | |
| 254 | + messages.INFO: 'alert-info', | |
| 255 | + messages.SUCCESS: 'alert-success', | |
| 256 | + messages.WARNING: 'alert-warning', | |
| 257 | + messages.ERROR: 'alert-danger', | |
| 258 | +} | |
| 259 | + | |
| 260 | +### Feedzilla (planet) | |
| 261 | +from feedzilla.settings import * | |
| 262 | +FEEDZILLA_PAGE_SIZE = 5 | |
| 263 | +FEEDZILLA_SITE_TITLE = _(u'Planet Colab') | |
| 264 | +FEEDZILLA_SITE_DESCRIPTION = _(u'Colab blog aggregator') | |
| 265 | + | |
| 266 | +### Mailman API settings | |
| 267 | +MAILMAN_API_URL = 'http://localhost:9000' | |
| 268 | + | |
| 269 | +### BrowserID / Persona | |
| 270 | +SITE_URL = 'localhost:8000' | |
| 271 | +BROWSERID_AUDIENCES = [SITE_URL, SITE_URL.replace('https', 'http')] | |
| 272 | + | |
| 273 | + | |
| 274 | +LOGIN_URL = '/' | |
| 275 | +LOGIN_REDIRECT_URL = '/' | |
| 276 | +LOGIN_REDIRECT_URL_FAILURE = '/' | |
| 277 | +LOGOUT_REDIRECT_URL = '/user/logout' | |
| 278 | +BROWSERID_CREATE_USER = False | |
| 279 | + | |
| 280 | +REVPROXY_ADD_REMOTE_USER = True | |
| 281 | + | |
| 282 | +## Converse.js settings | |
| 283 | +# This URL must use SSL in order to keep chat sessions secure | |
| 284 | +CONVERSEJS_BOSH_SERVICE_URL = SITE_URL + '/http-bind' | |
| 285 | + | |
| 286 | +CONVERSEJS_ALLOW_CONTACT_REQUESTS = False | |
| 287 | +CONVERSEJS_SHOW_ONLY_ONLINE_USERS = True | |
| 288 | + | |
| 289 | + | |
| 290 | +# Tastypie settings | |
| 291 | +TASTYPIE_DEFAULT_FORMATS = ['json', ] | |
| 292 | + | |
| 293 | +# Dpaste settings | |
| 294 | +DPASTE_EXPIRE_CHOICES = ( | |
| 295 | + ('onetime', _(u'One Time Snippet')), | |
| 296 | + (3600, _(u'In one hour')), | |
| 297 | + (3600 * 24 * 7, _(u'In one week')), | |
| 298 | + (3600 * 24 * 30, _(u'In one month')), | |
| 299 | + ('never', _(u'Never')), | |
| 300 | +) | |
| 301 | +DPASTE_EXPIRE_DEFAULT = DPASTE_EXPIRE_CHOICES[4][0] | |
| 302 | +DPASTE_DEFAULT_GIST_DESCRIPTION = 'Gist created from Colab DPaste' | |
| 303 | +DPASTE_DEFAULT_GIST_NAME = 'colab_paste' | |
| 304 | +DPASTE_LEXER_DEFAULT = 'text' | |
| 305 | + | |
| 306 | +from .utils.conf import load_yaml_settings | |
| 307 | +locals().update(load_yaml_settings()) | |
| 308 | + | |
| 309 | +if RAVEN_DSN: | |
| 310 | + RAVEN_CONFIG = { | |
| 311 | + 'dsn': RAVEN_DSN + '?timeout=30', | |
| 312 | + } | |
| 313 | + | |
| 314 | +for app_label in PROXIED_APPS.keys(): | |
| 315 | + INSTALLED_APPS += ('proxy.{}'.format(app_label),) | ... | ... |