diff --git a/jdav_web/jdav_web/settings.py b/jdav_web/jdav_web/settings.py deleted file mode 100644 index ac4804a..0000000 --- a/jdav_web/jdav_web/settings.py +++ /dev/null @@ -1,426 +0,0 @@ -""" -Django settings for jdav_web project. - -Generated by 'django-admin startproject' using Django 1.10.2. - -For more information on this file, see -https://docs.djangoproject.com/en/1.10/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.10/ref/settings/ -""" - -import os - -deployed = '1' == os.environ.get('DJANGO_DEPLOY', '0') - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', - '6_ew6l1r9_4(8=p8quv(e8b+z+k+*wm7&zxx%mcnnec99a!lpw') - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = os.environ.get('DJANGO_DEBUG', '1') == '1' - -ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOST', '').split(",") - -# Define media paths e.g. for image storage -MEDIA_URL = '/media/' -MEDIA_ROOT = os.environ.get('DJANGO_MEDIA_ROOT', - os.path.join((os.path.join(BASE_DIR, os.pardir)), "media")) -MEDIA_MEMBERLISTS = os.path.join((os.path.join(BASE_DIR, os.pardir)), "media") - -# default primary key auto field type -DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' - -# prevent large files from being unreadable by the server -# see -# https://stackoverflow.com/questions/51439689/django-nginx-error-403-forbidden-when-serving-media-files-over-some-size -FILE_UPLOAD_PERMISSIONS = 0o644 - -# x forward - -USE_X_FORWARDED_HOST = True - -# Application definition - -INSTALLED_APPS = [ - 'startpage.apps.StartpageConfig', - 'material.apps.MaterialConfig', - 'members.apps.MembersConfig', - 'mailer.apps.MailerConfig', - 'finance.apps.FinanceConfig', - 'ludwigsburgalpin.apps.LudwigsburgalpinConfig', - #'easy_select2', - 'djcelery_email', - 'nested_admin', - 'django_celery_beat', - 'jet', - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', -] - -MIDDLEWARE = [ - 'django.middleware.cache.UpdateCacheMiddleware', - 'jdav_web.middleware.ForceLangMiddleware', - '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', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'django.middleware.cache.FetchFromCacheMiddleware', -] - -ROOT_URLCONF = 'jdav_web.urls' - -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', - ], - }, - }, -] - -WSGI_APPLICATION = 'jdav_web.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/1.10/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': os.environ.get('DJANGO_DATABASE_NAME', 'jdav_db'), - 'USER': os.environ.get('DJANGO_DATABASE_USER', 'jdav_user'), - 'PASSWORD': os.environ.get('DJANGO_DATABASE_PASSWORD', 'jdav00jdav'), - 'HOST': os.environ.get('DJANGO_DATABASE_HOST', '127.0.0.1'), - 'PORT': os.environ.get('DJANGO_DATABASE_PORT', '5432') - } -} - -CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache', - 'LOCATION': os.environ.get('MEMCACHED_URL', '127.0.0.1:11211'), - } -} - -CACHE_MIDDLEWARE_ALIAS = 'default' -CACHE_MIDDLEWARE_SECONDS = 120 -CACHE_MIDDLEWARE_KEY_PREFIX = '' - - -# Password validation -# https://docs.djangoproject.com/en/1.10/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/1.10/topics/i18n/ - -LANGUAGE_CODE = 'de-de' - -TIME_ZONE = 'Europe/Berlin' - -USE_I18N = True - -USE_L10N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.10/howto/static-files/ - -STATIC_URL = '/static/' -STATICFILES_DIRS = [ - os.path.join(BASE_DIR, "static") -] -# static root where all the static files are collected to -# use python3 manage.py collectstatic to collect static files in the STATIC_ROOT -# this is needed for deployment -STATIC_ROOT = os.environ.get('DJANGO_STATIC_ROOT', - '/var/www/jdav_web/assets') - - -# Locale files (translations) - -LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),) - - -# Email setup - -EMAIL_HOST = os.environ.get('EMAIL_HOST', 'localhost') -EMAIL_PORT = 587 if deployed else 25 -EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER', '') -EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD', '') -EMAIL_USE_TLS = True if deployed else False -EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend' - - -# Celery Email Setup - -CELERY_EMAIL_TASK_CONFIG = { - 'rate_limit' : '10/m' # * CELERY_EMAIL_CHUNK_SIZE (default: 10) -} - - -# Admin setup - -ADMINS = (('admin', 'christian@merten-moser.de'),) - - -# Celery and Redis setup -BROKER_URL = os.environ.get('BROKER_URL', 'redis://localhost:6379/0') - -CLOUD_LINK = 'https://cloud.jdav-ludwigsburg.de/index.php/s/qxQCTR8JqYSXXCQ' - -# JET options (admin interface) - -JET_SIDE_MENU_COMPACT = True -JET_DEFAULT_THEME = 'jdav-green' -JET_CHANGE_FORM_SIBLING_LINKS = False - -JET_SIDE_MENU_ITEMS = [ - {'app_label': 'auth', 'permissions': ['auth'], 'items': [ - {'name': 'group', 'permissions': ['auth.group'] }, - {'name': 'user', 'permissions': ['auth.user']}, - ]}, - {'app_label': 'django_celery_beat', 'permissions': ['django_celery_beat'], 'items': [ - {'name': 'crontabschedule'}, - {'name': 'clockedschedule'}, - {'name': 'intervalschedule'}, - {'name': 'periodictask'}, - {'name': 'solarschedule'}, - ]}, - {'app_label': 'ludwigsburgalpin', 'permissions': ['ludwigsburgalpin'], 'items': [ - {'name': 'termin', 'permissions': ['ludwigsburgalpin.view_termin']}, - ]}, - {'app_label': 'mailer', 'items': [ - {'name': 'message', 'permissions': ['mailer.view_message']}, - {'name': 'emailaddress', 'permissions': ['mailer.view_emailaddress']}, - ]}, - {'app_label': 'finance', 'items': [ - {'name': 'statementunsubmitted', 'permissions': ['finance.view_statementunsubmitted']}, - {'name': 'statementsubmitted', 'permissions': ['finance.view_statementsubmitted']}, - {'name': 'statementconfirmed', 'permissions': ['finance.view_statementconfirmed']}, - {'name': 'ledger', 'permissions': ['finance.view_ledger']}, - {'name': 'bill', 'permissions': ['finance.view_bill', 'finance.view_bill_admin']}, - {'name': 'transaction', 'permissions': ['finance.view_transaction']}, - ]}, - {'app_label': 'members', 'items': [ - {'name': 'member', 'permissions': ['members.view_member']}, - {'name': 'group', 'permissions': ['members.view_group']}, - {'name': 'membernotelist', 'permissions': ['members.view_membernotelist']}, - {'name': 'freizeit', 'permissions': ['members.view_freizeit']}, - {'name': 'klettertreff', 'permissions': ['members.view_klettertreff']}, - {'name': 'activitycategory', 'permissions': ['members.view_activitycategory']}, - {'name': 'memberunconfirmedproxy', 'permissions': ['members.view_memberunconfirmedproxy']}, - {'name': 'memberwaitinglist', 'permissions': ['members.view_memberwaitinglist']}, - ]}, - {'app_label': 'material', 'permissions': ['material'], 'items': [ - {'name': 'materialcategory', 'permissions': ['material.view_materialcategory']}, - {'name': 'materialpart', 'permissions': ['material.view_materialpart']}, - ]}, - {'label': 'Externe Links', 'items' : [ - { 'label': 'Packlisten und Co.', 'url': CLOUD_LINK } - ]}, -] - -# Waiting list configuration parameters, all numbers are in days - - -GRACE_PERIOD_WAITING_CONFIRMATION = 30 -WAITING_CONFIRMATION_FREQUENCY = 90 - -# password hash algorithms used - -PASSWORD_HASHERS = [ - 'django.contrib.auth.hashers.BCryptPasswordHasher', - 'django.contrib.auth.hashers.PBKDF2PasswordHasher', - 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', - 'django.contrib.auth.hashers.Argon2PasswordHasher', - 'django.contrib.auth.hashers.ScryptPasswordHasher', -] - -# mail texts - -CONFIRM_MAIL_TEXT = """Hallo {name}, - -du hast bei der JDAV Ludwigsburg eine E-Mail Adresse hinterlegt. Da bei uns alle Kommunikation -per Email funktioniert, brauchen wir eine Bestätigung {whattoconfirm}. Dazu klicke bitte einfach auf -folgenden Link: - -{link} - -Viele Grüße -Deine JDAV Ludwigsburg""" - -NEW_UNCONFIRMED_REGISTRATION = """Hallo {name}, - -für deine Gruppe {group} liegt eine neue unbestätigte Reservierung vor. Die Person hat bereits ihre -E-Mailadressen bestätigt. Bitte prüfe die Registrierung eingehend und bestätige falls möglich. Zu -der Registrierung kommst du hier: - -{link} - -Viele Grüße -Dein KOMPASS""" - -INVITE_TEXT = """Hallo {name}, - -wir haben gute Neuigkeiten für dich. Es ist ein Platz in der Jugendgruppe freigeworden. Wir brauchen -jetzt noch ein paar Informationen von dir und deine Anmeldebestätigung. Das kannst du alles über folgenden -Link erledigen: - -{link} - -Du siehst dort auch die Daten, die du bei deiner Eintragung auf die Warteliste angegeben hast. Bitte -überprüfe, ob die Daten noch stimmen und ändere sie bei Bedarf ab. - -Bei Fragen, wende dich gerne an jugendreferent@jdav-ludwigsburg.de. - -Viele Grüße -Deine JDAV Ludwigsburg""" - - -WAIT_CONFIRMATION_TEXT = """Hallo {name}, - -leider können wir dir zur Zeit noch keinen Platz in einer Jugendgruppe anbieten. Da wir -sehr viele Interessenten haben und wir möglichst vielen die Möglichkeit bieten möchten, an -einer Jugendgruppe teilhaben zu können, fragen wir regelmäßig alle Personen auf der -Warteliste ab, ob sie noch Interesse haben. - -Wenn du weiterhin auf der Warteliste bleiben möchtest, klicke auf den folgenden Link: - -{link} - -Falls du nicht mehr auf der Warteliste bleiben möchtest, musst du nichts machen. Du wirst automatisch entfernt. - -Viele Grüße -Deine JDAV Ludwigsburg""" - -UNSUBSCRIBE_CONFIRMATION_TEXT = """Klicke auf den Link, um dich vom Newsletter der JDAV Ludwigsburg abzumelden - -{link}""" - -NOTIFY_MOST_ACTIVE_TEXT = """Hallo {name}! - -Herzlichen Glückwunsch, du hast im letzten Jahr zu den {congratulate_max} aktivsten -Mitgliedern der JDAV Ludwigsburg gehört! Um genau zu sein beträgt dein Aktivitäts Wert -des letzten Jahres {score} Punkte. Das entspricht {level} Kletterer:innen. Damit warst du -im letzten Jahr das {position}aktivste Mitglied der JDAV Ludwigsburg. - - -Auf ein weiteres aktives Jahr in der JDAV Ludwigsburg - -Dein:e Jugendreferent:in""" - -ECHO_TEXT = """Hallo {name}, - -um unsere Daten auf dem aktuellen Stand zu halten, brauchen wir eine -kurze Bestätigung von dir. Dafür besuche einfach diesen Link: - -{link} - -Dort kannst du deine Daten überprüfen und ändern. Falls du nicht innerhalb von -30 Tagen deine Daten bestätigst, wirst du aus unserer Datenbank gelöscht und -erhälst in Zukunft keine Mails mehr von uns. - -Bei Fragen, wende dich gerne an jugendreferent@jdav-ludwigsburg.de. - -Viele Grüße -Deine JDAV Ludwigsburg""" - -PREPEND_INCOMPLETE_REGISTRATION_TEXT = """WICHTIGE MITTEILUNG - -Deine Anmeldung ist aktuell nicht vollständig. Bitte fülle umgehend das -Anmeldeformular aus und lasse es Deine*r Jugendleiter*in zukommen! Dieses -kannst Du unter folgendem Link herunterladen: - -https://cloud.jdav-ludwigsburg.de/index.php/s/NQfRqA9MTKfPBkC - -**************** - -""" - -MAIL_FOOTER = """ - - -**************** - -Diese Email wurde über die Webseite der JDAV Ludwigsburg -verschickt. Wenn Du in Zukunft keine Emails mehr erhalten möchtest, -kannst Du hier den Newsletter deabonnieren: - -{link}""" - -# fixed email addresses - -RESPONSIBLE_MAIL = "jugendreferent@jdav-ludwigsburg.de" - -# contact data - -SEKTION = "Ludwigsburg" -SEKTION_STREET = "Fuchshofstr. 66" -SEKTION_TOWN = "71638 Ludwigsburg" -SEKTION_TELEPHONE = "07141 927893" -SEKTION_TELEFAX = "07141 924042" -SEKTION_CONTACT_MAIL = "info@alpenverein-ludwigsburg.de" - - -# mailutils - -HOST = os.environ.get('DJANGO_ALLOWED_HOST', 'localhost:8000').split(",")[0] -PROTOCOL = os.environ.get('DJANGO_PROTOCOL', 'https') -BASE_URL = os.environ.get('DJANGO_BASE_URL', HOST) - -DEFAULT_SENDING_MAIL = os.environ.get('EMAIL_SENDING_ADDRESS', 'christian@localhost') - -# misc - -CONGRATULATE_MEMBERS_MAX = 10 - -# finance - -ALLOWANCE_PER_DAY = 10 -MAX_NIGHT_COST = 11 - -# testing - -TEST_MAIL = "post@flavigny.de" diff --git a/jdav_web/jdav_web/settings/__init__.py b/jdav_web/jdav_web/settings/__init__.py new file mode 100644 index 0000000..7ab18e3 --- /dev/null +++ b/jdav_web/jdav_web/settings/__init__.py @@ -0,0 +1,26 @@ +""" +Django settings for jdav_web project. + +Generated by 'django-admin startproject' using Django 1.10.2. + +For more information on this file, see +https://docs.djangoproject.com/en/1.10/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.10/ref/settings/ +""" + +from split_settings.tools import optional, include +import os + +base_settings = [ + 'local.py', + 'components/base.py', + 'components/database.py', + 'components/cache.py', + 'components/jet.py', + 'components/emails.py', + 'components/texts.py' +] + +include(*base_settings) diff --git a/jdav_web/jdav_web/settings/components/__init__.py b/jdav_web/jdav_web/settings/components/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jdav_web/jdav_web/settings/components/base.py b/jdav_web/jdav_web/settings/components/base.py new file mode 100644 index 0000000..6088f10 --- /dev/null +++ b/jdav_web/jdav_web/settings/components/base.py @@ -0,0 +1,141 @@ +deployed = '1' == os.environ.get('DJANGO_DEPLOY', '0') + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', + '6_ew6l1r9_4(8=p8quv(e8b+z+k+*wm7&zxx%mcnnec99a!lpw') + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = os.environ.get('DJANGO_DEBUG', '1') == '1' + +ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOST', '').split(",") + +# hostname and base url +HOST = os.environ.get('DJANGO_ALLOWED_HOST', 'localhost:8000').split(",")[0] +PROTOCOL = os.environ.get('DJANGO_PROTOCOL', 'https') +BASE_URL = os.environ.get('DJANGO_BASE_URL', HOST) + +# Define media paths e.g. for image storage +MEDIA_URL = '/media/' +MEDIA_ROOT = os.environ.get('DJANGO_MEDIA_ROOT', + os.path.join((os.path.join(BASE_DIR, os.pardir)), "media")) +MEDIA_MEMBERLISTS = os.path.join((os.path.join(BASE_DIR, os.pardir)), "media") + +# default primary key auto field type +DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' + +# prevent large files from being unreadable by the server +# see +# https://stackoverflow.com/questions/51439689/django-nginx-error-403-forbidden-when-serving-media-files-over-some-size +FILE_UPLOAD_PERMISSIONS = 0o644 + +# x forward + +USE_X_FORWARDED_HOST = True + +# Application definition + +INSTALLED_APPS = [ + 'startpage.apps.StartpageConfig', + 'material.apps.MaterialConfig', + 'members.apps.MembersConfig', + 'mailer.apps.MailerConfig', + 'finance.apps.FinanceConfig', + 'ludwigsburgalpin.apps.LudwigsburgalpinConfig', + #'easy_select2', + 'djcelery_email', + 'nested_admin', + 'django_celery_beat', + 'jet', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.cache.UpdateCacheMiddleware', + 'jdav_web.middleware.ForceLangMiddleware', + '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', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django.middleware.cache.FetchFromCacheMiddleware', +] + +ROOT_URLCONF = 'jdav_web.urls' + +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', + ], + }, + }, +] + +WSGI_APPLICATION = 'jdav_web.wsgi.application' + +# Password validation +# https://docs.djangoproject.com/en/1.10/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', + }, +] + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.10/howto/static-files/ + +STATIC_URL = '/static/' +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, "static") +] +# static root where all the static files are collected to +# use python3 manage.py collectstatic to collect static files in the STATIC_ROOT +# this is needed for deployment +STATIC_ROOT = os.environ.get('DJANGO_STATIC_ROOT', + '/var/www/jdav_web/assets') + + +# Locale files (translations) + +LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),) + +# Celery and Redis setup +BROKER_URL = os.environ.get('BROKER_URL', 'redis://localhost:6379/0') + +# password hash algorithms used + +PASSWORD_HASHERS = [ + 'django.contrib.auth.hashers.BCryptPasswordHasher', + 'django.contrib.auth.hashers.PBKDF2PasswordHasher', + 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', + 'django.contrib.auth.hashers.Argon2PasswordHasher', + 'django.contrib.auth.hashers.ScryptPasswordHasher', +] diff --git a/jdav_web/jdav_web/settings/components/cache.py b/jdav_web/jdav_web/settings/components/cache.py new file mode 100644 index 0000000..eb69c6d --- /dev/null +++ b/jdav_web/jdav_web/settings/components/cache.py @@ -0,0 +1,11 @@ +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache', + 'LOCATION': os.environ.get('MEMCACHED_URL', '127.0.0.1:11211'), + } +} + +CACHE_MIDDLEWARE_ALIAS = 'default' +CACHE_MIDDLEWARE_SECONDS = 120 +CACHE_MIDDLEWARE_KEY_PREFIX = '' + diff --git a/jdav_web/jdav_web/settings/components/database.py b/jdav_web/jdav_web/settings/components/database.py new file mode 100644 index 0000000..5b34e25 --- /dev/null +++ b/jdav_web/jdav_web/settings/components/database.py @@ -0,0 +1,14 @@ +# Database +# https://docs.djangoproject.com/en/1.10/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': os.environ.get('DJANGO_DATABASE_NAME', 'jdav_db'), + 'USER': os.environ.get('DJANGO_DATABASE_USER', 'jdav_user'), + 'PASSWORD': os.environ.get('DJANGO_DATABASE_PASSWORD', 'jdav00jdav'), + 'HOST': os.environ.get('DJANGO_DATABASE_HOST', '127.0.0.1'), + 'PORT': os.environ.get('DJANGO_DATABASE_PORT', '5432') + } +} + diff --git a/jdav_web/jdav_web/settings/components/emails.py b/jdav_web/jdav_web/settings/components/emails.py new file mode 100644 index 0000000..a1b7a92 --- /dev/null +++ b/jdav_web/jdav_web/settings/components/emails.py @@ -0,0 +1,16 @@ +# Email setup + +EMAIL_HOST = os.environ.get('EMAIL_HOST', 'localhost') +EMAIL_PORT = 587 if deployed else 25 +EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER', '') +EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD', '') +EMAIL_USE_TLS = True if deployed else False +EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend' + +# Celery Email Setup + +CELERY_EMAIL_TASK_CONFIG = { + 'rate_limit' : '10/m' # * CELERY_EMAIL_CHUNK_SIZE (default: 10) +} + +DEFAULT_SENDING_MAIL = os.environ.get('EMAIL_SENDING_ADDRESS', 'django@localhost') diff --git a/jdav_web/jdav_web/settings/components/jet.py b/jdav_web/jdav_web/settings/components/jet.py new file mode 100644 index 0000000..e8d084d --- /dev/null +++ b/jdav_web/jdav_web/settings/components/jet.py @@ -0,0 +1,51 @@ +# JET options (admin interface) + +JET_SIDE_MENU_COMPACT = True +JET_DEFAULT_THEME = 'jdav-green' +JET_CHANGE_FORM_SIBLING_LINKS = False + +JET_SIDE_MENU_ITEMS = [ + {'app_label': 'auth', 'permissions': ['auth'], 'items': [ + {'name': 'group', 'permissions': ['auth.group'] }, + {'name': 'user', 'permissions': ['auth.user']}, + ]}, + {'app_label': 'django_celery_beat', 'permissions': ['django_celery_beat'], 'items': [ + {'name': 'crontabschedule'}, + {'name': 'clockedschedule'}, + {'name': 'intervalschedule'}, + {'name': 'periodictask'}, + {'name': 'solarschedule'}, + ]}, + {'app_label': 'ludwigsburgalpin', 'permissions': ['ludwigsburgalpin'], 'items': [ + {'name': 'termin', 'permissions': ['ludwigsburgalpin.view_termin']}, + ]}, + {'app_label': 'mailer', 'items': [ + {'name': 'message', 'permissions': ['mailer.view_message']}, + {'name': 'emailaddress', 'permissions': ['mailer.view_emailaddress']}, + ]}, + {'app_label': 'finance', 'items': [ + {'name': 'statementunsubmitted', 'permissions': ['finance.view_statementunsubmitted']}, + {'name': 'statementsubmitted', 'permissions': ['finance.view_statementsubmitted']}, + {'name': 'statementconfirmed', 'permissions': ['finance.view_statementconfirmed']}, + {'name': 'ledger', 'permissions': ['finance.view_ledger']}, + {'name': 'bill', 'permissions': ['finance.view_bill', 'finance.view_bill_admin']}, + {'name': 'transaction', 'permissions': ['finance.view_transaction']}, + ]}, + {'app_label': 'members', 'items': [ + {'name': 'member', 'permissions': ['members.view_member']}, + {'name': 'group', 'permissions': ['members.view_group']}, + {'name': 'membernotelist', 'permissions': ['members.view_membernotelist']}, + {'name': 'freizeit', 'permissions': ['members.view_freizeit']}, + {'name': 'klettertreff', 'permissions': ['members.view_klettertreff']}, + {'name': 'activitycategory', 'permissions': ['members.view_activitycategory']}, + {'name': 'memberunconfirmedproxy', 'permissions': ['members.view_memberunconfirmedproxy']}, + {'name': 'memberwaitinglist', 'permissions': ['members.view_memberwaitinglist']}, + ]}, + {'app_label': 'material', 'permissions': ['material'], 'items': [ + {'name': 'materialcategory', 'permissions': ['material.view_materialcategory']}, + {'name': 'materialpart', 'permissions': ['material.view_materialpart']}, + ]}, + {'label': 'Externe Links', 'items' : [ + { 'label': 'Packlisten und Co.', 'url': CLOUD_LINK } + ]}, +] diff --git a/jdav_web/jdav_web/settings/components/locale.py b/jdav_web/jdav_web/settings/components/locale.py new file mode 100644 index 0000000..bfa23d2 --- /dev/null +++ b/jdav_web/jdav_web/settings/components/locale.py @@ -0,0 +1,10 @@ +# Internationalization +# https://docs.djangoproject.com/en/1.10/topics/i18n/ + +LANGUAGE_CODE = 'de-de' + +TIME_ZONE = 'Europe/Berlin' + +USE_I18N = True +USE_L10N = True +USE_TZ = True diff --git a/jdav_web/jdav_web/settings/components/texts.py b/jdav_web/jdav_web/settings/components/texts.py new file mode 100644 index 0000000..dce07cc --- /dev/null +++ b/jdav_web/jdav_web/settings/components/texts.py @@ -0,0 +1,116 @@ +# mail texts + +CONFIRM_MAIL_TEXT = """Hallo {name}, + +du hast bei der JDAV %(SEKTION)s eine E-Mail Adresse hinterlegt. Da bei uns alle Kommunikation +per Email funktioniert, brauchen wir eine Bestätigung {whattoconfirm}. Dazu klicke bitte einfach auf +folgenden Link: + +{link} + +Viele Grüße +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION } + +NEW_UNCONFIRMED_REGISTRATION = """Hallo {name}, + +für deine Gruppe {group} liegt eine neue unbestätigte Reservierung vor. Die Person hat bereits ihre +E-Mailadressen bestätigt. Bitte prüfe die Registrierung eingehend und bestätige falls möglich. Zu +der Registrierung kommst du hier: + +{link} + +Viele Grüße +Dein KOMPASS""" + +INVITE_TEXT = """Hallo {name}, + +wir haben gute Neuigkeiten für dich. Es ist ein Platz in der Jugendgruppe freigeworden. Wir brauchen +jetzt noch ein paar Informationen von dir und deine Anmeldebestätigung. Das kannst du alles über folgenden +Link erledigen: + +{link} + +Du siehst dort auch die Daten, die du bei deiner Eintragung auf die Warteliste angegeben hast. Bitte +überprüfe, ob die Daten noch stimmen und ändere sie bei Bedarf ab. + +Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s. + +Viele Grüße +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL } + + +WAIT_CONFIRMATION_TEXT = """Hallo {name}, + +leider können wir dir zur Zeit noch keinen Platz in einer Jugendgruppe anbieten. Da wir +sehr viele Interessenten haben und wir möglichst vielen die Möglichkeit bieten möchten, an +einer Jugendgruppe teilhaben zu können, fragen wir regelmäßig alle Personen auf der +Warteliste ab, ob sie noch Interesse haben. + +Wenn du weiterhin auf der Warteliste bleiben möchtest, klicke auf den folgenden Link: + +{link} + +Falls du nicht mehr auf der Warteliste bleiben möchtest, musst du nichts machen. Du wirst automatisch entfernt. + +Viele Grüße +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION } + + +UNSUBSCRIBE_CONFIRMATION_TEXT = """Klicke auf den Link, um dich vom Newsletter der JDAV %(SEKTION)s abzumelden + +{link}""" % { 'SEKTION': SEKTION } + + +NOTIFY_MOST_ACTIVE_TEXT = """Hallo {name}! + +Herzlichen Glückwunsch, du hast im letzten Jahr zu den {congratulate_max} aktivsten +Mitgliedern der JDAV %(SEKTION)s gehört! Um genau zu sein beträgt dein Aktivitäts Wert +des letzten Jahres {score} Punkte. Das entspricht {level} Kletterer:innen. Damit warst du +im letzten Jahr das {position}aktivste Mitglied der JDAV %(SEKTION)s. + + +Auf ein weiteres aktives Jahr in der JDAV %(SEKTION)s. + +Dein:e Jugendreferent:in""" % { 'SEKTION': SEKTION } + + +ECHO_TEXT = """Hallo {name}, + +um unsere Daten auf dem aktuellen Stand zu halten, brauchen wir eine +kurze Bestätigung von dir. Dafür besuche einfach diesen Link: + +{link} + +Dort kannst du deine Daten überprüfen und ändern. Falls du nicht innerhalb von +30 Tagen deine Daten bestätigst, wirst du aus unserer Datenbank gelöscht und +erhälst in Zukunft keine Mails mehr von uns. + +Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s. + +Viele Grüße +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL } + + +PREPEND_INCOMPLETE_REGISTRATION_TEXT = """WICHTIGE MITTEILUNG + +Deine Anmeldung ist aktuell nicht vollständig. Bitte fülle umgehend das +Anmeldeformular aus und lasse es Deine*r Jugendleiter*in zukommen! Dieses +kannst Du unter folgendem Link herunterladen: + +%(REGISTRATION_FORM_DOWNLOAD_LINK)s + +**************** + +""" % { 'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK } + + +MAIL_FOOTER = """ + + +**************** + +Diese Email wurde über die Webseite der JDAV %(SEKTION)s +verschickt. Wenn Du in Zukunft keine Emails mehr erhalten möchtest, +kannst Du hier den Newsletter deabonnieren: + +{link}""" % { 'SEKTION': SEKTION } diff --git a/jdav_web/jdav_web/settings/local.py b/jdav_web/jdav_web/settings/local.py new file mode 100644 index 0000000..ba13412 --- /dev/null +++ b/jdav_web/jdav_web/settings/local.py @@ -0,0 +1,36 @@ +# contact data + +SEKTION = "Heidelberg" +SEKTION_STREET = "Harbigweg 20" +SEKTION_TOWN = "69124 Heidelberg" +SEKTION_TELEPHONE = "06221 284076" +SEKTION_TELEFAX = "06221 437338" +SEKTION_CONTACT_MAIL = "geschaeftsstelle@alpenverein-heidelberg.de" + +RESPONSIBLE_MAIL = "jugendreferat@jdav-hd.de" + +# misc + +CONGRATULATE_MEMBERS_MAX = 10 + +# finance + +ALLOWANCE_PER_DAY = 10 +MAX_NIGHT_COST = 11 + +CLOUD_LINK = 'https://cloud.jdav-ludwigsburg.de/index.php/s/qxQCTR8JqYSXXCQ' + +# Admin setup + +ADMINS = (('admin', 'christian@merten-moser.de'),) + +# Waiting list configuration parameters, all numbers are in days + +GRACE_PERIOD_WAITING_CONFIRMATION = 30 +WAITING_CONFIRMATION_FREQUENCY = 90 + +# testing + +TEST_MAIL = "post@flavigny.de" + +REGISTRATION_FORM_DOWNLOAD_LINK = 'https://cloud.jdav-ludwigsburg.de/index.php/s/NQfRqA9MTKfPBkC' diff --git a/requirements.txt b/requirements.txt index d482b6c..74acb36 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,6 +17,7 @@ django-appconf==1.0.5 django-celery-beat==2.5.0 django-celery-email==3.0.0 django-nested-admin==4.0.2 +django-split-settings==1.2.0 django-timezone-field==5.0 idna==3.3 kombu==5.2.3