12-05-2026 Frontend dev
This commit is contained in:
parent
405df0a122
commit
5b8bdf4182
779 changed files with 480564 additions and 6241 deletions
127
dev/legacy_logging/ENTWICKLUNGSPLAN.md
Normal file
127
dev/legacy_logging/ENTWICKLUNGSPLAN.md
Normal 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.
|
||||
133
dev/legacy_logging/UMSETZUNGSSTAND.md
Normal file
133
dev/legacy_logging/UMSETZUNGSSTAND.md
Normal 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue