12-05-2026 Frontend dev
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run

This commit is contained in:
Kevin Adametz 2026-05-12 18:32:33 +02:00
parent 405df0a122
commit 5b8bdf4182
779 changed files with 480564 additions and 6241 deletions

View file

@ -0,0 +1,127 @@
# Legacy Logging - Entwicklungsplan
## Ziel
Im Legacy-Projekt `_businessportal24.com` sollen taegliche Textlogs entstehen, damit aktive Benutzer, API-Frequenz und veroeffentlichte Pressemitteilungen bis zum Relaunch nachvollziehbar bleiben.
Die Logs werden bewusst ausserhalb von `web/` geschrieben:
```text
_businessportal24.com/log/activity/
```
## Log-Dateien
Pro Tag wird eine Datei je Ereignistyp erzeugt:
```text
login-success-YYYY-MM-DD.log
login-failed-YYYY-MM-DD.log
api-success-YYYY-MM-DD.log
api-failed-YYYY-MM-DD.log
publications-YYYY-MM-DD.log
```
Format ist JSON Lines: eine JSON-Struktur pro Zeile. Damit bleiben die Dateien einfache Textdateien, sind aber mit `jq`, `grep`/`rg` oder Skripten gut auswertbar.
## Erfasste Ereignisse
### Erfolgreicher direkter Login
Quelle:
- Frontend-Login ueber `plugins/PressePortalPlugin/modules/sfGuardAuth/actions/actions.class.php`
- Backend/Admin-Login ueber `plugins/PressePortalPlugin/modules/adminSfGuardAuth/actions/actions.class.php`
- Erfolg wird zentral in `apps/frontend/lib/myUser.class.php` und `apps/backend/lib/myUser.class.php` protokolliert.
Wichtige Felder:
- Zeitpunkt
- App (`frontend`/`backend`)
- Quelle (`login`/`admin`)
- User-ID
- Username
- Profil-E-Mail
- HTTP-Methode
- URI
- IP
- User-Agent
### Fehlgeschlagener direkter Login
Quelle:
- Frontend-Login-Aktion
- Backend/Admin-Login-Aktion
Wichtige Felder:
- Zeitpunkt
- Quelle (`login`/`admin`)
- Grund, aktuell `invalid_credentials`
- eingegebener Username
- HTTP-Metadaten
### Erfolgreiche API-Authentifizierung
Quelle:
- `plugins/PressePortalPlugin/lib/filters/ApiKeyGuardAuthFilter.class.php`
- Jeder API-Request mit gueltigem `X-ApiKey` wird einzeln protokolliert.
Wichtige Felder:
- Zeitpunkt
- Quelle `api`
- User-ID
- Username
- Profil-E-Mail
- HTTP-Methode
- URI
- IP
- User-Agent
### Fehlgeschlagene API-Authentifizierung
Quelle:
- `ApiKeyGuardAuthFilter`
Wichtige Felder:
- Zeitpunkt
- Quelle `api`
- Grund `missing_api_key` oder `invalid_api_key`
- uebermittelter API-Key
- HTTP-Metadaten
### Veroeffentlichungen von Pressemitteilungen
Quelle:
- Doctrine-Hook in `lib/model/doctrine/PressePortalPlugin/PressRelease.class.php`
- Protokolliert wird der Statuswechsel zu `published`.
Wichtige Felder:
- ausfuehrender Nutzer/Admin/API-User (`published_by`)
- Besitzer der Pressemitteilung (`owner`)
- Pressemitteilung-ID, Titel, Sprache, Status
- Firma/Pressemappe, falls vorhanden
- Pressekontakte, falls vorhanden
- HTTP-Metadaten
## Umsetzungsstrategie
1. Zentrale Logger-Klasse in `_businessportal24.com/lib/LegacyActivityLogger.class.php` anlegen.
2. Erfolgreiche Logins in den jeweiligen `myUser::signIn()`-Klassen loggen.
3. Fehlgeschlagene Login-POSTs in den Auth-Actions protokollieren.
4. API-Erfolg und API-Fehler im `ApiKeyGuardAuthFilter` protokollieren.
5. Veroeffentlichungen ueber `PressRelease::postSave()` bei Statuswechsel zu `published` protokollieren.
6. Syntaxpruefung fuer alle geaenderten PHP-Dateien ausfuehren.
## Deployment-Hinweise
Auf dem Live-Server muessen die geaenderten Dateien uebernommen werden. Das Log-Verzeichnis wird automatisch erstellt, sofern der PHP-Prozess Schreibrechte im Symfony-Log-Verzeichnis besitzt.
Wenn keine Dateien entstehen, zuerst die Schreibrechte von `_businessportal24.com/log/` pruefen.

