settings.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. __package__ = 'archivebox.core'
  2. import os
  3. import sys
  4. from pathlib import Path
  5. from django.utils.crypto import get_random_string
  6. from ..config import ( # noqa: F401
  7. DEBUG,
  8. SECRET_KEY,
  9. ALLOWED_HOSTS,
  10. PACKAGE_DIR,
  11. ACTIVE_THEME,
  12. TEMPLATES_DIR_NAME,
  13. SQL_INDEX_FILENAME,
  14. OUTPUT_DIR,
  15. )
  16. IS_MIGRATING = 'makemigrations' in sys.argv[:3] or 'migrate' in sys.argv[:3]
  17. IS_TESTING = 'test' in sys.argv[:3] or 'PYTEST_CURRENT_TEST' in os.environ
  18. IS_SHELL = 'shell' in sys.argv[:3] or 'shell_plus' in sys.argv[:3]
  19. ################################################################################
  20. ### Django Core Settings
  21. ################################################################################
  22. WSGI_APPLICATION = 'core.wsgi.application'
  23. ROOT_URLCONF = 'core.urls'
  24. LOGIN_URL = '/accounts/login/'
  25. LOGOUT_REDIRECT_URL = '/'
  26. PASSWORD_RESET_URL = '/accounts/password_reset/'
  27. APPEND_SLASH = True
  28. INSTALLED_APPS = [
  29. 'django.contrib.auth',
  30. 'django.contrib.contenttypes',
  31. 'django.contrib.sessions',
  32. 'django.contrib.messages',
  33. 'django.contrib.staticfiles',
  34. 'django.contrib.admin',
  35. 'core',
  36. 'django_extensions',
  37. ]
  38. MIDDLEWARE = [
  39. 'django.middleware.security.SecurityMiddleware',
  40. 'django.contrib.sessions.middleware.SessionMiddleware',
  41. 'django.middleware.common.CommonMiddleware',
  42. 'django.middleware.csrf.CsrfViewMiddleware',
  43. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  44. 'django.contrib.messages.middleware.MessageMiddleware',
  45. ]
  46. AUTHENTICATION_BACKENDS = [
  47. 'django.contrib.auth.backends.ModelBackend',
  48. ]
  49. ################################################################################
  50. ### Staticfile and Template Settings
  51. ################################################################################
  52. STATIC_URL = '/static/'
  53. STATICFILES_DIRS = [
  54. str(Path(PACKAGE_DIR) / TEMPLATES_DIR_NAME / ACTIVE_THEME / 'static'),
  55. str(Path(PACKAGE_DIR) / TEMPLATES_DIR_NAME / 'default' / 'static'),
  56. ]
  57. TEMPLATE_DIRS = [
  58. str(Path(PACKAGE_DIR) / TEMPLATES_DIR_NAME / ACTIVE_THEME),
  59. str(Path(PACKAGE_DIR) / TEMPLATES_DIR_NAME / 'default'),
  60. str(Path(PACKAGE_DIR) / TEMPLATES_DIR_NAME),
  61. ]
  62. TEMPLATES = [
  63. {
  64. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  65. 'DIRS': TEMPLATE_DIRS,
  66. 'APP_DIRS': True,
  67. 'OPTIONS': {
  68. 'context_processors': [
  69. 'django.template.context_processors.debug',
  70. 'django.template.context_processors.request',
  71. 'django.contrib.auth.context_processors.auth',
  72. 'django.contrib.messages.context_processors.messages',
  73. ],
  74. },
  75. },
  76. ]
  77. ################################################################################
  78. ### External Service Settings
  79. ################################################################################
  80. DATABASE_FILE = Path(OUTPUT_DIR) / SQL_INDEX_FILENAME
  81. DATABASE_NAME = os.environ.get("ARCHIVEBOX_DATABASE_NAME", DATABASE_FILE)
  82. DATABASES = {
  83. 'default': {
  84. 'ENGINE': 'django.db.backends.sqlite3',
  85. 'NAME': DATABASE_NAME,
  86. }
  87. }
  88. EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
  89. ################################################################################
  90. ### Security Settings
  91. ################################################################################
  92. SECRET_KEY = SECRET_KEY or get_random_string(50, 'abcdefghijklmnopqrstuvwxyz0123456789-_+!.')
  93. ALLOWED_HOSTS = ALLOWED_HOSTS.split(',')
  94. SECURE_BROWSER_XSS_FILTER = True
  95. SECURE_CONTENT_TYPE_NOSNIFF = True
  96. CSRF_COOKIE_SECURE = False
  97. SESSION_COOKIE_SECURE = False
  98. SESSION_COOKIE_DOMAIN = None
  99. SESSION_COOKIE_AGE = 1209600 # 2 weeks
  100. SESSION_EXPIRE_AT_BROWSER_CLOSE = False
  101. SESSION_SAVE_EVERY_REQUEST = True
  102. AUTH_PASSWORD_VALIDATORS = [
  103. {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
  104. {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'},
  105. {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'},
  106. {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'},
  107. ]
  108. ################################################################################
  109. ### Shell Settings
  110. ################################################################################
  111. SHELL_PLUS = 'ipython'
  112. SHELL_PLUS_PRINT_SQL = False
  113. IPYTHON_ARGUMENTS = ['--no-confirm-exit', '--no-banner']
  114. IPYTHON_KERNEL_DISPLAY_NAME = 'ArchiveBox Django Shell'
  115. if IS_SHELL:
  116. os.environ['PYTHONSTARTUP'] = str(Path(PACKAGE_DIR) / 'core' / 'welcome_message.py')
  117. ################################################################################
  118. ### Internationalization & Localization Settings
  119. ################################################################################
  120. LANGUAGE_CODE = 'en-us'
  121. TIME_ZONE = 'UTC'
  122. USE_I18N = False
  123. USE_L10N = False
  124. USE_TZ = False
  125. DATETIME_FORMAT = 'Y-m-d g:iA'
  126. SHORT_DATETIME_FORMAT = 'Y-m-d h:iA'