No description
  • PHP 79.2%
  • Blade 19.3%
  • JavaScript 1.1%
  • Dockerfile 0.2%
  • Shell 0.2%
Find a file
Markus Thiel a6267b5687
All checks were successful
Tests / phpunit (push) Successful in 1m25s
Build & Push Docker Image / Trigger Portainer redeploy (push) Successful in 0s
Build & Push Docker Image / build (push) Successful in 1m46s
Build & Push Docker Image / quality (push) Successful in 1m28s
SVG-Erkennung: PNG mit SVG-Metadaten nicht mehr verwerfen (0.68.2)
Ein PNG aus einem Vektorprogramm traegt "<svg" in seinem XMP-Metadatenblock.
Svg::looksLikeSvg() suchte die Zeichenfolge irgendwo in den ersten 4 KB, hielt
die Datei fuer ein SVG und schickte sie durch den Sanitizer - der bei einem
Rasterbild null liefert. Das Bild fehlte danach ohne Fehlermeldung.

Die Erkennung wertet jetzt nur noch den Dateianfang. Magic Bytes von PNG, JPEG,
GIF, WebP, BMP, TIFF und PDF schliessen SVG aus; vor einem <svg> duerfen nur
XML-Deklaration, Kommentare und DOCTYPE stehen. Svg::istSvg() bewertet Inhalt
und Content-Type zusammen.

Derselbe Fehler trat in Eveni auf (0.378.1): Dort fehlten Event-Logo und
Hintergrundgrafik auf gedruckten Namensschildern. Der Baustein ist in allen
Werkzeugen derselbe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GH42FE3UD2ht9qvNWRReDK
2026-10-05 14:31:22 +02:00
.forgejo/workflows CI: Rollout einheitlich nur ueber Tags, Bedingung am Schritt 2026-09-29 20:31:18 +02:00
app SVG-Erkennung: PNG mit SVG-Metadaten nicht mehr verwerfen (0.68.2) 2026-10-05 14:31:22 +02:00
bootstrap Intranet als Filament-Panel: Pages Start/Beitraege/Kalender/Dokumente, Profil, Meine-Daten-Link 2026-07-15 05:08:02 +00:00
config SVG-Erkennung: PNG mit SVG-Metadaten nicht mehr verwerfen (0.68.2) 2026-10-05 14:31:22 +02:00
database Apply security audit fixes and update vulnerable dependencies 2026-09-14 18:45:30 +02:00
docker Fix concurrent key bootstrap output and release build triggers 2026-09-14 19:24:07 +02:00
docs fix: handle temporary Livewire connection errors (0.65.2) 2026-09-24 08:49:03 +02:00
lang fix: handle temporary Livewire connection errors (0.65.2) 2026-09-24 08:49:03 +02:00
public fix: handle temporary Livewire connection errors (0.65.2) 2026-09-24 08:49:03 +02:00
resources Benutzermenue: Zusatzpunkte wieder als Eintraege des Aufklappmenues 2026-09-29 19:52:21 +02:00
routes Freigabe-Links: optionale Ansprechpartner und Downloads pro Link (v0.56.0) 2026-07-17 15:03:53 +00:00
storage Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
tests SVG-Erkennung: PNG mit SVG-Metadaten nicht mehr verwerfen (0.68.2) 2026-10-05 14:31:22 +02:00
.dockerignore Apply security audit fixes and update vulnerable dependencies 2026-09-14 18:45:30 +02:00
.editorconfig Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
.env.example Benachrichtigungen bei neuen Beitraegen: Glocke + optionale E-Mail, Opt-out im Profil, Scheduler fuer terminierte Beitraege 2026-07-15 06:11:12 +00:00
.gitattributes Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
.gitignore Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
.npmrc Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
artisan Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
CHANGELOG.md SVG-Erkennung: PNG mit SVG-Metadaten nicht mehr verwerfen (0.68.2) 2026-10-05 14:31:22 +02:00
composer.json Web-Push-Benachrichtigungen bei neuen Beitraegen (v0.54.0) 2026-07-16 11:06:41 +00:00
composer.lock Abhaengigkeiten mit Sicherheitshinweisen aktualisieren 2026-10-01 10:10:02 +02:00
docker-compose.build.yml Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
docker-compose.quickstart.yml Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
docker-compose.yml Apply security audit fixes and update vulnerable dependencies 2026-09-14 18:45:30 +02:00
Dockerfile Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
package.json fix: handle temporary Livewire connection errors (0.65.2) 2026-09-24 08:49:03 +02:00
phpunit.xml Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00
README.md Grundregel festhalten: wie allgemein die App bleibt 2026-09-21 20:01:08 +02:00
vite.config.js Grundgeruest Entra (Intranet): Suite-Skelett, Konfiguration, RBAC, Modul Beitraege 2026-07-14 21:00:39 +00:00

Entra

