""" Django settings for threadchat project. Generated by 'django-admin startproject' using Django 4.0.4. For more information on this file, see https://docs.djangoproject.com/en/4.0/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/4.0/ref/settings/ """ from pathlib import Path from typing import Sequence import environ env = environ.Env() environ.Env.read_env() # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = env("SECRET_KEY") # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True with open("ALLOWED_HOSTS") as fp: ALLOWED_HOSTS: Sequence[str] = list(filter(len, map(str.strip, fp))) # Application definition INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "django_minify_html", "guardian", "colorfield", "board", ] MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "django_minify_html.middleware.MinifyHtmlMiddleware", ] ROOT_URLCONF = "threadchat.urls" TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [], "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", "board.context_processors.settings", "board.context_processors.boards", ], }, }, ] WSGI_APPLICATION = "threadchat.wsgi.application" AUTHENTICATION_BACKENDS = ( "django.contrib.auth.backends.ModelBackend", "guardian.backends.ObjectPermissionBackend", ) # Database # https://docs.djangoproject.com/en/4.0/ref/settings/#databases DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": BASE_DIR / "db.sqlite3", } } # Password validation # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] # Internationalization # https://docs.djangoproject.com/en/4.0/topics/i18n/ LANGUAGE_CODE = "en-us" TIME_ZONE = "US/Pacific" USE_I18N = True USE_TZ = True GUARDIAN_RENDER_403 = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/4.0/howto/static-files/ # This is the base URL for static files. STATIC_URL = "static/" # This is the location in the filesystem for static files. STATIC_ROOT = "static/" # Default primary key field type # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field # X-Frame-Options header from XFrameOptionsMiddleware X_FRAME_OPTIONS = "SAMEORIGIN" DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" # Site name SITE_NAME = "interchan" # Media root - where media files are stored on the disk MEDIA_ROOT = "media/" # Media URL - the URL where media is served from MEDIA_URL = "media/" # Thumbnail size in pixels. THUMB_SIZE = (200, 200) # Max upload size in bytes. MAX_UPLOAD_SIZE = 25 * 1024**2 # Whether to use HCAPTCHA or not. USE_HCAPTCHA = False if USE_HCAPTCHA: INSTALLED_APPS += ["hcaptcha"] HCAPTCHA_SITEKEY = env("HCAPTCHA_SITEKEY") HCAPTCHA_SECRET = env("HCAPTCHA_SECRET") # How many seconds to wait before closing the report window after a report is # created. # By default, wait 3 seconds. This should give users plenty of time to read it. REPORT_WINDOW_CLOSE_TIMEOUT = 3 # How many seconds to wait before closing the ban window after a ban is created. # By default, wait 0 seconds and close immediately. It is assumed that the ban # is created successfully, and if an error occurs, the window won't close anyway. ACTION_SUCCESS_CLOSE_TIMEOUT = 0 # How many seconds to wait before closing the new post window after a post is # created. # By default, wait 0 seconds. If there is an error, the window won't close # because it will be redirected elsewhere. POST_WINDOW_CLOSE_TIMEOUT = 0 # This is the length of a user's token, which is held in a server-side session. # This token is used to identify a user's individual web client, outside of IP # address. You probably don't need to change this. # It should be at most 30, and probably at least 10. USER_TOKEN_LENGTH = 30