Commit 2c7cd89992d4f6ce93aec561175faf86de35389c

Authored by Sergio Oliveira
1 parent 3dbf38eb

One settings.py to rule them all!

src/colab/colab.template.yaml 0 → 100644
@@ -0,0 +1,53 @@ @@ -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,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,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,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,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,22 +2,24 @@
2 Django settings for colab project. 2 Django settings for colab project.
3 3
4 For more information on this file, see 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 For the full list of settings and their values, see 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 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 11 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
12 import os 12 import os
13 BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 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 # Quick-start development settings - unsuitable for production 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 # SECURITY WARNING: keep the secret key used in production secret! 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 # SECURITY WARNING: don't run with debug turned on in production! 24 # SECURITY WARNING: don't run with debug turned on in production!
23 DEBUG = True 25 DEBUG = True
@@ -26,6 +28,7 @@ TEMPLATE_DEBUG = True @@ -26,6 +28,7 @@ TEMPLATE_DEBUG = True
26 28
27 ALLOWED_HOSTS = [] 29 ALLOWED_HOSTS = []
28 30
  31 +DATABASE_ROUTERS = []
29 32
30 # Application definition 33 # Application definition
31 34
@@ -36,6 +39,35 @@ INSTALLED_APPS = ( @@ -36,6 +39,35 @@ INSTALLED_APPS = (
36 'django.contrib.sessions', 39 'django.contrib.sessions',
37 'django.contrib.messages', 40 'django.contrib.messages',
38 'django.contrib.staticfiles', 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 MIDDLEWARE_CLASSES = ( 73 MIDDLEWARE_CLASSES = (
@@ -43,6 +75,7 @@ MIDDLEWARE_CLASSES = ( @@ -43,6 +75,7 @@ MIDDLEWARE_CLASSES = (
43 'django.middleware.common.CommonMiddleware', 75 'django.middleware.common.CommonMiddleware',
44 'django.middleware.csrf.CsrfViewMiddleware', 76 'django.middleware.csrf.CsrfViewMiddleware',
45 'django.contrib.auth.middleware.AuthenticationMiddleware', 77 'django.contrib.auth.middleware.AuthenticationMiddleware',
  78 + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
46 'django.contrib.messages.middleware.MessageMiddleware', 79 'django.contrib.messages.middleware.MessageMiddleware',
47 'django.middleware.clickjacking.XFrameOptionsMiddleware', 80 'django.middleware.clickjacking.XFrameOptionsMiddleware',
48 ) 81 )
@@ -51,19 +84,8 @@ ROOT_URLCONF = &#39;colab.urls&#39; @@ -51,19 +84,8 @@ ROOT_URLCONF = &#39;colab.urls&#39;
51 84
52 WSGI_APPLICATION = 'colab.wsgi.application' 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 # Internationalization 87 # Internationalization
66 -# https://docs.djangoproject.com/en/dev/topics/i18n/ 88 +# https://docs.djangoproject.com/en/1.7/topics/i18n/
67 89
68 LANGUAGE_CODE = 'en-us' 90 LANGUAGE_CODE = 'en-us'
69 91
@@ -77,9 +99,217 @@ USE_TZ = True @@ -77,9 +99,217 @@ USE_TZ = True
77 99
78 100
79 # Static files (CSS, JavaScript, Images) 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 STATIC_URL = '/static/' 107 STATIC_URL = '/static/'
83 MEDIA_URL = '/media/' 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),)