Skip to content

Latest commit

 

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PowerClan

PHP Bootstrap Tests Coverage License PHPStan CI

Ein PHP/MySQL-basiertes Clan-Portal-Management-System.

Version: 2.3 (PHP 8.4 · Bootstrap 5.3) Lizenz: MIT Repository: https://github.com/schubertnico/PowerClan Projektseite: https://www.powerscripts.org/projects-4.html


Schnellstart (Docker, < 5 Minuten)

# 1. Repository klonen
git clone https://github.com/schubertnico/PowerClan.git
cd PowerClan

# 2. PHP-Dependencies installieren
composer install

# 3. Docker-Container starten (Web, MySQL, phpMyAdmin, Mailpit)
docker compose -f .docker/docker-compose.yml up -d

# 4. Im Browser Installation abschließen
#    http://localhost:8086/install.php
#    -> MySQL Hostname: db  /  User: powerclan  /  Passwort: powerclan_secure_2024
#    -> Datenbank: powerclan_v2.0  /  Port: 3306

# 5. Admin-Login-Daten aus der Installations-Mail holen
#    http://localhost:8034  (Mailpit Web-UI)

# 6. Einloggen
#    http://localhost:8086/admin/

Nach der Installation wird automatisch install.lock erzeugt – der Installer sperrt sich selbst. Zum erneuten Ausführen install.lock löschen.


Inhaltsverzeichnis


Features

  • Mitgliederverwaltung – Profil, Kontaktdaten, Hardware-Infos, Avatar
  • News-System – BBCode-Editor, Kategorien, Mehrautoren-Fähigkeit
  • Clanwar-Verwaltung – Ergebnisse, Berichte, Screenshots, Ligen
  • Rollenbasierte Rechtemember_*, news_*, wars_*, superadmin
  • Bootstrap-5-UI – komplette HTML-Ausgabe responsive (Public + Admin
    • Installer), Cards / Tables / Forms / Alerts / Badges / Sticky-Sidebar
  • Accessibility-orientierte Kontraste – WCAG-AA-/AAA-Niveau für Sehschwäche, Bedeutung nie nur über Farbe (Pille + Text + aria-label), 3 px Fokus-Indikator, sichtbarer Skip-Link
  • Lokale Asset-Auslieferung – Bootstrap aus assets/bootstrap-5.3.3/ (kein externes CDN nötig, deterministisch und offline-fähig)
  • CSRF-Schutz auf allen Formularen inkl. Login
  • Serverseitige Sessions (kein Passwort-Hash im Cookie)
  • Brute-Force-Drossel (max. 10 Loginversuche/Minute/Session)
  • HTTP-Security-Header (X-Frame-Options, X-Content-Type-Options, Referrer-Policy)
  • Mailpit-Integration für lokale Mail-Zustellung
  • Installer-Lockfile – verhindert versehentliche Re-Installation

Systemanforderungen

Komponente Version Hinweis
PHP 8.4+ Mit mysqli-Extension
MySQL 8.0+ Oder MariaDB 10.6+
Composer 2.x Für Entwicklung / Dependencies
Docker 24.x Optional, empfohlen

Installation

Mit Docker (empfohlen)

# 1. Repository klonen
git clone https://github.com/schubertnico/PowerClan.git
cd PowerClan

# 2. PHP-Dependencies installieren
composer install

# 3. Container starten
docker compose -f .docker/docker-compose.yml up -d

# 4. Container-Status prüfen (alle sollen 'healthy' sein)
docker compose -f .docker/docker-compose.yml ps

Ports & Dienste:

Service Container Port URL
Web (PHP 8.4) powerclan_web 8086 http://localhost:8086
MySQL 8.0 powerclan_db 3316 localhost:3316
phpMyAdmin powerclan_phpmyadmin 8089 http://localhost:8089
Mailpit (SMTP) powerclan_mailpit 1034 localhost:1034
Mailpit (UI) powerclan_mailpit 8034 http://localhost:8034

