Matteo Scandolo | d2044a4 | 2017-08-07 16:08:28 -0700 | [diff] [blame] | 1 | # Copyright 2017-present Open Networking Foundation |
| 2 | # |
| 3 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | # you may not use this file except in compliance with the License. |
| 5 | # You may obtain a copy of the License at |
| 6 | # |
| 7 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | # |
| 9 | # Unless required by applicable law or agreed to in writing, software |
| 10 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | # See the License for the specific language governing permissions and |
| 13 | # limitations under the License. |
| 14 | |
| 15 | |
Scott Baker | b9396c2 | 2014-06-16 13:58:21 -0700 | [diff] [blame] | 16 | from django import VERSION as DJANGO_VERSION |
David K. Bainbridge | ab4a2eb | 2015-12-03 11:49:01 -0800 | [diff] [blame] | 17 | import os |
Zack Williams | c4a3130 | 2016-04-27 17:44:29 -0700 | [diff] [blame] | 18 | import warnings |
Siobhan Tully | bfd11dc | 2013-09-03 12:59:24 -0400 | [diff] [blame] | 19 | |
Matteo Scandolo | 6bc017c | 2017-05-25 18:37:42 -0700 | [diff] [blame] | 20 | # Initializing xosconfig module |
| 21 | from xosconfig import Config |
Scott Baker | b06e3e0 | 2017-12-12 11:05:53 -0800 | [diff] [blame] | 22 | from xosconfig.config import INITIALIZED as CONFIG_INITIALIZED |
| 23 | |
| 24 | # this really shouldn't be called from settings.py. |
| 25 | if not CONFIG_INITIALIZED: |
| 26 | Config.init() |
Scott Baker | 8a867eb | 2014-04-22 13:50:26 -0700 | [diff] [blame] | 27 | |
| 28 | GEOIP_PATH = "/usr/share/GeoIP" |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 29 | XOS_DIR = Config.get("xos_dir") |
David K. Bainbridge | ab4a2eb | 2015-12-03 11:49:01 -0800 | [diff] [blame] | 30 | |
Matteo Scandolo | 6ea6a7d | 2016-02-29 15:46:55 -0800 | [diff] [blame] | 31 | DEBUG = True |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 32 | TEMPLATE_DEBUG = DEBUG |
| 33 | |
Matteo Scandolo | ecf088a | 2016-10-20 10:25:34 +0200 | [diff] [blame] | 34 | # Enable CORS requests, needed to enable layered XOS |
| 35 | CORS_ORIGIN_ALLOW_ALL = True |
| 36 | |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 37 | ADMINS = ( |
| 38 | # ('Your Name', 'your_email@example.com'), |
| 39 | ) |
| 40 | |
Matteo Scandolo | 6ea6a7d | 2016-02-29 15:46:55 -0800 | [diff] [blame] | 41 | # LOGIN_REDIRECT_URL = '/admin/core/user' |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 42 | LOGIN_REDIRECT_URL = "/admin/loggedin/" |
Siobhan Tully | cf04fb6 | 2014-01-11 11:25:57 -0500 | [diff] [blame] | 43 | |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 44 | MANAGERS = ADMINS |
| 45 | |
Matteo Scandolo | 57fdb4b | 2019-02-06 18:27:56 -0800 | [diff] [blame] | 46 | DB = { |
| 47 | "ENGINE": "django.db.backends.postgresql_psycopg2", |
| 48 | "NAME": Config.get("database.name"), |
| 49 | "USER": Config.get("database.username"), |
| 50 | "PASSWORD": Config.get("database.password"), |
| 51 | "HOST": "xos-db", |
| 52 | "PORT": 5432, |
| 53 | } |
| 54 | |
| 55 | if "MIGRATIONS" in os.environ and os.environ["MIGRATIONS"] == "true": |
| 56 | DB = { |
| 57 | 'ENGINE': 'django.db.backends.dummy', |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 58 | } |
Matteo Scandolo | 57fdb4b | 2019-02-06 18:27:56 -0800 | [diff] [blame] | 59 | |
| 60 | DATABASES = { |
| 61 | 'default': DB |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 62 | } |
| 63 | |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 64 | AUTH_USER_MODEL = "core.User" |
Siobhan Tully | 30fd429 | 2013-05-10 08:59:56 -0400 | [diff] [blame] | 65 | |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 66 | # Hosts/domain names that are valid for this site; required if DEBUG is False |
| 67 | # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts |
Scott Baker | bb88544 | 2015-02-05 09:19:25 -0800 | [diff] [blame] | 68 | ALLOWED_HOSTS = ["*"] |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 69 | |
| 70 | # Local time zone for this installation. Choices can be found here: |
| 71 | # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name |
| 72 | # although not all choices may be available on all operating systems. |
| 73 | # In a Windows environment this must be set to your system time zone. |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 74 | TIME_ZONE = "America/New_York" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 75 | |
Zack Williams | c4a3130 | 2016-04-27 17:44:29 -0700 | [diff] [blame] | 76 | # Verbose warnings when a naive datetime is used, gives a traceback |
| 77 | # from: https://docs.djangoproject.com/en/1.9/topics/i18n/timezones/#code |
| 78 | warnings.filterwarnings( |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 79 | "error", |
| 80 | r"DateTimeField .* received a naive datetime", |
| 81 | RuntimeWarning, |
| 82 | r"django\.db\.models\.fields", |
| 83 | ) |
Zack Williams | c4a3130 | 2016-04-27 17:44:29 -0700 | [diff] [blame] | 84 | |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 85 | # Language code for this installation. All choices can be found here: |
| 86 | # http://www.i18nguy.com/unicode/language-identifiers.html |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 87 | LANGUAGE_CODE = "en-us" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 88 | |
| 89 | SITE_ID = 1 |
| 90 | |
| 91 | # If you set this to False, Django will make some optimizations so as not |
| 92 | # to load the internationalization machinery. |
| 93 | USE_I18N = True |
| 94 | |
| 95 | # If you set this to False, Django will not format dates, numbers and |
| 96 | # calendars according to the current locale. |
| 97 | USE_L10N = True |
| 98 | |
| 99 | # If you set this to False, Django will not use timezone-aware datetimes. |
| 100 | USE_TZ = True |
| 101 | |
| 102 | # Absolute filesystem path to the directory that will hold user-uploaded files. |
| 103 | # Example: "/var/www/example.com/media/" |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 104 | MEDIA_ROOT = "/var/www/html/files/" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 105 | |
| 106 | # URL that handles the media served from MEDIA_ROOT. Make sure to use a |
| 107 | # trailing slash. |
| 108 | # Examples: "http://example.com/media/", "http://media.example.com/" |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 109 | MEDIA_URL = "/files/" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 110 | |
| 111 | # Absolute path to the directory static files should be collected to. |
| 112 | # Don't put anything in this directory yourself; store your static files |
| 113 | # in apps' "static/" subdirectories and in STATICFILES_DIRS. |
| 114 | # Example: "/var/www/example.com/static/" |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 115 | STATIC_ROOT = "" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 116 | |
| 117 | # URL prefix for static files. |
| 118 | # Example: "http://example.com/static/", "http://static.example.com/" |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 119 | STATIC_URL = "/static/" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 120 | |
| 121 | # Additional locations of static files |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 122 | STATICFILES_DIRS = (XOS_DIR + "/core/static/", XOS_DIR + "/core/xoslib/static/") |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 123 | |
| 124 | # List of finder classes that know how to find static files in |
| 125 | # various locations. |
| 126 | STATICFILES_FINDERS = ( |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 127 | "django.contrib.staticfiles.finders.FileSystemFinder", |
| 128 | "django.contrib.staticfiles.finders.AppDirectoriesFinder", |
| 129 | # 'django.contrib.staticfiles.finders.DefaultStorageFinder', |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 130 | ) |
| 131 | |
| 132 | # Make this unique, and don't share it with anybody. |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 133 | SECRET_KEY = "i0=a)c7_#2)5m%k_fu#%53xap$tlqc+#&z5as+bl7&)(@be_f9" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 134 | |
| 135 | # List of callables that know how to import templates from various sources. |
| 136 | TEMPLATE_LOADERS = ( |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 137 | "django.template.loaders.filesystem.Loader", |
| 138 | "django.template.loaders.app_directories.Loader", |
| 139 | # 'django.template.loaders.eggs.Loader', |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 140 | ) |
| 141 | |
| 142 | MIDDLEWARE_CLASSES = ( |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 143 | "django.middleware.common.CommonMiddleware", |
| 144 | "django.contrib.sessions.middleware.SessionMiddleware", |
| 145 | "django.middleware.csrf.CsrfViewMiddleware", |
| 146 | "django.contrib.auth.middleware.AuthenticationMiddleware", |
| 147 | "django.contrib.messages.middleware.MessageMiddleware", |
| 148 | "core.middleware.GlobalRequestMiddleware", |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 149 | # Uncomment the next line for simple clickjacking protection: |
| 150 | # 'django.middleware.clickjacking.XFrameOptionsMiddleware', |
| 151 | ) |
| 152 | |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 153 | ROOT_URLCONF = "xos.urls" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 154 | |
| 155 | # Python dotted path to the WSGI application used by Django's runserver. |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 156 | WSGI_APPLICATION = "xos.wsgi.application" |
Srikanth Vavilapalli | 40fd986 | 2015-10-27 00:15:58 -0400 | [diff] [blame] | 157 | # Default: 'csrftoken' |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 158 | CSRF_COOKIE_NAME = "xoscsrftoken" |
Srikanth Vavilapalli | 40fd986 | 2015-10-27 00:15:58 -0400 | [diff] [blame] | 159 | # Default: 'django_language' |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 160 | LANGUAGE_COOKIE_NAME = "xos_django_language" |
Srikanth Vavilapalli | 40fd986 | 2015-10-27 00:15:58 -0400 | [diff] [blame] | 161 | # Default: 'sessionid' |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 162 | SESSION_COOKIE_NAME = "xossessionid" |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 163 | |
| 164 | TEMPLATE_DIRS = ( |
| 165 | # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". |
| 166 | # Always use forward slashes, even on Windows. |
| 167 | # Don't forget to use absolute paths, not relative paths. |
Scott Baker | b7a573d | 2015-02-04 16:48:01 -0800 | [diff] [blame] | 168 | XOS_DIR + "/templates", |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 169 | # XOS_DIR + "/core/xoslib/templates", |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 170 | ) |
| 171 | |
| 172 | INSTALLED_APPS = ( |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 173 | "django.contrib.auth", |
| 174 | "django.contrib.contenttypes", |
| 175 | "django.contrib.sessions", |
| 176 | "django.contrib.messages", |
| 177 | "django_extensions", |
| 178 | "core", |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 179 | ) |
| 180 | |
Scott Baker | 9c6191e | 2016-06-01 23:32:25 -0700 | [diff] [blame] | 181 | # add services that were configured by xosbuilder to INSTALLED_APPS |
Scott Baker | 4310c38 | 2016-06-07 17:54:43 -0700 | [diff] [blame] | 182 | if os.path.exists("/opt/xos/xos/xosbuilder_app_list"): |
| 183 | for line in file("/opt/xos/xos/xosbuilder_app_list").readlines(): |
Scott Baker | 9c6191e | 2016-06-01 23:32:25 -0700 | [diff] [blame] | 184 | line = line.strip() |
| 185 | if line: |
| 186 | INSTALLED_APPS = list(INSTALLED_APPS) + [line] |
| 187 | |
Matteo Scandolo | 57fdb4b | 2019-02-06 18:27:56 -0800 | [diff] [blame] | 188 | # add services that needs to be migrated to INSTALLED_APPS |
| 189 | # this is used by xos-migrate.py |
| 190 | if "INSTALLED_APPS" in os.environ: |
| 191 | apps = os.environ["INSTALLED_APPS"].split(',') |
| 192 | for app in apps: |
| 193 | INSTALLED_APPS = list(INSTALLED_APPS) + [app] |
| 194 | |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 195 | # A sample logging configuration. The only tangible logging |
| 196 | # performed by this configuration is to send an email to |
| 197 | # the site admins on every HTTP 500 error when DEBUG=False. |
| 198 | # See http://docs.djangoproject.com/en/dev/topics/logging for |
| 199 | # more details on how to customize your logging configuration. |
Matteo Scandolo | 57fdb4b | 2019-02-06 18:27:56 -0800 | [diff] [blame] | 200 | LOG_FILE = "/var/log/django_debug.log" |
| 201 | if "LOG_FILE" in os.environ: |
| 202 | LOG_FILE = os.environ["LOG_FILE"] |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 203 | LOGGING = { |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 204 | "version": 1, |
| 205 | "disable_existing_loggers": False, |
| 206 | "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}}, |
| 207 | "handlers": { |
| 208 | "file": { |
| 209 | "level": "DEBUG", |
| 210 | "class": "logging.FileHandler", |
Matteo Scandolo | 57fdb4b | 2019-02-06 18:27:56 -0800 | [diff] [blame] | 211 | "filename": LOG_FILE, |
Zack Williams | 9637972 | 2016-02-24 09:59:37 -0700 | [diff] [blame] | 212 | }, |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 213 | "mail_admins": { |
| 214 | "level": "ERROR", |
| 215 | "filters": ["require_debug_false"], |
| 216 | "class": "django.utils.log.AdminEmailHandler", |
Zack Williams | 9637972 | 2016-02-24 09:59:37 -0700 | [diff] [blame] | 217 | }, |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 218 | }, |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 219 | "loggers": { |
| 220 | "django": {"handlers": ["file"], "level": "DEBUG", "propagate": True}, |
| 221 | "django.request": { |
| 222 | "handlers": ["mail_admins"], |
| 223 | "level": "ERROR", |
| 224 | "propagate": True, |
Zack Williams | 9637972 | 2016-02-24 09:59:37 -0700 | [diff] [blame] | 225 | }, |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 226 | "django.db.backends": {"level": "WARNING"}, |
| 227 | }, |
Tony Mack | 7130ac3 | 2013-03-22 21:58:00 -0400 | [diff] [blame] | 228 | } |
Scott Baker | c40941b | 2014-04-25 12:20:47 -0700 | [diff] [blame] | 229 | |
Matteo Scandolo | 6bc017c | 2017-05-25 18:37:42 -0700 | [diff] [blame] | 230 | XOS_BRANDING_NAME = "OpenCloud" |
| 231 | XOS_BRANDING_CSS = None |
| 232 | XOS_BRANDING_ICON = "/static/logo.png" |
| 233 | XOS_BRANDING_FAVICON = "/static/favicon.png" |
| 234 | XOS_BRANDING_BG = "/static/bg.png" |
Scott Baker | 0e439b1 | 2015-03-09 11:11:09 -0700 | [diff] [blame] | 235 | |
Matteo Scandolo | 6bc017c | 2017-05-25 18:37:42 -0700 | [diff] [blame] | 236 | DISABLE_MINIDASHBOARD = False |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 237 | ENCRYPTED_FIELDS_KEYDIR = XOS_DIR + "/private_keys" |
| 238 | ENCRYPTED_FIELD_MODE = "ENCRYPT" |
Scott Baker | 370cdd5 | 2014-09-12 12:38:34 -0700 | [diff] [blame] | 239 | |
Matteo Scandolo | 6bc017c | 2017-05-25 18:37:42 -0700 | [diff] [blame] | 240 | STATISTICS_DRIVER = "statistics_driver" |
Scott Baker | 169c723 | 2015-01-03 16:51:01 -0800 | [diff] [blame] | 241 | |
Scott Baker | 0e439b1 | 2015-03-09 11:11:09 -0700 | [diff] [blame] | 242 | # prevents warnings on django 1.7 |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 243 | TEST_RUNNER = "django.test.runner.DiscoverRunner" |
Zack Williams | 2c336d8 | 2016-06-29 09:25:49 -0700 | [diff] [blame] | 244 | |
| 245 | # API key for Google Maps, created by zdw on 2016-06-29. Testing only, not for production |
Zack Williams | 045b63d | 2019-01-22 16:30:57 -0700 | [diff] [blame] | 246 | GEOPOSITION_GOOGLE_MAPS_API_KEY = "AIzaSyBWAHP9mvLqWLRkVqK8o5wMskaIe9w7DaM" |