View file

@ -0,0 +1,133 @@
# Legacy Logging - Umsetzungsstand
Stand: 2026-05-11
Update 2026-05-12: Auf dem Live-Server wurden Login- und API-Logs erfolgreich erzeugt, aber noch keine `publications-YYYY-MM-DD.log`. Ursache war sehr wahrscheinlich der Doctrine-1-Zeitpunkt im `postSave()`-Hook: Die aktuellen Modified-Felder sind dort bereits zurueckgesetzt. Der Hook nutzt jetzt `getLastModified(true)`.
## Status
Die erste Implementierung ist vorbereitet. Sie protokolliert erfolgreiche und fehlgeschlagene Logins, erfolgreiche und fehlgeschlagene API-Authentifizierungen sowie Veroeffentlichungen von Pressemitteilungen.
## Angelegte Datei
```text
_businessportal24.com/lib/LegacyActivityLogger.class.php
```
Zweck:
- schreibt JSONL-Tagesdateien nach `_businessportal24.com/log/activity/`
- sammelt HTTP-Metadaten
- formatiert Nutzer-, Pressemitteilungs-, Firmen- und Kontaktdaten
- arbeitet unabhaengig vom deaktivierten Symfony-Produktivlogger
## Geaenderte Legacy-Dateien
```text
_businessportal24.com/apps/frontend/lib/myUser.class.php
```
Erfasst erfolgreiche Frontend-Logins und erfolgreiche API-Authentifizierungen, weil beide am Ende ueber `signIn()` laufen.
```text
_businessportal24.com/apps/backend/lib/myUser.class.php
```
Erfasst erfolgreiche Backend/Admin-Logins.
```text
_businessportal24.com/plugins/PressePortalPlugin/lib/filters/ApiKeyGuardAuthFilter.class.php
```
Erfasst jeden API-Request mit gueltigem `X-ApiKey` ueber den anschliessenden `signIn()`-Pfad und schreibt fehlgeschlagene API-Authentifizierungen direkt in `api-failed-YYYY-MM-DD.log`.
```text
_businessportal24.com/plugins/PressePortalPlugin/modules/sfGuardAuth/actions/actions.class.php
```
Erfasst fehlgeschlagene Frontend-Login-Versuche.
```text
_businessportal24.com/plugins/PressePortalPlugin/modules/adminSfGuardAuth/actions/actions.class.php
```
Erfasst fehlgeschlagene Backend/Admin-Login-Versuche.
```text
_businessportal24.com/lib/model/doctrine/PressePortalPlugin/PressRelease.class.php
```
Erfasst Veroeffentlichungen, sobald der Status einer Pressemitteilung auf `published` wechselt. Seit dem Fix vom 2026-05-12 wird im `postSave()`-Hook `getLastModified(true)` verwendet, weil Doctrine 1 die aktuellen Modified-Felder vor `postSave()` bereits in `lastModified` verschiebt.
## Erwartete Log-Dateien
```text
_businessportal24.com/log/activity/login-success-YYYY-MM-DD.log
_businessportal24.com/log/activity/login-failed-YYYY-MM-DD.log
_businessportal24.com/log/activity/api-success-YYYY-MM-DD.log
_businessportal24.com/log/activity/api-failed-YYYY-MM-DD.log
_businessportal24.com/log/activity/publications-YYYY-MM-DD.log
```
## Beispiel: API-Erfolg
```json
{"time":"2026-05-11T13:27:00+02:00","app":"frontend","method":"POST","uri":"https://www.businessportal24.com/service/pressreleases.json","ip":"127.0.0.1","user_agent":"Client","event":"api_auth_success","source":"api","user":{"id":123,"username":"kunde@example.com","email":"kunde@example.com"}}
```
## Beispiel: Veroeffentlichung
```json
{"time":"2026-05-11T13:27:00+02:00","event":"pressrelease_published","source":"api","published_by":{"id":123,"username":"kunde@example.com","email":"kunde@example.com"},"owner":{"id":123,"username":"kunde@example.com","email":"kunde@example.com"},"pressrelease":{"id":456,"title":"Titel","language":"de","status":"published"},"company":{"id":77,"name":"Firma GmbH","email":"info@example.com"},"contacts":[{"id":9,"company_id":77,"first_name":"Max","last_name":"Muster","email":"presse@example.com","phone":"+49..."}]}
```
## Geprueft
- PHP-Syntaxpruefung mit `php -l` fuer alle geaenderten Legacy-PHP-Dateien.
- IDE-Lints fuer alle geaenderten Legacy-PHP-Dateien: keine Fehler.
- 2026-05-12: Fix fuer fehlende Publication-Logs in `PressRelease.class.php` ergaenzt.
## Noch zu pruefen
- Manueller Test im Legacy-System:
- erfolgreicher Frontend-Login
- fehlgeschlagener Frontend-Login
- erfolgreicher Backend-Login
- fehlgeschlagener Backend-Login
- API-Request mit gueltigem `X-ApiKey`
- API-Request ohne/mit falschem `X-ApiKey`
- Veroeffentlichung ueber API
- Veroeffentlichung ueber Kundenlogin
- Veroeffentlichung ueber Admin
## Hinweise
- Es wird jeder API-Request einzeln protokolliert.
- E-Mail-Adressen werden vollstaendig geschrieben. Fehlgeschlagene API-Key-Werte werden ebenfalls vollstaendig protokolliert, damit die Eintraege in der Datenbank wiedergefunden werden koennen.
- Die Dateien duerfen nicht in ein oeffentlich erreichbares Verzeichnis verschoben werden.
## Austauschliste fuer den Live-Server
Diese Dateien muessen auf dem Legacy-Live-Server ausgetauscht bzw. neu hochgeladen werden:
```text
_businessportal24.com/lib/LegacyActivityLogger.class.php
_businessportal24.com/apps/frontend/lib/myUser.class.php
_businessportal24.com/apps/backend/lib/myUser.class.php
_businessportal24.com/plugins/PressePortalPlugin/lib/filters/ApiKeyGuardAuthFilter.class.php
_businessportal24.com/plugins/PressePortalPlugin/modules/sfGuardAuth/actions/actions.class.php
_businessportal24.com/plugins/PressePortalPlugin/modules/adminSfGuardAuth/actions/actions.class.php
_businessportal24.com/lib/model/doctrine/PressePortalPlugin/PressRelease.class.php
```
Nach dem Austausch pruefen, ob das Verzeichnis `_businessportal24.com/log/` fuer den PHP-Prozess beschreibbar ist. Das Unterverzeichnis `activity/` wird automatisch angelegt.
## Austauschliste fuer den Fix vom 2026-05-12
Wenn Login/API-Logs vorhanden sind, aber keine `publications-YYYY-MM-DD.log`, muss nur diese Datei erneut ausgetauscht werden:
```text
_businessportal24.com/lib/model/doctrine/PressePortalPlugin/PressRelease.class.php
```
Danach Symfony-Cache leeren und eine Test-Veroeffentlichung ausloesen.