Installation abschließen:

  1. Aufruf: http://localhost:8086/install.php
  2. Im 2. Schritt MySQL-Host auf db setzen (Docker-intern), User powerclan, Passwort powerclan_secure_2024, Datenbank powerclan_v2.0, Port 3306
  3. Im 4. Schritt Nickname und E-Mail des ersten Superadmins eingeben
  4. Generiertes Passwort aus der Mailpit-UI abholen: http://localhost:8034
  5. Einloggen unter http://localhost:8086/admin/

Nach erfolgreichem Lauf wird install.lock im Projekt-Root angelegt. Dadurch wird install.php gesperrt (HTTP 403).

Ohne Docker

# 1. Repository klonen und Dependencies installieren
git clone https://github.com/schubertnico/PowerClan.git
cd PowerClan
composer install

# 2. Konfiguration anlegen
cp config.inc.php.example config.inc.php
# config.inc.php bearbeiten – MySQL-Zugangsdaten eintragen

# 3. Installation per Webbrowser starten
#    http://<dein-host>/install.php
#    Falls mail() nicht lokal zugestellt wird, Klartext-Passwort wird
#    zur Absicherung im Browser angezeigt.

# 4. Berechtigungen (Linux/macOS)
chmod 755 logs/
chmod 644 config.inc.php

Nutzung

Öffentliche Seiten

Seite Route Inhalt
Startseite /index.php News-Übersicht + letzte Wars
Mitglieder /member.php Mitgliederliste + Detailprofile
Wars /wars.php Clanwar-Übersicht + Berichte

Admin-Bereich

Funktion Route Benötigte Rolle
Login /admin/ Mitglied
Eigenes Profil /admin/profile.php Mitglied
News anlegen /admin/addnews.php news_add
News editieren /admin/choosenews.php news_edit
Wars anlegen /admin/addwar.php wars_add
Wars editieren /admin/choosewar.php wars_edit
Mitglieder anlegen /admin/addmember.php member_add
Mitglieder editieren /admin/choosemember.php member_edit
Konfiguration /admin/editconfig.php superadmin

Entwicklung

Qualitätssicherung

Tool Version Einstellung Zweck
PHPStan 2.x Level 8 Statische Analyse
Psalm 6.x Level 4 Strikte Typ-Analyse
PHP-CS-Fixer 3.x PSR-12 Code Style
PHPUnit 11.x 237 Tests (Unit/Int/Sec)
Infection 0.32.x Mutation Testing
Rector 2.x PHP 8.4 Automatisches Refactoring
PHPCS 4.x PSR-12 Code Sniffer

Wichtige Composer-Scripts

composer run check              # Komplett-Check (CS + PHPStan + Psalm + Tests)
composer run phpstan            # PHPStan Level 8
composer run psalm              # Psalm Level 4
composer run test               # Alle PHPUnit-Tests
composer run test:unit          # Nur Unit-Tests
composer run test:integration   # Nur Integration-Tests
composer run test:security      # Nur Security-Tests
composer run test:coverage      # Tests mit HTML-Coverage-Report
composer run infection          # Mutation Testing (benötigt Xdebug)
composer run rector:dry         # Rector-Vorschau
composer run rector             # Rector anwenden
composer run cs-fix             # Code Style automatisch fixen

Testsuite

tests/
├── bootstrap.php             # Test-Initialisierung
├── Unit/                     # Unit-Tests
│   ├── AdminFunctionsTest.php
│   ├── FunctionsTest.php
│   └── ValidationTest.php
├── Integration/              # Integration-Tests (DB + HTTP)
│   ├── IntegrationTestCase.php
│   ├── PageTestCase.php
│   ├── AuthenticationTest.php
│   ├── AdminPageTest.php
│   ├── FrontendPageTest.php
│   ├── MemberTest.php
│   ├── NewsTest.php
│   └── WarTest.php
├── Security/                 # Security-Tests
│   ├── CSRFProtectionTest.php
│   ├── SQLInjectionTest.php
│   └── XSSProtectionTest.php
└── Fixtures/                 # Test-Fixtures
    └── TestDatabase.php

CI/CD (GitHub Actions)

