diff --git a/README.md b/README.md index 3c5f030..ede3a45 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,14 @@ - Offline-Benachrichtigungen - Discord-Webhook mit Embeds & Rollen-Ping - Blacklist für Spieler -- **FAQ-System mit Kategorien** – eigene GUI mit Custom-Skull-Items, optionaler Kategorie-Auswahl-Screen, vollständige In-Game-Verwaltung; `faqs.yml` wird beim ersten Start automatisch mit Beispiel-Kategorien und -FAQs generiert +- **FAQ-System mit Kategorien** – eigene GUI mit Custom-Skull-Items, optionaler Kategorie-Auswahl-Screen, vollständige In-Game-Verwaltung; wahlweise `faqs.yml` oder MySQL-Speicherung, Migration per Befehl - **Performance-Caching** – TTL-basierter In-Memory-Cache reduziert Datenbankabfragen spürbar +- **Backup-System** – automatische JSON-Backups per `/ticket backup`, vor Migrationen, im `backups/`-Ordner +- **HTTPS/TLS-Unterstützung** – optionaler eingebetteter HTTPS-Server via JKS-Keystore (TLS 1.2+) +- **MySQL Auto-Reconnect** – bricht die Datenbankverbindung ab, stellt das Plugin sie automatisch wieder her +- **Brute-Force-Schutz** – IP-Sperre nach 5 Fehlversuchen im Web-Panel (15 Minuten) +- **Archiv-Verwaltung im Web-Panel** – archivierte Tickets einsehen, permanent löschen oder wiederherstellen +- **Benutzerverwaltung zur Laufzeit** – Web-Panel-Benutzer über die API anlegen, Passwort ändern, löschen - **Saubere Konsole** – minimale Start-Logs, kein unnötiger Spam - Erweiterbarkeit: viele Hooks - **BungeeCord-Unterstützung**: serverübergreifende Tickets, Teleports, Weiterleitungen, Benachrichtigungen @@ -57,6 +63,8 @@ | `/ticket faq edit \| ` | Bestehendes FAQ bearbeiten | Admin | | `/ticket faq delete ` | FAQ löschen | Admin | | `/ticket faq reload` | FAQs aus faqs.yml neu laden | Admin | +| `/ticket faq migrate [tomysql\|tofile]` | FAQs zwischen faqs.yml und MySQL migrieren | Admin | +| `/ticket backup` | Datenbank-Backup erstellen (JSON im backups/-Ordner) | Admin | | `/ticket kategorie add [&Farbe] [Beschreibung]` | FAQ-Kategorie hinzufügen | Admin | | `/ticket kategorie delete ` | FAQ-Kategorie löschen | Admin | | `/ticket kategorie list` | Alle FAQ-Kategorien auflisten | Admin | @@ -84,6 +92,19 @@ > `ticket.archive` ist nicht in `ticket.admin` enthalten und muss explizit vergeben werden. +### Web-Panel Benutzerrollen + +| Rolle | Tickets | Archiv | FAQ | Weiterleiten | +|------------------|:-------:|:------:|:---:|:------------:| +| `admin` | ✔ | ✔ | ✔ | ✔ | +| `archive_viewer` | ✔ | ✔ | ✗ | ✗ | +| `supporter` | ✔ | ✗ | ✗ | ✗ | + +- **Benutzernamen** sind case-insensitiv (Groß-/Kleinschreibung egal) und dürfen Sonderzeichen enthalten (`-`, `_`, `/` usw.) +- Passwörter werden beim ersten Start automatisch als SHA-256-Hash gespeichert +- Benutzer können zur **Laufzeit** über die Web-API angelegt, geändert und gelöscht werden — kein Neustart nötig +- **Brute-Force-Schutz**: 5 Fehlversuche → 15 Minuten IP-Sperre + --- ## Mehrsprachigkeit @@ -198,8 +219,12 @@ Jeder FAQ-Eintrag wird als **Custom-Skull-Item** angezeigt. Ein Klick zeigt die /ticket faq edit 1 Neue Frage? | Neue Antwort. /ticket faq delete 1 /ticket faq reload +/ticket faq migrate tomysql # faqs.yml → MySQL importieren +/ticket faq migrate tofile # MySQL → faqs.yml exportieren (mit automatischem Backup der alten faqs.yml) ``` +> `migrateFaqToFile()` erstellt automatisch ein Backup der bestehenden `faqs.yml` mit Zeitstempel bevor sie überschrieben wird. + Der optionale Kategorie-Schlüssel als erstes Argument weist die neue FAQ direkt einer Kategorie zu. Der Tab-Completer schlägt alle vorhandenen Schlüssel vor. Alternativ über die **Admin-FAQ-GUI**: Klick auf einen Eintrag öffnet eine Aktions-GUI mit **Bearbeiten** und **Löschen**. Neue FAQs per „Neues FAQ hinzufügen"-Button hinzufügen – die FAQ wird automatisch der aktuell geöffneten Kategorie zugeordnet. @@ -228,6 +253,64 @@ faqs: category: "tickets" ``` +### FAQ-Speicherung (MySQL oder Datei) + +FAQs können wahlweise in der `faqs.yml` oder direkt in der MySQL-Datenbank gespeichert werden. Der Speichermodus wird automatisch aus `use-mysql` in der `config.yml` übernommen – kein separater Schalter nötig. + +| `use-mysql` | FAQ-Speicher | +|-------------|---------------------------| +| `false` | `faqs.yml` (Standard) | +| `true` | MySQL (`faq_entries`, `faq_categories`) | + +**Migration von faqs.yml → MySQL:** +``` +/ticket faq migrate +``` +Importiert alle Kategorien und Einträge aus der `faqs.yml` in die Datenbank. Duplikate werden automatisch übersprungen, der Befehl ist also mehrfach sicher ausführbar. + +--- + +## Backup-System + +TicketSystem erstellt automatisch JSON-Backups der Ticket-Daten. + +``` +/ticket backup +``` + +Backups werden im Ordner `plugins/TicketSystem/backups/` gespeichert mit Zeitstempel im Dateinamen (`backup_tickets_YYYY-MM-DD_HH-mm-ss.json`). Das Backup wird außerdem automatisch vor jeder Datenmigration erstellt. + +- **MySQL-Modus**: Exportiert alle aktiven Tickets als JSON +- **Datei-Modus**: Kopiert die aktuelle `data.yml` / `data.json` + +--- + +## HTTPS / TLS + +Der eingebettete Web-Server unterstützt optionales HTTPS via Java Keystore (JKS). + +```yaml +web-panel: + ssl: + enabled: true + keystore-file: "keystore.jks" # im plugins/TicketSystem/-Ordner + keystore-password: "changeit" + key-password: "changeit" +``` + +**Self-Signed Zertifikat erstellen (für Tests):** +``` +keytool -genkeypair -alias ticketsystem -keyalg RSA -keysize 2048 -validity 365 -keystore plugins/TicketSystem/keystore.jks -storepass changeit +``` + +Für Produktion wird ein Let's Encrypt-Zertifikat oder ein Reverse-Proxy (Nginx/Apache) empfohlen. Wenn der Keystore fehlt, startet der Server automatisch ohne TLS. + +--- + +## MySQL Auto-Reconnect + +Bricht die MySQL-Verbindung während des Betriebs ab (z.B. Datenbankserver-Neustart), versucht das Plugin sie automatisch beim nächsten Datenbankzugriff wiederherzustellen — ohne Serverneustart. + --- ## Performance-Caching @@ -321,6 +404,11 @@ TicketSystem bietet volle Unterstützung für BungeeCord-Netzwerke: | Bewertungs-System | ✔️ | ✖️ | ✖️ | | Update-Checker | ✔️ | ✖️ | ✖️ | | BungeeCord-Unterstützung | ✔️ | ✖️ | ✖️ | +| Backup-System | ✔️ | ✖️ | ✖️ | +| HTTPS/TLS-Unterstützung | ✔️ | ✖️ | ✖️ | +| MySQL Auto-Reconnect | ✔️ | ✖️ | ✖️ | +| Brute-Force-Schutz Web-Panel | ✔️ | ✖️ | ✖️ | +| Archiv-Verwaltung Web-Panel | ✔️ | ✖️ | ✖️ | Legende: ✔️ Vollständige Unterstützung · ⚠️ Eingeschränkt · ✖️ Nicht vorhanden @@ -335,11 +423,14 @@ Legende: ✔️ Vollständige Unterstützung · ⚠️ Eingeschränkt · ✖️ > In der `config.yml` unter `categories:` – Name, Farbe, Material und Aliases frei wählbar. Änderungen mit `/ticket reload` übernehmen. **Wie verwalte ich FAQs?** -> Mit `/ticket faq` öffnest du die GUI. Als Admin kannst du über die GUI oder per `/ticket faq add|edit|delete` FAQs verwalten. Alle Daten liegen in der automatisch generierten `faqs.yml`. +> Mit `/ticket faq` öffnest du die GUI. Als Admin kannst du über die GUI oder per `/ticket faq add|edit|delete` FAQs verwalten. Daten liegen je nach Konfiguration in `faqs.yml` (Datei-Modus) oder in der MySQL-Datenbank. **Wie richte ich FAQ-Kategorien ein?** > Die `faqs.yml` wird beim ersten Start automatisch mit vier Beispiel-Kategorien erstellt. Neue Kategorien per `/ticket kategorie add [&Farbe] [Beschreibung]` hinzufügen, löschen per `/ticket kategorie delete `. Das Aussehen der Kategorie-Items wird in `config.yml` unter `gui-settings.faq.category-head-item` gesteuert. +**Wie verwalte ich das Archiv im Web-Panel?** +> Admins und Archive Viewer können archivierte Tickets über `/tickets?status=ARCHIVED` einsehen. Admins können einzelne Tickets permanent löschen (`deleteArchivedTicket`) oder in die aktive Datenbank wiederherstellen (`restoreArchivedTicket`). Die Aktionen stehen als Buttons in der Ticket-Detailansicht zur Verfügung. + **Was passiert mit Benachrichtigungen wenn ein Spieler offline ist?** > Alle Benachrichtigungen werden gespeichert und beim nächsten Login angezeigt. @@ -360,15 +451,6 @@ Legende: ✔️ Vollständige Unterstützung · ⚠️ Eingeschränkt · ✖️ --- -## Support, Community & Motivation - -Du hast Fragen, brauchst Hilfe oder möchtest Feedback geben? - -- [Discord Support](https://discord.com/invite/FdRs4BRd8D) -- [Git Issues](https://git.viper.ipv64.net/M_Viper/TicketSystem/issues) - -Wir antworten in der Regel innerhalb von 24 Stunden! - **Dein Feedback zählt:** Wenn TicketSystem deinen Server bereichert hat, freuen wir uns über eine 5-Sterne Bewertung auf SpigotMC! Jede Rückmeldung hilft, das Plugin weiter zu verbessern und die Community zu stärken. \ No newline at end of file