407 lines
9.9 KiB
Python
407 lines
9.9 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, ""),
|
|
EMAIL_HOST_USER=(str, ""),
|
|
EMAIL_HOST_PASSWORD=(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_HOST_USER = env("EMAIL_HOST_USER")
|
|
EMAIL_HOST_PASSWORD = env("EMAIL_HOST_PASSWORD")
|
|
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")
|