Winbox has this annoying bug where you can't move the window below the calculated area of the document, so you can't drag it over blank space. JSFrame fixes this and does basically what we want as well. This has been implemented for post replies and I am going to implement it for reports and ban creation too. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
169 lines
4.5 KiB
Python
169 lines
4.5 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",
|
|
"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"
|
|
|
|
|
|
# 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
|
|
|
|
|
|
# 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 5 seconds. This should give users plenty of time to read it.
|
|
REPORT_WINDOW_CLOSE_TIMEOUT = 5
|
|
|
|
# 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.
|
|
BAN_WINDOW_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
|