Files
fet2020/fet2020/fet2020/settings.py
sebivh b7aaedba14 Added Authentication for Minecraft Server
In this commit, a beautiful authentication method was added! It can be
uses to authenticate SECURLY!!!! with the McFet Plugin! This is pretty
USEFULL!!!
2025-10-20 15:22:58 +02:00

403 lines
9.8 KiB
Python

import os
from urllib.parse import urljoin
import environ
env = environ.Env(
# set casting, default value
DEBUG=(str, "True"),
LDAP=(str, "False"),
MYSQL_HOST=(str, "mysql"),
MYSQL_PORT=(int, 3306),
MYSQL_DATABASE=(str, "fet2020db"),
MYSQL_USER=(str),
MYSQL_PASSWORD=(str),
HOST_NAME=(str, "localhost"),
ETHERPAD_PORT=(str, "9001"),
ETHERPAD_HOST=(str, ""),
ETHERPAD_GROUP=(str, ""),
GALLERY_PATH=(str, "uploads/gallery"),
MC_MASTERPASSWORD=(str, ""),
)
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# DEBUGGING
DEBUG = env("DEBUG").lower() == "true"
LDAP = env("LDAP").lower() == "true"
# MODELS
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.admindocs",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"django.contrib.sites",
"django.contrib.sitemaps",
"django.contrib.flatpages",
# third-party
"taggit",
"ckeditor",
"ckeditor_uploader",
"easy_thumbnails",
"rest_framework",
"django_filters",
"django_static_jquery_ui",
"fontawesomefree",
"whoosh",
"haystack",
# local apps
"core.apps.CoreConfig",
"posts.apps.PostsConfig",
"members.apps.MembersConfig",
"blackboard.apps.BlackboardConfig",
"gallery.apps.GalleryConfig",
"intern.apps.InternConfig",
"finance.apps.FinanceConfig",
"rental.apps.RentalConfig",
]
# AUTHENTICATIONS
if not DEBUG and LDAP:
AUTHENTICATION_BACKENDS = [
"authentications.backends.LdapBackend",
]
else:
AUTHENTICATION_BACKENDS = [
"authentications.backends.DebugBackend",
]
LOGIN_REDIRECT_URL = "home"
LOGIN_URL = "/auth/login"
# DATABASE
if DEBUG:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": os.path.join(BASE_DIR, "db.sqlite3"),
},
}
else:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": env("MYSQL_DATABASE"),
"USER": env("MYSQL_USER"),
"PASSWORD": env("MYSQL_PASSWORD"),
"HOST": env("MYSQL_HOST"),
"PORT": env("MYSQL_PORT"),
},
}
# EMAIL
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "buran.htu.tuwien.ac.at"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
# STATIC FILES
STATIC_URL = "static/" if DEBUG else "assets/"
# Use for collectstatic/production folder.
# --- Saving directory for production folder.
STATIC_ROOT = "assets/"
# --- Get files from following directory for production folder.
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
# FILE UPLOADS
MEDIA_URL = "files/"
MEDIA_ROOT = os.path.join(BASE_DIR, "files")
# GLOBALIZATION
LANGUAGE_CODE = "de-at"
LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")]
TIME_ZONE = "CET"
USE_I18N = True
USE_TZ = True
# HOST
ALLOWED_HOSTS = ["127.0.0.1", env("HOST_NAME"), "fet.at"]
HOST_NAME = env("HOST_NAME")
# HTTP
DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 1024
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"fet2020.middleware.FETHeaderMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware",
]
# TODO: Security Warning
# SECURE_HSTS_PRELOAD = True
# SECURE_HSTS_SECONDS = 60
# SECURE_HSTS_INCLUDE_SUBDOMAINS = True
# SESSION_COOKIE_SECURE = True
# SECURE_SSL_REDIRECT = False
WSGI_APPLICATION = "fet2020.wsgi.application"
# LOGGING
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"console": {
"class": "logging.StreamHandler",
},
},
"root": {
"handlers": ["console"],
"level": "DEBUG",
},
}
# MIGRATION TO DJANGO 3.2
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
# SITES
SITE_ID = 1
# SECURITY
# TODO: Security Warning
# CSRF_COOKIE_SECURE = True
CSRF_TRUSTED_ORIGINS = [
"https://" + env("HOST_NAME"),
]
SECRET_KEY = "r37-i7l)vrduzz2-gira+z#u!p!di9#f+%s*5-bb($hg)55@ns" if DEBUG else env("SECRET_KEY")
# TEMPLATES
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [
os.path.join(BASE_DIR, "templates"),
],
"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",
"django.template.context_processors.i18n",
"django.template.context_processors.media",
],
},
},
]
# URLS
ROOT_URLCONF = "fet2020.urls"
# --- THIRD-PARTY ---
# CKEDITOR
CKEDITOR_UPLOAD_PATH = "upload"
CKEDITOR_CONFIGS = {
"default": {
"stylesSet": [
{
"name": "Überschrift 2",
"element": "h2",
"attributes": {},
},
{
"name": "Code",
"element": "code",
"attributes": {"class": "code-block"},
},
],
"toolbar": "Custom",
"width": "100%",
"toolbar_Custom": [
{"name": "styles", "items": ["Styles", "Format", "Font", "FontSize"]},
{"name": "tools", "items": ["Maximize", "ShowBlocks"]},
{"name": "document", "items": ["Source"]},
"/",
{
"name": "basicstyles",
"items": [
"Bold",
"Italic",
"Underline",
"Strike",
"Subscript",
"Superscript",
"-",
"RemoveFormat",
],
},
{
"name": "paragraph",
"items": [
"NumberedList",
"BulletedList",
"-",
"Outdent",
"Indent",
"-",
"Blockquote",
"CreateDiv",
"-",
"JustifyLeft",
"JustifyCenter",
"JustifyRight",
"JustifyBlock",
],
},
{"name": "links", "items": ["Link", "Unlink", "Anchor"]},
{
"name": "insert",
"items": [
"Image",
"Flash",
"Table",
"HorizontalRule",
"Smiley",
"SpecialChar",
],
},
],
},
"intern": {
"toolbar": "Custom",
"width": "100%",
"toolbar_Custom": [
{
"name": "basicstyles",
"items": [
"Bold",
"Italic",
"Underline",
"Strike",
"Subscript",
"Superscript",
"-",
"RemoveFormat",
],
},
{
"name": "paragraph",
"items": [
"NumberedList",
"BulletedList",
"-",
"Outdent",
"Indent",
"-",
"Blockquote",
"CreateDiv",
],
},
"/",
{
"name": "paragraph2",
"items": [
"JustifyLeft",
"JustifyCenter",
"JustifyRight",
"JustifyBlock",
],
},
{"name": "links", "items": ["Link", "Unlink", "Anchor"]},
],
},
}
# ETHERPAD
ETHERPAD_HOST = env("ETHERPAD_HOST").strip()
if not ETHERPAD_HOST or ETHERPAD_HOST == "":
ETHERPAD_HOST = urljoin("https://" + env("HOST_NAME"), "etherpad/")
if DEBUG:
ETHERPAD_CLIENT = {
"url": "http://etherpad:" + env("ETHERPAD_PORT"),
"exturl": ETHERPAD_HOST,
"apikey": "/etherpad/APIKEY.txt",
"group": env("ETHERPAD_GROUP"),
}
else:
ETHERPAD_CLIENT = {
"url": "http://etherpad:" + env("ETHERPAD_PORT"),
"exturl": urljoin("https://" + env("HOST_NAME"), "etherpad/"),
"apikey": os.path.join(BASE_DIR, "etherpad/APIKEY.txt"),
"group": env("ETHERPAD_GROUP"),
}
# GALLERY
GALLERY = {
"path": env("GALLERY_PATH"),
"thumb_path": env("GALLERY_PATH") + "_thumb",
}
# HAYSTACK
HAYSTACK_CONNECTIONS = {
"default": {
"ENGINE": "haystack.backends.whoosh_backend.WhooshEngine",
"PATH": os.path.join(BASE_DIR, "whoosh_index"),
},
}
# REST FRAMEWORK
REST_FRAMEWORK = {
"DEFAULT_PERMISSION_CLASSES_CLASSES": [
"rest_framework.permissions.AllowAny",
],
"DEFAULT_AUTHENTICATION_CLASSES": (),
}
# TAGGIT
TAGGIT_FORCE_LOWERCASE = True
# THUMBNAIL
THUMBNAIL_DEFAULT_STORAGE_ALIAS = "default"
THUMBNAIL_ALIASES = {
"": {
"avatar": {"size": (50, 50), "crop": True},
"thumb": {"size": (150, 150), "crop": True},
"portrait": {"size": (200, 300), "crop": False},
},
}
# Minecraft Auth
MC_MASTERPASSWORD = env("MC_MASTERPASSWORD")