-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
161 lines (122 loc) · 6.11 KB
/
Copy path.env.example
File metadata and controls
161 lines (122 loc) · 6.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
##############################################
# 🔐 Sicherheit & Kernkonfiguration
##############################################
# Geheimer Schlüssel für die Flask-App (z. B. zur Signierung von Sessions)
# PFLICHT: ohne SECRET_KEY, FERNET_KEY und PHOTO_ENCRYPTION_KEY startet die App nicht.
# Es gibt keine unsicheren Fallback-Werte mehr. Fuer lokale Entwicklung ohne .env kann
# OPENPASS_DEV_INSECURE=1 gesetzt werden; dann werden pro Prozess Zufallswerte erzeugt.
SECRET_KEY=change-this-secret-key
# Fernet-Schlüssel für verschlüsselte Inhalte (Base64, z. B. `python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"`)
FERNET_KEY=your-generated-fernet-key
# Schlüssel für AES-Foto-Verschlüsselung (hexadezimal, z. B. `openssl rand -hex 32`)
PHOTO_ENCRYPTION_KEY=your-64-char-hex-key # genau 32 Byte hex: openssl rand -hex 32
# Token-Gültigkeitsdauer in Sekunden (Standard: 3600 = 1 Stunde)
TOKEN_MAX_AGE_SECONDS=3600
# Absolute Session-Lebensdauer in Sekunden (Standard: 43200 = 12 Stunden)
SESSION_LIFETIME_SECONDS=43200
# Secure-Flag fuer das Session-Cookie. Nur fuer lokale HTTP-Entwicklung auf 0 setzen.
SESSION_COOKIE_SECURE=1
# Maximale Groesse eines Request-Bodys / Foto-Uploads in Bytes (Standard: 8 MB)
MAX_UPLOAD_BYTES=8388608
# Groesste erlaubte Aufloesung eines Foto-Uploads, in Pixeln (Breite x Hoehe).
# MAX_UPLOAD_BYTES begrenzt nur die Bytes auf der Leitung: ein gleichfarbiges PNG mit
# 13000x13000 passt in 160 KB und belegt entschluesselt rund 500 MB.
MAX_PHOTO_PIXELS=50000000
# HSTS. Vorgabe ist bewusst konservativ (1 Tag), weil ein langer max-age nicht schnell
# zurueckgenommen werden kann - Browser merken ihn sich fuer die volle Dauer.
# Nach bestaetigt stabilem HTTPS auf 31536000 erhoehen.
HSTS_MAX_AGE=86400
# includeSubDomains wuerde auch alle Geschwister-Hosts derselben Domain auf HTTPS
# festnageln. Nur einschalten, wenn das fuer die gesamte Domain gewollt ist.
HSTS_INCLUDE_SUBDOMAINS=0
# Anzahl vertrauenswuerdiger Reverse-Proxies vor der App (Traefik/Caddy = 1). Wird fuer
# X-Forwarded-For ausgewertet; ohne korrekten Wert sind die Rate-Limits ein einziger
# gemeinsamer Zaehler und die IP-Adressen im Auth-Log wertlos.
TRUSTED_PROXY_COUNT=1
##############################################
# 🌐 Server & URL-Konfiguration
##############################################
# SERVER_NAME für Flask (z. B. ausweis.verein.de)
SERVER_NAME=ausweis.example.org
# Für URL-Generierung (http oder https)
PREFERRED_URL_SCHEME=https
##############################################
# 🔐 OAuth (z. B. Rocket.Chat oder Authentik)
##############################################
# Name des OAuth-Anbieters (nur zur Anzeige)
OAUTH_NAME=Rocket.Chat
# OpenID-Discovery-URL (z. B. https://chat.example.org/.well-known/openid-configuration)
OAUTH_DISCOVERY_URL=
# OAuth Client-ID & Secret (aus dem Backend der OAuth-App)
OAUTH_CLIENT_ID=
OAUTH_CLIENT_SECRET=
# Umgang mit E-Mail-Adressen, fuer die der IdP nicht buergt (email_verified != true):
# require - Login ablehnen
# warn - Login zulassen, aber jeden Fall protokollieren (Standard)
# off - Login stillschweigend zulassen
# Rocket.Chat meldet email_verified=false, solange Accounts_EmailVerification dort
# deaktiviert ist. Erst Verifikation im IdP aktivieren, dann hier auf require gehen.
OAUTH_EMAIL_VERIFICATION=warn
# Alternativ: manuelle OAuth-Endpunkte (falls kein Discovery verwendet wird)
OAUTH_AUTHORIZE_URL=https://chat.example.org/oauth/authorize
OAUTH_TOKEN_URL=https://chat.example.org/oauth/token
OAUTH_API_URL=https://chat.example.org/api/v1/
OAUTH_USERINFO_URL=https://chat.example.org/oauth/userinfo
##############################################
# 📧 E-Mail-Versand (SMTP)
##############################################
SMTP_SERVER=smtp.example.org
SMTP_PORT=587
SMTP_USERNAME=username@example.org
SMTP_PASSWORD=secure-password
# Absenderinformationen für versendete Mails
MAIL_SENDER_NAME=RCB Ausweis-System
MAIL_SENDER_ADDRESS=ausweis@example.org
##############################################
# 🛡️ Sicherheit & Rate Limiting
##############################################
# Redis URL für Ratelimit-Speicher
RATE_LIMIT_STORAGE=redis://localhost:6379
# Login-Versuche per E-Mail beschränken
EMAIL_LOGIN_RATE_LIMIT=5 per hour
# Limit fuer die billigen, unauthentifizierten Status-Endpunkte
# (/can_request_email_login, /email_check_limit) und fuer /csp-report.
STATUS_RATE_LIMIT=60 per hour
CSP_REPORT_RATE_LIMIT=60 per hour
# Verhalten, wenn die Einmal-Markierung fuer E-Mail-Login-Links nicht in Redis
# geschrieben werden kann:
# warn - Login erlauben und laut protokollieren (Vorgabe; ein Redis-Ausfall
# wuerde sonst alle Mitglieder aussperren)
# require - Login ablehnen
# Signatur und 15-Minuten-Frist des Tokens gelten in beiden Faellen.
EMAIL_LOGIN_REPLAY=warn
# CSP-Report-Endpunkt (optional)
CSP_REPORT_URI=https://ausweis.example.org/csp-report
# CSP durchsetzen statt nur zu melden. Erst einschalten, wenn logs/csp.log sauber ist;
# Alpine.js benoetigt dafuer zusaetzlich 'unsafe-eval' oder den CSP-Build von Alpine.
CSP_ENFORCE=0
# Limit fuer den Versand der Mitgliedsbestaetigung per E-Mail
SEND_CARD_RATE_LIMIT=10 per hour
##############################################
# 📥 Mitgliederverwaltung
##############################################
# Pfad zur Mitglieder-Datenbank (SQLite-Datei oder PostgreSQL-URI, je nach Verwendung)
MEMBER_DB=members.db
# Liste der Admin-Emails, durch Komma getrennt (muss mit Login-Adresse übereinstimmen)
ADMIN_EMAILS=admin1@example.org,admin2@example.org
# CSV-Trennzeichen für Uploads (z. B. ; oder ,)
CSV_DELIMITER=;
##############################################
# 📜 Logging
##############################################
# Haupt-Logverzeichnis
LOG_PATH=logs
# Optional anderes Logverzeichnis für Serverlogs
SERVER_LOG_PATH=
# Loglevels (DEBUG, INFO, WARNING, ERROR, CRITICAL)
LOG_LEVEL=INFO
CONSOLE_LOG_LEVEL=INFO
IMPORT_LOG_LEVEL=INFO
AUTH_LOG_LEVEL=INFO
TASK_LOG_LEVEL=INFO
CSP_LOG_LEVEL=WARNING