Bei jedem Push/PR laufen:

  1. PHP-Syntax-Check aller *.php-Dateien
  2. PHPStan Level 8
  3. Psalm Level 4
  4. PHPUnit mit Coverage
  5. Infection Mutation Testing
  6. Composer Audit (bekannte Sicherheitslücken)
  7. PHP-CS-Fixer (Code-Style)

Sicherheit

Eingebaute Schutzmaßnahmen:

  • SQL-Injection – ausschließlich Prepared Statements
  • XSS – Output-Escaping via e()/htmlspecialchars()
  • CSRF – Token auf allen POST-Formularen inkl. Login; Rotation nach Submit
  • Session-Management – serverseitige PHP-Sessions, session_regenerate_id() nach Login, Invalidierung bei Passwortwechsel
  • Passwort-Hashingpassword_hash(..., PASSWORD_DEFAULT) (bcrypt cost 12)
  • Legacy-Migration – base64-Passwörter werden beim ersten Login automatisch auf bcrypt umgestellt
  • Brute-Force-Drossel – 10 Fehlversuche/Minute/Session → HTTP 429
  • HTTP-Security-HeaderX-Content-Type-Options, X-Frame-Options, Referrer-Policy
  • Cookie-FlagsHttpOnly, SameSite=Lax, Secure unter HTTPS
  • Path-Traversal-Schutz in showpic.php
  • Installer-Lockfileinstall.php sperrt sich nach Abschluss

Details siehe SECURITY.md.

Sicherheitslücke melden: security@powerscripts.org


Changelog

Version 2.3 (Mai 2026)

Bootstrap-5-Migration & Accessibility-Optimierung:

  • Komplette HTML-Ausgabe auf Bootstrap 5.3.3 umgestellt (öffentliche Seiten, Admin-Bereich, Installer)
  • Bootstrap lokal unter assets/bootstrap-5.3.3/ ausgeliefert (offline-fähig, deterministisch, kein CDN-Abhängigkeit)
  • Public-Layout: Navbar mit Brand + Tag-Badge, container, Cards, responsive Tabellen, Bootstrap-Alerts, Footer
  • Admin-Layout: dunkle Topbar, Sticky-Sidebar mit Sektionsgruppierung (News / Clanwars / Member / Konfiguration), Card-basierte Login-Form, einheitliche Card-Layouts für alle Formulare
  • Gefährliche Aktionen (Löschen) mit card border-danger, dunkelroter Header, Warn-Alert und expliziter Doppelbestätigung – Bedeutung nie nur über Farbe
  • Status-Pillen für War-Ergebnisse (Gewonnen/Verloren/Unentschieden): weiße Schrift auf gesättigten dunklen Farben, zusätzlich aria-label und Tooltip
  • War-Statistik-Übersicht als Bootstrap-Stat-Cards mit Caps-Beschriftung
  • Wiederverwendbare Helfer: pc_render_war_map_cell() für War-Map-Markup, pc_admin_nav_active() für Sidebar-Highlighting
  • Header/Footer-Fallback in header.inc.php / footer.inc.php auf header.pc / footer.pc, falls pc_config.header/footer leer sind
  • getwarstats() und default_error() auf Bootstrap-Stat-Cards bzw. Bootstrap-Alerts umgestellt

Accessibility-Optimierung (WCAG-AA / AAA):

  • Bootstrap-Default-Farben in powerclan.css für Sehschwäche überschrieben (Sekundärtexte, Links, Status-Farben, Buttons, Cards)
  • Standard-Links: dunkleres Blau #0a4ea4, immer mit Underline
  • Form-Labels fett (font-weight: 600), Hilfetexte kontrastreicher und 0.9 rem groß
  • 3 px gelber Fokus-Indikator statt blass-blauer Bootstrap-Default-Schatten
  • Sichtbarer Skip-Link bei Tastatur-Fokus
  • Brand-Badge / Topbar-Status mit eigener pc-on-dark-Klasse statt blassem text-white-50
  • Logout-Button im Dunkelbereich: vollgelb mit schwarzer fetter Schrift statt blass-gelbem Outline
  • Tabellen-Header: dunklerer Hintergrund + dicke Trennlinie

