Bläddra i källkod

updating docs on config file change

Josef Straßl 1 månad sedan
förälder
incheckning
58a2454557
6 ändrade filer med 61 tillägg och 36 borttagningar
  1. 8 7
      README.md
  2. 19 0
      config/app.php
  3. 15 11
      config/mail.php
  4. 7 7
      docs/AI_OVERVIEW.md
  5. 11 10
      docs/OPERATIONS.md
  6. 1 1
      docs/RATE_LIMITING.md

+ 8 - 7
README.md

@@ -41,27 +41,28 @@ Schlankes PHP-Flatfile-Projekt für einen digitalen Mitgliedsantrag (deutsches F
 3. Document Root auf das Projekt-Root setzen.
 4. Schreibrechte für `storage/` sicherstellen (mind. Webserver-User).
 5. Lokale Konfiguration aus Samples erzeugen:
-   - `cp config/app.sample.php config/app.php`
-   - `cp config/mail.sample.php config/mail.php`
+   - `cp config/app.sample.php config/app.local.php`
+   - `cp config/mail.sample.php config/mail.local.php`
 6. Konfiguration anpassen:
-   - `config/app.php` (Admin-Passwort, Kontakt, Disclaimer, Retention, Rate Limit)
-   - `config/mail.php` (Absender, Empfänger)
+   - `config/app.local.php` (Admin-Passwort, Kontakt, Disclaimer, Retention, Rate Limit)
+   - `config/mail.local.php` (Absender, Empfänger)
 7. Admin-Hash setzen:
    - Auf Server: `php -r "echo password_hash('DEIN-PASSWORT', PASSWORD_DEFAULT), PHP_EOL;"`
-   - Ergebnis in `config/app.php -> admin.password_hash`
+   - Ergebnis in `config/app.local.php -> admin.password_hash`
    - Danach `password_plain_fallback` entfernen/leer setzen.
 8. Cronjob einrichten (täglich):
    - `php /pfad/zum/projekt/bin/cleanup.php`
 
 Hinweis:
+- `config/app.php` und `config/mail.php` sind stabile Loader-Dateien im Repo.
 - `config/*.sample.php` sind versionskontrollierte Vorlagen.
-- `config/app.php` und `config/mail.php` sind lokale Produktivdateien und werden per `.gitignore` nicht versioniert.
+- `config/*.local.php` sind lokale Produktivdateien und werden per `.gitignore` nicht versioniert.
 
 ## Sicherheitshinweise
 
 - CSRF aktiv auf POST-Endpunkten.
 - Honeypot + Rate Limit aktiv.
-- Rate Limit fuer Tests deaktivierbar ueber `config/app.php -> rate_limit.enabled = false`.
+- Rate Limit fuer Tests deaktivierbar ueber `config/app.local.php -> rate_limit.enabled = false`.
 - Uploads werden auf Typ, MIME und Größe geprüft.
 - Interne Ordner (`config`, `src`, `storage`, `bin`, `docs`) werden per `.htaccess` blockiert.
 

+ 19 - 0
config/app.php

@@ -0,0 +1,19 @@
+<?php
+
+declare(strict_types=1);
+
+$localPath = __DIR__ . '/app.local.php';
+if (is_file($localPath)) {
+    /** @var array<string, mixed> $config */
+    $config = require $localPath;
+    return $config;
+}
+
+$samplePath = __DIR__ . '/app.sample.php';
+if (is_file($samplePath)) {
+    /** @var array<string, mixed> $config */
+    $config = require $samplePath;
+    return $config;
+}
+
+return [];

+ 15 - 11
config/mail.php

@@ -2,14 +2,18 @@
 
 declare(strict_types=1);
 
-return [
-    'from' => 'antrag@med0.de',
-    'recipients' => [
-        'josef.strassl@check24.de',
-        'josef.strassl@feuerwehr-freising.de',
-    ],
-    'subjects' => [
-        'admin' => 'Neuer Mitgliedsantrag',
-        'applicant' => 'Bestätigung deines Mitgliedsantrags',
-    ],
-];
+$localPath = __DIR__ . '/mail.local.php';
+if (is_file($localPath)) {
+    /** @var array<string, mixed> $config */
+    $config = require $localPath;
+    return $config;
+}
+
+$samplePath = __DIR__ . '/mail.sample.php';
+if (is_file($samplePath)) {
+    /** @var array<string, mixed> $config */
+    $config = require $samplePath;
+    return $config;
+}
+
+return [];

+ 7 - 7
docs/AI_OVERVIEW.md

@@ -52,14 +52,14 @@ Digitaler Mitgliedsantrag für Feuerwehrverein mit Flatfile-Speicherung und Admi
 
 - Neue Formularfelder: `config/form_schema.php`
 - Pflichtregeln ändern: `config/form_schema.php` (`required` / `required_if`)
-- Upload-Typen/Limits: `config/app.php` + optional pro Feld im Schema
-- Admin-Session/Login: `config/app.php` + `src/Admin/Auth.php`
-- Mailtexte/Empfänger: `config/mail.php` + `src/Mail/Mailer.php`
-- Retention-Tage: `config/app.php` + Cron `bin/cleanup.php`
-- Rate-Limit-Parameter: `config/app.php -> rate_limit` (Details: `docs/RATE_LIMITING.md`)
-- Disclaimer-Startseite: `config/app.php -> disclaimer` + `index.php`
+- Upload-Typen/Limits: `config/app.local.php` + optional pro Feld im Schema
+- Admin-Session/Login: `config/app.local.php` + `src/Admin/Auth.php`
+- Mailtexte/Empfänger: `config/mail.local.php` + `src/Mail/Mailer.php`
+- Retention-Tage: `config/app.local.php` + Cron `bin/cleanup.php`
+- Rate-Limit-Parameter: `config/app.local.php -> rate_limit` (Details: `docs/RATE_LIMITING.md`)
+- Disclaimer-Startseite: `config/app.local.php -> disclaimer` + `index.php`
 - Versionskontrollierte Config-Vorlagen: `config/app.sample.php`, `config/mail.sample.php`
-- Lokale Runtime-Configs (nicht versioniert): `config/app.php`, `config/mail.php`
+- Lokale Runtime-Configs (nicht versioniert): `config/app.local.php`, `config/mail.local.php`
 
 ## Harte Regeln
 

+ 11 - 10
docs/OPERATIONS.md

@@ -17,17 +17,18 @@ php /pfad/zum/projekt/bin/cleanup.php
 
 ## Retention
 
-- Drafts: `config/app.php -> retention.draft_days` (Default 14)
-- Submissions: `config/app.php -> retention.submission_days` (Default 90)
+- Drafts: `config/app.local.php -> retention.draft_days` (Default 14)
+- Submissions: `config/app.local.php -> retention.submission_days` (Default 90)
 
 ## Konfiguration (Sample-Setup)
 
 - Versionierte Vorlagen: `config/app.sample.php`, `config/mail.sample.php`
-- Lokale Runtime-Dateien: `config/app.php`, `config/mail.php`
+- Stabile Loader-Dateien im Repo: `config/app.php`, `config/mail.php`
+- Lokale Runtime-Dateien: `config/app.local.php`, `config/mail.local.php`
 - Erstsetup:
-  - `cp config/app.sample.php config/app.php`
-  - `cp config/mail.sample.php config/mail.php`
-- `config/app.php` und `config/mail.php` sind lokal und sollen nicht in Git versioniert werden.
+  - `cp config/app.sample.php config/app.local.php`
+  - `cp config/mail.sample.php config/mail.local.php`
+- `config/*.local.php` sind lokal und sollen nicht in Git versioniert werden.
 
 ## Logs
 
@@ -39,7 +40,7 @@ php /pfad/zum/projekt/bin/cleanup.php
 
 ## Rate Limiting
 
-- Konfiguration: `config/app.php -> rate_limit`
+- Konfiguration: `config/app.local.php -> rate_limit`
 - Persistenz: `storage/rate_limit/`
 - Detaillierte Doku: `docs/RATE_LIMITING.md`
 - Bei erhöhten `429`-Antworten zuerst `requests/window_seconds` prüfen und gegen reale Nutzerlast kalibrieren.
@@ -51,7 +52,7 @@ Regelmäßig sichern:
 
 - `storage/submissions/`
 - `storage/uploads/`
-- `config/`
+- `config/*.local.php`
 
 `storage/drafts/` ist temporär und kann bei Bedarf ausgeschlossen werden.
 
@@ -59,14 +60,14 @@ Regelmäßig sichern:
 
 1. Projektdateien deployen.
 2. Backup von `storage/submissions` und `storage/uploads` zurückspielen.
-3. `config/` wiederherstellen.
+3. `config/*.local.php` wiederherstellen.
 4. Schreibrechte prüfen.
 
 ## Troubleshooting
 
 - Keine Mails: Mailfunktion des Hosters prüfen, `mail.log` ansehen.
 - Upload Fehler: `upload_max_filesize` / `post_max_size` und Schema-Limits prüfen.
-- Login geht nicht: `admin.password_hash` prüfen, ggf. temporär `password_plain_fallback` nutzen.
+- Login geht nicht: `config/app.local.php -> admin.password_hash` prüfen, ggf. temporär `password_plain_fallback` nutzen.
 - ZIP Download fehlgeschlagen: `ZipArchive` Erweiterung auf Hosting prüfen.
 - Viele `429` Antworten: `docs/RATE_LIMITING.md` prüfen, Limits anpassen oder `storage/rate_limit/` kontrollieren.
 - 500 ohne Apache/PHP-Fehlerausgabe: `storage/logs/php_fatal.log` und `storage/logs/php_runtime.log` prüfen.

+ 1 - 1
docs/RATE_LIMITING.md

@@ -14,7 +14,7 @@ Schützt die API gegen Spam, Bot-Traffic und Missbrauch durch zu viele Anfragen
 
 ## Konfiguration
 
-In `config/app.php`:
+In `config/app.local.php`:
 
 - `rate_limit.enabled`
 Globaler Schalter (`true`/`false`). Bei `false` lässt der Limiter alle Requests durch.