diff --git a/.gitignore b/.gitignore index 4fdab90..2e3fb03 100644 --- a/.gitignore +++ b/.gitignore @@ -106,9 +106,6 @@ jdav_web/my.cnf # sass cache jdav_web/static/jet/css/themes/*/.sass-cache/* -# test config -config - # celerybeat schedule database jdav_web/celerybeat-schedule.db @@ -125,6 +122,11 @@ docker/development/media docker/production/media docker/test/media +# configuration folders +docker/development/config/* +!docker/development/config/settings.toml.example +docker/production/config + *.csv jdav_web/static/docs diff --git a/docker/development/config/settings.toml.example b/docker/development/config/settings.toml.example new file mode 100644 index 0000000..e89a029 --- /dev/null +++ b/docker/development/config/settings.toml.example @@ -0,0 +1,67 @@ +[section] +name = "Town" +street = "Street 12" +town = "12345 Town" +telephone = "123456789" +telefax = "987654321" +contact_mail = "contact@jdav-town.de" +board_mail = "board@jdav-town.de" +crisis_intervention_mail = "crisis@jdav-town.de" +iban = "DE42 4242 4242 4242 4242 42" +account_holder = "DAV Town" +responsible_mail = "responsible@jdav-town.de" +digital_mail = "digital@jdav-town.de" +admins = [['Admin', 'admin@jdav-town.de']] + +[LJP] +v32_head_organisation = """ +LJP application recipient header +""" + +[misc] +allowed_email_domains_for_invite_as_user = ['alpenverein-town.de'] +send_from_association_email = true +domain = 'jdav-town.de' + +[finance] +allowance_per_day = 22 +max_night_cost = 11 + +[links] +cloud = "https://nextcloud.com" +dav_360 = "https://dav360.de" +wiki = "https://wikipedia.org" +docs = "https://jdav-hd.de/static/docs" +registration_form = "download-me" + +[startpage] +redirect_url = '' +root_section = 'root section' +recent_section = 'aktuelles' +reports_section = 'berichte' + +[django] +deployed = true +debug = true +secret_key = '6_ew6l1r9_4(8=p8quv(e8b+z+k+*wm7&zxx%mcnnec99a!lpw' +allowed_hosts = ['*'] +protocol = 'http' +base_url = 'localhost:8000' +host = '' +static_root = '/var/www/jdav_web/assets' +broker_url = 'redis://redis:6379/0' +memcached_url = 'cache:11211' + +[mail] +host = 'jdav-town.de' +user = 'user@jdav-town.de' +password = 'password' +default_sending_address = 'info@jdav-town.de' +default_sending_name = 'JDAV Town' + +[database] +host = 'db' +port = 3306 +database = 'kompass' +user = 'kompass' +password = 'foobar' diff --git a/docker/development/docker-compose.yaml b/docker/development/docker-compose.yaml index 1359766..2b43b60 100644 --- a/docker/development/docker-compose.yaml +++ b/docker/development/docker-compose.yaml @@ -8,6 +8,9 @@ x-kompass: UID: ${UID} GID: ${UID} USER: ${USER} + environment: + - KOMPASS_CONFIG_DIR_PATH=/app/config/ + - DJANGO_SETTINGS_MODULE=jdav_web.settings env_file: docker.env restart: always depends_on: @@ -25,6 +28,7 @@ services: - ./../../jdav_web:/app/jdav_web - ./../../docs:/app/docs - ./media:/app/media + - ./config:/app/config:ro ports: - "8000:8000" diff --git a/docker/development/docker.env.example b/docker/development/docker.env.example index 1e1131d..af32d63 100644 --- a/docker/development/docker.env.example +++ b/docker/development/docker.env.example @@ -1,33 +1,4 @@ -DJANGO_ALLOWED_HOST='*' -DJANGO_BASE_URL='localhost:8000' -DJANGO_PROTOCOL='http' - -EMAIL_HOST='example.com' -EMAIL_HOST_USER='foo@example.com' -EMAIL_HOST_PASSWORD='password' -EMAIL_SENDING_ADDRESS='foo@example.com' -EMAIL_SENDING_NAME='My association' - -DOMAIN='example.com' - -DJANGO_DEPLOY=1 -DJANGO_DEBUG=1 - -DJANGO_DATABASE_NAME='kompass' -DJANGO_DATABASE_USER='kompass' -DJANGO_DATABASE_PASSWORD='foobar' -DJANGO_DATABASE_HOST='db' -DJANGO_DATABASE_PORT=3306 - MYSQL_ROOT_PASSWORD='secret' MYSQL_PASSWORD='foobar' MYSQL_USER='kompass' MYSQL_DATABASE='kompass' - -DJANGO_SETTINGS_MODULE='jdav_web.settings' -DJANGO_STATIC_ROOT='/var/www/jdav_web/assets' - -MEMCACHED_URL='cache:11211' -BROKER_URL='redis://redis:6379/0' - -SEND_FROM_ASSOCIATION_EMAIL=0 diff --git a/docker/production/docker-compose.yaml b/docker/production/docker-compose.yaml index 35d8daa..62a483c 100644 --- a/docker/production/docker-compose.yaml +++ b/docker/production/docker-compose.yaml @@ -2,6 +2,9 @@ x-kompass: &kompass image: kompass:production env_file: docker.env + environment: + - DJANGO_SETTINGS_MODULE=jdav_web.settings + - KOMPASS_CONFIG_DIR_PATH=/app/config/ restart: always depends_on: - redis @@ -19,6 +22,7 @@ services: - web_static:/app/static/ - web_static:/var/www/jdav_web/static/ - ./media:/var/www/jdav_web/media/ + - ./config:/app/config:ro nginx: build: ./nginx/ @@ -43,10 +47,14 @@ services: celery_worker: <<: *kompass entrypoint: /app/docker/production/entrypoint-celery-worker.sh + volumes: + - ./config:/app/config:ro celery_beat: <<: *kompass entrypoint: /app/docker/production/entrypoint-celery-beat.sh + volumes: + - ./config:/app/config:ro volumes: uwsgi_data: diff --git a/docker/test/config/settings.toml b/docker/test/config/settings.toml new file mode 100644 index 0000000..f1e5f79 --- /dev/null +++ b/docker/test/config/settings.toml @@ -0,0 +1,31 @@ +[testing] +mail = "test@localhost" + +[django] +deployed = true +debug = true +secret_key = '6_ew6l1r9_4(8=p8quv(e8b+z+k+*wm7&zxx%mcnnec99a!lpw' +allowed_hosts = ['*'] +protocol = 'http' +base_url = 'localhost:8000' +host = 'localhost' +static_root = '/var/www/jdav_web/assets' +broker_url = 'redis://redis:6379/0' +memcached_url = 'cache:11211' + +[mail] +host = 'localhost' +user = 'test' +password = 'password' +default_sending_address = 'test@localhost' + +[database] +host = 'db' +port = 3306 +database = 'kompass' +user = 'kompass' +password = 'password' + +[startpage] +recent_section = 'aktuelles' +reports_section = 'berichte' diff --git a/docker/test/docker-compose.yaml b/docker/test/docker-compose.yaml index 7bf2a02..9c3aad7 100644 --- a/docker/test/docker-compose.yaml +++ b/docker/test/docker-compose.yaml @@ -8,6 +8,8 @@ services: dockerfile: docker/test/Dockerfile env_file: docker.env environment: + - KOMPASS_CONFIG_DIR_PATH=/app/config/ + - DJANGO_SETTINGS_MODULE=jdav_web.settings - DJANGO_TEST_KEEPDB=$DJANGO_TEST_KEEPDB depends_on: - redis @@ -15,6 +17,7 @@ services: - db entrypoint: /app/docker/test/entrypoint-master.sh volumes: + - ./config:/app/config:ro - type: bind source: ./htmlcov/ target: /app/jdav_web/htmlcov/ diff --git a/docker/test/docker.env b/docker/test/docker.env index 2e20f64..de229c2 100644 --- a/docker/test/docker.env +++ b/docker/test/docker.env @@ -1,28 +1,4 @@ -DJANGO_ALLOWED_HOST='*' -DJANGO_BASE_URL='localhost:8000' -DJANGO_PROTOCOL='http' - -EMAIL_HOST='localhost' -EMAIL_HOST_USER='test' -EMAIL_HOST_PASSWORD='password' -EMAIL_SENDING_ADDRESS='test@localhost' - -DJANGO_DEPLOY=1 -DJANGO_DEBUG=1 - -DJANGO_DATABASE_NAME='kompass' -DJANGO_DATABASE_USER='kompass' -DJANGO_DATABASE_PASSWORD='password' -DJANGO_DATABASE_HOST='db' -DJANGO_DATABASE_PORT=3306 - MYSQL_ROOT_PASSWORD='secretpassword' MYSQL_PASSWORD='password' MYSQL_USER='kompass' MYSQL_DATABASE='kompass' - -DJANGO_SETTINGS_MODULE='jdav_web.settings' -DJANGO_STATIC_ROOT='/var/www/jdav_web/assets' - -MEMCACHED_URL='cache:11211' -BROKER_URL='redis://redis:6379/0' diff --git a/jdav_web/jdav_web/settings/__init__.py b/jdav_web/jdav_web/settings/__init__.py index 85bc5a1..1fe9471 100644 --- a/jdav_web/jdav_web/settings/__init__.py +++ b/jdav_web/jdav_web/settings/__init__.py @@ -12,6 +12,42 @@ https://docs.djangoproject.com/en/1.10/ref/settings/ from split_settings.tools import optional, include import os +import tomli + +CONFIG_DIR_PATH = os.environ.get('KOMPASS_CONFIG_DIR_PATH', '') +SETTINGS_FILE = os.environ.get('KOMPASS_SETTINGS_FILE', 'settings.toml') +TEXTS_FILE = os.environ.get('KOMPASS_TEXTS_FILE', 'texts.toml') + +with open(os.path.join(CONFIG_DIR_PATH, SETTINGS_FILE), 'rb') as f: + config = tomli.load(f) + +if os.path.exists(os.path.join(CONFIG_DIR_PATH, TEXTS_FILE)): + with open(os.path.join(CONFIG_DIR_PATH, TEXTS_FILE), 'rb') as f: + texts = tomli.load(f) +else: + texts = {} + + +def get_var(*keys, default='', dictionary=config): + """ + Get a variable from given config dictionary. The passed keys are used + for nested retrieval from the dictionary. + """ + cfg = dictionary + for key in keys: + if key not in cfg: + return default + else: + cfg = cfg[key] + return cfg + + +def get_text(*keys, default=''): + """ + Get a text from the `texts.toml`. + """ + return get_var(*keys, default=default, dictionary=texts) + base_settings = [ 'local.py', diff --git a/jdav_web/jdav_web/settings/components/base.py b/jdav_web/jdav_web/settings/components/base.py index bbe5684..ca336b2 100644 --- a/jdav_web/jdav_web/settings/components/base.py +++ b/jdav_web/jdav_web/settings/components/base.py @@ -1,26 +1,25 @@ -deployed = '1' == os.environ.get('DJANGO_DEPLOY', '0') +deployed = get_var('django', 'deployed', default=False) # 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') +SECRET_KEY = get_var('django', 'secret_key', default='secret') # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = os.environ.get('DJANGO_DEBUG', '1') == '1' +DEBUG = get_var('django', 'debug', default=True) -ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOST', '').split(",") +ALLOWED_HOSTS = get_var('django', 'allowed_hosts', default=["*"]) # 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) +HOST = get_var('django', 'host', default='localhost:8000') +PROTOCOL = get_var('django', 'protocol', default='https') +BASE_URL = get_var('django', 'base_url', default=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_ROOT = get_var('django', 'media_root', + default=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 @@ -83,7 +82,8 @@ ROOT_URLCONF = 'jdav_web.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'templates')], + 'DIRS': [os.path.join(CONFIG_DIR_PATH, 'templates'), + os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -131,8 +131,7 @@ STATICFILES_DIRS = [ # 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/static') +STATIC_ROOT = get_var('django', 'static_root', default='/var/www/jdav_web/static') # Locale files (translations) @@ -140,7 +139,7 @@ STATIC_ROOT = os.environ.get('DJANGO_STATIC_ROOT', LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),) # Celery and Redis setup -BROKER_URL = os.environ.get('BROKER_URL', 'redis://localhost:6379/0') +BROKER_URL = get_var('django', 'broker_url', default='redis://localhost:6379/0') # password hash algorithms used @@ -194,3 +193,6 @@ MARKDOWNIFY = { # allowed characters in names appearing in urls on the website STARTPAGE_URL_NAME_PATTERN = "[\w\-: *]" + +# admins to contact on error messages +ADMINS = get_var('section', 'admins', default=[]) diff --git a/jdav_web/jdav_web/settings/components/cache.py b/jdav_web/jdav_web/settings/components/cache.py index 8472132..512a2fc 100644 --- a/jdav_web/jdav_web/settings/components/cache.py +++ b/jdav_web/jdav_web/settings/components/cache.py @@ -1,7 +1,7 @@ CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache', - 'LOCATION': os.environ.get('MEMCACHED_URL', '127.0.0.1:11211'), + 'LOCATION': get_var('django', 'memcached_url', default='127.0.0.1:11211'), 'OPTIONS': { 'no_delay': True, 'ignore_exc': True, diff --git a/jdav_web/jdav_web/settings/components/database.py b/jdav_web/jdav_web/settings/components/database.py index 5b34e25..6ff11b3 100644 --- a/jdav_web/jdav_web/settings/components/database.py +++ b/jdav_web/jdav_web/settings/components/database.py @@ -4,11 +4,11 @@ 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') + 'NAME': get_var('database', 'database', default='jdav_db'), + 'USER': get_var('database', 'user', default='user'), + 'PASSWORD': get_var('database', 'password', default='secret'), + 'HOST': get_var('database', 'host', default='127.0.0.1'), + 'PORT': get_var('database', 'port', default=5432) } } diff --git a/jdav_web/jdav_web/settings/components/emails.py b/jdav_web/jdav_web/settings/components/emails.py index a93ec23..c8a1c11 100644 --- a/jdav_web/jdav_web/settings/components/emails.py +++ b/jdav_web/jdav_web/settings/components/emails.py @@ -1,10 +1,10 @@ # 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_HOST = get_var('mail', 'host', default='localhost') +EMAIL_PORT = get_var('mail', 'port', default=587 if deployed else 25) +EMAIL_HOST_USER = get_var('mail', 'user', default='user') +EMAIL_HOST_PASSWORD = get_var('mail', 'password', default='secret') +EMAIL_USE_TLS = get_var('mail', 'tls', default=True if deployed else False) EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend' # Celery Email Setup @@ -13,5 +13,5 @@ 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') -DEFAULT_SENDING_NAME = os.environ.get('EMAIL_SENDING_NAME', 'Kompass') +DEFAULT_SENDING_MAIL = get_var('mail', 'default_sending_address', default='kompass@localhost') +DEFAULT_SENDING_NAME = get_var('mail', 'default_sending_name', default='Kompass') diff --git a/jdav_web/jdav_web/settings/components/texts.py b/jdav_web/jdav_web/settings/components/texts.py index 9bf4021..5659344 100644 --- a/jdav_web/jdav_web/settings/components/texts.py +++ b/jdav_web/jdav_web/settings/components/texts.py @@ -1,6 +1,6 @@ # mail texts -CONFIRM_MAIL_TEXT = """Hallo {name}, +CONFIRM_MAIL_TEXT = get_text('confirm_mail', default="""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 @@ -9,9 +9,9 @@ folgenden Link: {link} Viele Grüße -Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION } +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION }) -NEW_UNCONFIRMED_REGISTRATION = """Hallo {name}, +NEW_UNCONFIRMED_REGISTRATION = get_text('new_unconfirmed_registration', default="""Hallo {name}, für deine Gruppe {group} liegt eine neue unbestätigte Reservierung vor. Die Person hat bereits ihre E-Mailadressen bestätigt und ihr Anmeldeformular hochgeladen. Bitte prüfe die Registrierung eingehend und @@ -20,13 +20,15 @@ bestätige falls möglich. Zu der Registrierung kommst du hier: {link} Viele Grüße -Dein KOMPASS""" +Dein KOMPASS""") -GROUP_TIME_AVAILABLE_TEXT = """Die Gruppenstunde findet jeden {weekday} von {start_time} bis {end_time} Uhr statt.""" +GROUP_TIME_AVAILABLE_TEXT = get_text('group_time_available', + default="""Die Gruppenstunde findet jeden {weekday} von {start_time} bis {end_time} Uhr statt.""") -GROUP_TIME_UNAVAILABLE_TEXT = """Bitte erfrage die Gruppenzeiten bei der Gruppenleitung ({contact_email}).""" +GROUP_TIME_UNAVAILABLE_TEXT = get_text('group_time_unavailable', + default="""Bitte erfrage die Gruppenzeiten bei der Gruppenleitung ({contact_email}).""") -INVITE_TEXT = """Hallo {{name}}, +INVITE_TEXT = get_text('invite', default="""Hallo {{name}}, wir haben gute Neuigkeiten für dich. Es ist ein Platz in der Jugendgruppe {group_name} {group_link}freigeworden. {group_time} @@ -50,10 +52,10 @@ Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s. Viele Grüße Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL, - 'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK } + 'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK }) -LEAVE_WAITINGLIST_TEXT = """Hallo {name}, +LEAVE_WAITINGLIST_TEXT = get_text('leave_waitinglist', default="""Hallo {name}, du hast dich erfolgreich von der Warteliste abgemeldet. Falls du zu einem späteren Zeitpunkt wieder der Warteliste beitreten möchtest, kannst du das über unsere Webseite machen. @@ -61,10 +63,10 @@ Zeitpunkt wieder der Warteliste beitreten möchtest, kannst du das über unsere Falls du dich nicht selbst abgemeldet hast, wende dich bitte umgehend an %(RESPONSIBLE_MAIL)s. Viele Grüße -Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL } +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }) -WAIT_CONFIRMATION_TEXT = """Hallo {name}, +WAIT_CONFIRMATION_TEXT = get_text('wait_confirmation', default="""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 @@ -79,15 +81,15 @@ Das ist Erinnerung Nummer {reminder} von {max_reminder_count}. Nach Erinnerung N du automatisch entfernt. Viele Grüße -Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION } +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION }) -UNSUBSCRIBE_CONFIRMATION_TEXT = """Klicke auf den Link, um dich vom Newsletter der JDAV %(SEKTION)s abzumelden +UNSUBSCRIBE_CONFIRMATION_TEXT = get_text('unsubscribe_confirmation', default="""Klicke auf den Link, um dich vom Newsletter der JDAV %(SEKTION)s abzumelden -{link}""" % { 'SEKTION': SEKTION } +{link}""" % { 'SEKTION': SEKTION }) -NOTIFY_MOST_ACTIVE_TEXT = """Hallo {name}! +NOTIFY_MOST_ACTIVE_TEXT = get_text('notify_most_active', default="""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 @@ -97,10 +99,10 @@ 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 } +Dein:e Jugendreferent:in""" % { 'SEKTION': SEKTION }) -ECHO_TEXT = """Hallo {name}, +ECHO_TEXT = get_text('echo', default="""Hallo {name}, um unsere Daten auf dem aktuellen Stand zu halten und sicherzugehen, dass du weiterhin ein Teil unserer Jugendarbeit bleiben möchtest, brauchen wir eine @@ -119,10 +121,10 @@ gelöscht und du 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 } +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }) -PREPEND_INCOMPLETE_REGISTRATION_TEXT = """WICHTIGE MITTEILUNG +PREPEND_INCOMPLETE_REGISTRATION_TEXT = get_text('prepend_incomplete_registration', default="""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 @@ -132,10 +134,10 @@ kannst Du unter folgendem Link herunterladen: **************** -""" % { 'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK } +""" % { 'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK }) -MAIL_FOOTER = """ +MAIL_FOOTER = get_text('mail_footer', default=""" **************** @@ -144,10 +146,10 @@ 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 } +{link}""" % { 'SEKTION': SEKTION }) -INVITE_AS_USER_TEXT = """Hallo {name}, +INVITE_AS_USER_TEXT = get_text('invite_as_user', default="""Hallo {name}, du bist Jugendleiter*in in der Sektion %(SEKTION)s. Die Verwaltung unserer Jugendgruppen, Ausfahrten und Finanzen erfolgt in unserer Online Plattform Kompass. Deine Stammdaten sind @@ -159,10 +161,10 @@ und wähle ein Passwort. Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s. Viele Grüße -Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL } +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }) -UPLOAD_REGISTRATION_FORM_TEXT = """Hallo {name}, +UPLOAD_REGISTRATION_FORM_TEXT = get_text('upload_registration_form', default="""Hallo {name}, vielen Dank für deine Anmeldung in der JDAV %(SEKTION)s. Bevor es richtig losgehen kann, brauchen wir noch die Bestätigung deiner Daten und die Zustimmung zu unseren Teilnahmebedingungen. @@ -177,9 +179,9 @@ Bist du noch nicht volljährig? Dann muss eine erziehungsberechtigte Person das Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s. Viele Grüße -Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL } +Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }) -ADDRESS = """JDAV %(SEKTION)s +ADDRESS = get_text('address', default="""JDAV %(SEKTION)s %(STREET)s -%(PLACE)s""" % { 'SEKTION': SEKTION, 'STREET': SEKTION_STREET, 'PLACE': SEKTION_TOWN } +%(PLACE)s""" % { 'SEKTION': SEKTION, 'STREET': SEKTION_STREET, 'PLACE': SEKTION_TOWN }) diff --git a/jdav_web/jdav_web/settings/local.py b/jdav_web/jdav_web/settings/local.py index d2bd9eb..20c8c13 100644 --- a/jdav_web/jdav_web/settings/local.py +++ b/jdav_web/jdav_web/settings/local.py @@ -1,75 +1,74 @@ # 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" -SEKTION_BOARD_MAIL = "vorstand@alpenverein-heidelberg.de" -SEKTION_CRISIS_INTERVENTION_MAIL = "krisenmanagement@alpenverein-heidelberg.de" -SEKTION_IBAN = "DE22 6729 0000 0000 1019 40" -SEKTION_ACCOUNT_HOLDER = "Deutscher Alpenverein Sektion Heidelberg 1869" - -RESPONSIBLE_MAIL = "jugendreferat@jdav-hd.de" -DIGITAL_MAIL = "digitales@jdav-hd.de" +SEKTION = get_var('section', 'name', default='Heyo') +SEKTION_STREET = get_var('section', 'street', default='Street') +SEKTION_TOWN = get_var('section', 'town', default='12345 Town') +SEKTION_TELEPHONE = get_var('section', 'telephone', default='0123456789') +SEKTION_TELEFAX = get_var('section', 'telefax', default=SEKTION_TELEPHONE) +SEKTION_CONTACT_MAIL = get_var('section', 'contact_mail', default='info@example.org') +SEKTION_BOARD_MAIL = get_var('section', 'board_mail', default=SEKTION_CONTACT_MAIL) +SEKTION_CRISIS_INTERVENTION_MAIL = get_var('section', 'crisis_intervention_mail', + default=SEKTION_BOARD_MAIL) +SEKTION_IBAN = get_var('section', 'iban', default='Foo 123') +SEKTION_ACCOUNT_HOLDER = get_var('section', 'account_holder', + default='Foo') + +RESPONSIBLE_MAIL = get_var('section', 'responsible_mail', default='foo@example.org') +DIGITAL_MAIL = get_var('section', 'digital_mail', default='bar@example.org') # LJP -V32_HEAD_ORGANISATION = """JDAV Baden-Württemberg -Rotebühlstraße 59A -70178 Stuttgart - -info@jdav-bw.de -0711 - 49 09 46 00""" - -LJP_CONTRIBUTION_PER_DAY = 25 +V32_HEAD_ORGANISATION = get_var('LJP', 'v32_head_organisation', default='not configured') +LJP_CONTRIBUTION_PER_DAY = get_var('LJP', 'contribution_per_day', default=25) # echo -ECHO_PASSWORD_BIRTHDATE_FORMAT = '%d.%m.%Y' -ECHO_GRACE_PERIOD = 30 +# used to generate the personalized echo password +ECHO_PASSWORD_BIRTHDATE_FORMAT = get_var('echo', 'password_birthdate_format', default='%d.%m.%Y') +# grace period in days after which echo keys expire +ECHO_GRACE_PERIOD = get_var('echo', 'grace_period', default=30) -# misc +# Waiting list configuration parameters, all numbers are in days -CONGRATULATE_MEMBERS_MAX = 10 -MAX_AGE_GOOD_CONDUCT_CERTIFICATE_MONTHS = 24 -ALLOWED_EMAIL_DOMAINS_FOR_INVITE_AS_USER = ('alpenverein-heidelberg.de', ) +GRACE_PERIOD_WAITING_CONFIRMATION = get_var('waitinglist', 'grace_period_confirmation', default=30) +WAITING_CONFIRMATION_FREQUENCY = get_var('waitinglist', 'confirmation_frequency', default=90) +CONFIRMATION_REMINDER_FREQUENCY = get_var('waitinglist', 'confirmation_reminder_frequency', default=30) +MAX_REMINDER_COUNT = get_var('waitinglist', 'max_reminder_count', default=3) -# mail mode +# misc -SEND_FROM_ASSOCIATION_EMAIL = os.environ.get('SEND_FROM_ASSOCIATION_EMAIL', '0') == '1' +# the maximal number of members that get sent congratulations for highest activity on aprils fools day +CONGRATULATE_MEMBERS_MAX = get_var('misc', 'congratulate_members_max', default=10) +# expiry duration of a good conduct certificate in months +MAX_AGE_GOOD_CONDUCT_CERTIFICATE_MONTHS = get_var('misc', 'max_age_good_conduct_certificate_months', default=24) +# accepted email domains for inviting users +ALLOWED_EMAIL_DOMAINS_FOR_INVITE_AS_USER = get_var('misc', 'allowed_email_domains_for_invite_as_user', + default=['example.org']) +# send all mails from the assocation's contact mail or from personal association mails +SEND_FROM_ASSOCIATION_EMAIL = get_var('misc', 'send_from_association_email', default=False) +# domain for association email and generated urls +DOMAIN = get_var('misc', 'domain', default='example.org') # finance -ALLOWANCE_PER_DAY = 22 -MAX_NIGHT_COST = 11 +ALLOWANCE_PER_DAY = get_var('finance', 'allowance_per_day', default=22) +MAX_NIGHT_COST = get_var('finance', 'max_night_cost', default=11) -CLOUD_LINK = os.environ.get('CLOUD_LINK', 'https://startpage.com') -DAV_360_LINK = os.environ.get('DAV_360_LINK', 'https://dav360.de') -WIKI_LINK = os.environ.get('WIKI_LINK', 'https://wikipedia.org') -DOCS_LINK = os.environ.get('DOCS_LINK', 'https://jdav-hd.de/static/docs/') +# links -# Admin setup +CLOUD_LINK = get_var('links', 'cloud', default='https://startpage.com') +DAV_360_LINK = get_var('links', 'dav_360', default='https://dav360.de') +WIKI_LINK = get_var('links', 'wiki', default='https://wikipedia.org') +DOCS_LINK = get_var('links', 'docs', default='https://github.com/chrisflav/kompass') +REGISTRATION_FORM_DOWNLOAD_LINK = get_var('links', 'registration_form', default='https://startpage.com') -ADMINS = (('admin', 'christian@merten-moser.de'),) +# startpage -# Waiting list configuration parameters, all numbers are in days - -GRACE_PERIOD_WAITING_CONFIRMATION = 30 -WAITING_CONFIRMATION_FREQUENCY = 90 -CONFIRMATION_REMINDER_FREQUENCY = 30 -MAX_REMINDER_COUNT = 3 +STARTPAGE_REDIRECT_URL = get_var('startpage', 'redirect_url', default='') +ROOT_SECTION = get_var('startpage', 'root_section', default='about') +RECENT_SECTION = get_var('startpage', 'recent_section', default='recent') +REPORTS_SECTION = get_var('startpage', 'reports_section', default='reports') # testing -TEST_MAIL = "post@flavigny.de" - -REGISTRATION_FORM_DOWNLOAD_LINK = os.environ.get('REGISTRATION_FORM_DOWNLOAD_LINK', 'https://startpage.com') - -DOMAIN = os.environ.get('DOMAIN', 'example.com') - -STARTPAGE_REDIRECT_URL = 'https://jdav-hd.de' -ROOT_SECTION = os.environ.get('ROOT_SECTION', 'wir') -RECENT_SECTION = 'aktuelles' -REPORTS_SECTION = 'berichte' +TEST_MAIL = get_var('testing', 'mail', default='test@localhost')