settings.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import os
  2. import socket
  3. from django.contrib.messages import constants as messages
  4. from django.core.exceptions import ImproperlyConfigured
  5. try:
  6. import configuration
  7. except ImportError:
  8. raise ImproperlyConfigured("Configuration file is not present. Please define netbox/netbox/configuration.py per "
  9. "the documentation.")
  10. VERSION = '1.1.0'
  11. # Import local configuration
  12. for setting in ['ALLOWED_HOSTS', 'DATABASE', 'SECRET_KEY']:
  13. try:
  14. globals()[setting] = getattr(configuration, setting)
  15. except AttributeError:
  16. raise ImproperlyConfigured("Mandatory setting {} is missing from configuration.py. Please define it per the "
  17. "documentation.".format(setting))
  18. # Default configurations
  19. ADMINS = getattr(configuration, 'ADMINS', [])
  20. DEBUG = getattr(configuration, 'DEBUG', False)
  21. EMAIL = getattr(configuration, 'EMAIL', {})
  22. LOGIN_REQUIRED = getattr(configuration, 'LOGIN_REQUIRED', False)
  23. MAINTENANCE_MODE = getattr(configuration, 'MAINTENANCE_MODE', False)
  24. PAGINATE_COUNT = getattr(configuration, 'PAGINATE_COUNT', 50)
  25. NETBOX_USERNAME = getattr(configuration, 'NETBOX_USERNAME', '')
  26. NETBOX_PASSWORD = getattr(configuration, 'NETBOX_PASSWORD', '')
  27. TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC')
  28. DATE_FORMAT = getattr(configuration, 'DATE_FORMAT', 'N j, Y')
  29. SHORT_DATE_FORMAT = getattr(configuration, 'SHORT_DATE_FORMAT', 'Y-m-d')
  30. TIME_FORMAT = getattr(configuration, 'TIME_FORMAT', 'g:i a')
  31. SHORT_TIME_FORMAT = getattr(configuration, 'SHORT_TIME_FORMAT', 'H:i:s')
  32. DATETIME_FORMAT = getattr(configuration, 'DATETIME_FORMAT', 'N j, Y g:i a')
  33. SHORT_DATETIME_FORMAT = getattr(configuration, 'SHORT_DATETIME_FORMAT', 'Y-m-d H:i')
  34. CSRF_TRUSTED_ORIGINS = ALLOWED_HOSTS
  35. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  36. # Database
  37. configuration.DATABASE.update({'ENGINE': 'django.db.backends.postgresql'})
  38. DATABASES = {
  39. 'default': configuration.DATABASE,
  40. }
  41. # Email
  42. EMAIL_HOST = EMAIL.get('SERVER')
  43. EMAIL_PORT = EMAIL.get('PORT', 25)
  44. EMAIL_HOST_USER = EMAIL.get('USERNAME')
  45. EMAIL_HOST_PASSWORD = EMAIL.get('PASSWORD')
  46. EMAIL_TIMEOUT = EMAIL.get('TIMEOUT', 10)
  47. SERVER_EMAIL = EMAIL.get('FROM_EMAIL')
  48. EMAIL_SUBJECT_PREFIX = '[NetBox] '
  49. # Installed applications
  50. INSTALLED_APPS = (
  51. 'django.contrib.admin',
  52. 'django.contrib.auth',
  53. 'django.contrib.contenttypes',
  54. 'django.contrib.sessions',
  55. 'django.contrib.messages',
  56. 'django.contrib.staticfiles',
  57. 'django.contrib.humanize',
  58. 'debug_toolbar',
  59. 'django_tables2',
  60. 'rest_framework',
  61. 'rest_framework_swagger',
  62. 'circuits',
  63. 'dcim',
  64. 'ipam',
  65. 'extras',
  66. 'secrets',
  67. 'users',
  68. 'utilities',
  69. )
  70. # Middleware
  71. MIDDLEWARE_CLASSES = (
  72. 'django.contrib.sessions.middleware.SessionMiddleware',
  73. 'django.middleware.common.CommonMiddleware',
  74. 'django.middleware.csrf.CsrfViewMiddleware',
  75. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  76. 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  77. 'django.contrib.messages.middleware.MessageMiddleware',
  78. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  79. 'django.middleware.security.SecurityMiddleware',
  80. 'utilities.middleware.LoginRequiredMiddleware',
  81. )
  82. ROOT_URLCONF = 'netbox.urls'
  83. TEMPLATES = [
  84. {
  85. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  86. 'DIRS': [BASE_DIR + '/templates/'],
  87. 'APP_DIRS': True,
  88. 'OPTIONS': {
  89. 'context_processors': [
  90. 'django.template.context_processors.debug',
  91. 'django.template.context_processors.request',
  92. 'django.contrib.auth.context_processors.auth',
  93. 'django.contrib.messages.context_processors.messages',
  94. 'utilities.context_processors.settings',
  95. 'django.core.context_processors.request',
  96. ],
  97. },
  98. },
  99. ]
  100. # WSGI
  101. WSGI_APPLICATION = 'netbox.wsgi.application'
  102. SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
  103. USE_X_FORWARDED_HOST = True
  104. # Internationalization
  105. # https://docs.djangoproject.com/en/1.8/topics/i18n/
  106. LANGUAGE_CODE = 'en-us'
  107. USE_I18N = True
  108. USE_TZ = True
  109. # Static files (CSS, JavaScript, Images)
  110. # https://docs.djangoproject.com/en/1.8/howto/static-files/
  111. STATIC_ROOT = BASE_DIR + '/static/'
  112. STATIC_URL = '/static/'
  113. STATICFILES_DIRS = (
  114. os.path.join(BASE_DIR, "project-static"),
  115. )
  116. # Messages
  117. MESSAGE_TAGS = {
  118. messages.ERROR: 'danger',
  119. }
  120. # Authentication URLs
  121. LOGIN_URL = '/login/'
  122. LOGIN_REDIRECT_URL = '/'
  123. LOGOUT_URL = '/logout/'
  124. # Secrets
  125. SECRETS_MIN_PUBKEY_SIZE = 2048
  126. # Django REST framework
  127. REST_FRAMEWORK = {
  128. 'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',)
  129. }
  130. # Swagger settings (API docs)
  131. SWAGGER_SETTINGS = {
  132. 'base_path': '{}/api/docs'.format(ALLOWED_HOSTS[0]),
  133. }
  134. try:
  135. HOSTNAME = socket.gethostname()
  136. except:
  137. HOSTNAME = 'localhost'