Intranet fuer Mitglieder von Vereinen und Verbaenden. Entra buendelt interne Inhalte (Beitraege/News, spaeter Dokumente, Kalender und Gruppenbereiche) in einer eigenstaendigen Anwendung und ergaenzt damit die natec-Suite (Vereo, Eveni, Kurea, Persona). Mitgliederdaten bleiben in Vereo; Entra konsumiert sie perspektivisch per API und teilt sich die Identitaet ueber Keycloak (SSO).

Module (Stand 0.x)

  • Mitglieder-Intranet (/intranet) — eigenes Filament-Panel fuer alle angemeldeten Benutzer: Start (angeheftete + aktuelle Beitraege), Beitraege mit Detailseite, Kalender, Dokumente, Profilseite; Anmeldung per E-Mail/Passwort oder Keycloak (optional mit Auto-Provisionierung). Benutzermenue mit "Meine Daten" (Link ins Vereo-Portal, konfigurierbar) und "Verwaltung" (nur fuer Benutzer mit Rollen).
  • Beitraege — interne News/Ankuendigungen mit Entwurf/Veroeffentlichung, Anriss, Rich-Text-Inhalt und Anheften.
  • Dokumente — Ordner-basierte Ablage mit Karten-Ansicht, Thumbnails und Inline-Vorschau (Bild/Video/Audio/PDF). Sichtbarkeits-Schalter; Dateien liegen auf der Files-Disk (lokal/S3).
  • Kalender — Termine mit Ort, Beginn/Ende oder ganztaegig; im Intranet nach Tagen gruppiert mit deutschen Wochentagen.
  • Gruppen — Gremien/AGs mit Mitglieder-Zuordnung; Beitraege, Termine und Dokument-Ordner lassen sich auf eine Gruppe einschraenken ("Sichtbar fuer").
  • Meine Dateien — persoenliche Dokumente je Mitglied (Bescheinigungen, Zertifikate); nur die Empfaengerin/der Empfaenger sieht sie im Intranet.
  • Globale Suche — ein Suchfeld ueber Beitraege, Termine, Dokumente und Meine Dateien; respektiert Sichtbarkeit und Gruppen.
  • Benachrichtigungen — Glocke (und optional E-Mail) bei neuen Beitraegen, respektiert Gruppen-Sichtbarkeit; Opt-out je Mitglied im Profil.
  • Reaktionen & Kommentare — Daumen/Herz und Kommentare auf Beitraegen; je Beitrag abschaltbar, Kommentare in der Verwaltung moderierbar.
  • Umfragen — optionale informelle Umfrage je Beitrag; Ergebnis als Balken nach der eigenen Stimme (rechtsverbindliche Abstimmungen bleiben in Vereo).
  • Gruppen-Raeume — je Gremium eine Seite mit dessen Beitraegen, Terminen, Dokumenten und Mitgliedern; erreichbar ueber "Meine Gruppen".
  • Mitgliederverzeichnis — freiwilliges Opt-in mit feldweiser Freigabe (E-Mail/Telefon/Kurzbeschreibung); nur zugestimmte Mitglieder sind sichtbar.
  • Wissensdatenbank — Artikel in Kategorien (Rich-Text), gruppen-sichtbar und in die globale Suche eingebunden.
  • Onboarding — Willkommens-Checkliste fuer neue Mitglieder auf der Startseite; abhakbar, ausblendbar und selbst-erledigend.
  • Beitragsstatistik — anonymer Aufrufzaehler je Beitrag (einmal pro Sitzung), sichtbar in der Verwaltung.
  • PWA — installierbar auf Homescreen/Desktop, gebrandete App-Icons, eigenes App-Fenster und Offline-Grundgeruest.
  • Konfiguration — Branding, Allgemein, E-Mail, SSO (Keycloak), Dateispeicher (lokal/S3), Datensicherung, Benutzermenue, Audit- und Mail-Log.
  • Benutzer & Rollen — RBAC (spatie/laravel-permission), Rollen super_admin und redaktion; entra:ensure-rbac legt Rollen/Berechtigungen idempotent an.

Geplant

  • Siehe docs/ROADMAP.md
  • Mitgliederverzeichnis (Opt-in) mit Live-Daten aus Vereo

Stack

Laravel 13, Filament v5, PostgreSQL 16, FrankenPHP, Docker Compose (Portainer). Details zum Betrieb: docker-compose.yml (Registry-Image) bzw. docker-compose.build.yml (lokaler Build). Der Entrypoint erzeugt beim ersten Start APP_KEY und optional den initialen Admin (ADMIN_EMAIL/ADMIN_PASSWORD).

Entwicklung

composer install
cp .env.example .env && php artisan key:generate
php artisan migrate --seed
php artisan serve

Tests: php artisan test (SQLite in-memory). Code-Stil: vendor/bin/pint --dirty.

Entwicklung

Grundsätze für Erweiterungen – was in den Kern gehört und was wegschaltbar sein muss: docs/entwicklung/grundsaetze.md.