Regression / Verifikation:

  • PHPStan Level 8 sauber
  • 67 Unit-Tests grün
  • Alle Public- und Admin-Routen liefern HTTP 200
  • Headless-Chrome-Screenshots für Desktop und Mobile
  • Kein Docker-Build – bestehende Container weiterverwendet
  • Bestehende Funktionalität (CSRF, Prepared Statements, Sessions, Brute-Force-Drossel) unverändert
  • Alle bestehenden Kommentare und DocBlocks erhalten

Details: docs/2026-05-10-Bootstrap-5-Migration-Accessibility.md

Version 2.2 (April 2026)

Audit-Fixes (33 Findings):

  • Installer hart abgesichert: Lockfile-Mechanismus, Prepared Statements, bcrypt statt base64, CSRF-Schutz, 16-Zeichen-Passwort, Klartext-Hinweis
  • Serverseitige PHP-Sessions statt Passwort-Hash im Cookie
  • Login-CSRF-Token, Fehlermeldung, serverseitige E-Mail-Format-Prüfung
  • Brute-Force-Drossel am Login
  • HTTP-Security-Header in admin/ und install.php
  • editmember.php: CSRF-Schutz, Integer-Bindung für icq/age, try/catch mit sichtbarer Fehlermeldung
  • CSRF-Token-Rotation nach jedem erfolgreichen Submit
  • addwar/editwar: checkdate()-Validierung + Stunden/Minuten-Range
  • News-Titel: kein strip_tags mehr (Output-Escaping reicht)
  • choose*.php: Aktionslinks nur bei Berechtigung
  • Mailpit-Container integriert (powerclan_mailpit), msmtp im Web-Container, UI-Warnung bei fehlgeschlagenem Mailversand in addmember/editmember
  • Zahlreiche UX-/Grammatik-Korrekturen
  • Dead-Code entfernt (admin/editmember2.php)
  • Dokumentation: docs/2026-04-23-Userbereichs-*.md (Bugs, Improvements, Test-Coverage)

Regressionsprüfung: 237 PHPUnit-Tests / 460 Assertions grün, PHPStan Level 8 sauber.

Version 2.1 (Januar 2026)

  • PHPStan Level 8, Psalm Level 4, Infection, PHPCS
  • 67+ Unit-Tests, 28 Security-Tests, CI/CD-Pipeline
  • CSRF-Schutz auf allen Admin-Formularen
  • SQL-Injection-Fixes mit Prepared Statements
  • XSS-Schutz via e()-Helper
  • Passwort-Migration base64 → bcrypt

Version 2.0 (2025)

  • PHP 8.4-Kompatibilität
  • declare(strict_types=1) in allen Dateien
  • Docker-Entwicklungsumgebung
  • Umstellung auf MIT-Lizenz

Dokumentation

Weiterführende Dokumente im Repository:

Datei Inhalt
README.md Dieses Dokument
readme.html HTML-Version der Dokumentation
SECURITY.md Security-Policy + Meldewege
CONTRIBUTING.md Mitwirken am Projekt
docs/2026-05-10-Bootstrap-5-Migration-Accessibility.md Bootstrap-5-Migration + WCAG-Kontraste
docs/2026-04-23-Userbereichs-bugs.md Audit-Report: 33 Bugs (alle behoben)
docs/2026-04-23-Userbereichs-improvements.md Audit-Report: 32 UX/Workflow-Vorschläge
docs/2026-04-23-Userbereichs-test-coverage.md Audit-Report: vollständige Testmatrix
docs/superpowers/plans/2026-04-23-userbereichs-bugs-fixen.md Fix-Plan zu den Audit-Findings

Online:


Kontakt & Impressum

Entwicklung & Vertrieb:

SchubertMedia
Inhaber: Nico Schubert
Stauffenbergallee 57
99085 Erfurt
Deutschland

Support:


Lizenz

MIT License – siehe LICENSE.

Copyright © 2001–2026 PowerScripts / SchubertMedia


PowerClan – https://www.powerscripts.org/projects-4.html

Releases

Packages

Contributors

Languages