ActionSuccessView is a a generic view that indicates that something was successful, e.g. deleting a post or banning a user. This hopefully reduces the amount of boilerplate code used for creating success pages since most of them can derive from this generic view. The report and delete success views are updated to use this directly. The ban and modify success views are updated to derive from this class, with special permissions required. The post success view is updated to derive from this class, using a different template. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
183 lines
5.0 KiB
Python
183 lines
5.0 KiB
Python
"""
|
|
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",
|
|
"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",
|
|
]
|
|
|
|
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",
|
|
],
|
|
},
|
|
},
|
|
]
|
|
|
|
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/
|
|
|
|
STATIC_URL = "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"
|
|
|
|
# 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
|