Upload via GUI (1 Datei)
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||

|
||||
|
||||
**Aktuelle Versionen:** Server **1.0.29** · Android-App **3.1.0** · Windows-Programm **2.7.0** · Minecraft-Plugin **1.0.0**
|
||||
**Aktuelle Versionen:** Server **1.0.47** · Android-App **3.4.4** · Windows-Programm **2.10.2** · Minecraft-Plugin **1.0.0**
|
||||
|
||||
> Diese Anleitung ist auch für Einsteiger geeignet. Über das Inhaltsverzeichnis kommt ihr direkt zum gewünschten Thema. Die Abschnitte [Plugins entwickeln](#plugins-entwickeln) und [API und Webhooks](#api-und-webhooks-für-entwickler) richten sich an Entwickler.
|
||||
|
||||
@@ -31,9 +31,9 @@
|
||||
|
||||
### Demo-Video (mit Beispieldaten)
|
||||
|
||||
[](docs/video/deskhub-demo.mp4)
|
||||
[](DeskHub-Webseite/docs/video/deskhub-demo.mp4)
|
||||
|
||||
Klick auf die Vorschau öffnet das Video ([deskhub-demo.mp4](docs/video/deskhub-demo.mp4), Full HD, 30 Bilder pro Sekunde, etwa 1:50 Minuten, mit passender Musik). Alle Namen, Tickets und Antworten darin sind erfunden. Es ist eine echte Aufnahme mit Mauszeiger, Tippen und Scrollen: Kundenportal mit digitalem Assistenten, Anmeldung, Übersicht, Ticketliste, Ticket mit Wiedervorlage und Beobachtern, Verwaltung des Assistenten mit Fragen-Log und das Windows-Programm.
|
||||
Klick auf die Vorschau öffnet das Video ([deskhub-demo.mp4](DeskHub-Webseite/docs/video/deskhub-demo.mp4), Full HD, 30 Bilder pro Sekunde, etwa 1:50 Minuten, mit passender Musik). Alle Namen, Tickets und Antworten darin sind erfunden. Es ist eine echte Aufnahme mit Mauszeiger, Tippen und Scrollen: Kundenportal mit digitalem Assistenten, Anmeldung, Übersicht, Ticketliste, Ticket mit Wiedervorlage und Beobachtern, Verwaltung des Assistenten mit Fragen-Log und das Windows-Programm.
|
||||
|
||||
**Musik und Ton:** Die Musik folgt den Kapiteln des Videos (ruhiger Start, Zupf-Arpeggio im Kundenportal, Beat im Mitarbeiterbereich, voller Klang beim Assistenten, ruhiger im Windows-Programm, Riser und großer Schlussakkord zum Abspann). Dazu kommen leise Tipp-, Klick- und Übergangsgeräusche genau zu den Zeitpunkten der Aufnahme. Alles wird beim Bauen des Videos selbst erzeugt (`tools/demo-video/make_music.js`): reine Synthese aus einer einfachen Akkordfolge, ohne Aufnahmen, Samples oder fremde Melodien. Sie enthält damit nichts von Dritten und ist nicht bei GEMA oder einer anderen Verwertungsgesellschaft angemeldet. Wer das Stück weitergibt, sollte es auch nicht anmelden.
|
||||
|
||||
@@ -94,6 +94,8 @@ Klick auf die Vorschau öffnet das Video ([deskhub-demo.mp4](docs/video/deskhub-
|
||||
- [Rechte und Rollen](#rechte-und-rollen)
|
||||
- [Überwachung und Störungsmeldungen](#überwachung-und-störungsmeldungen)
|
||||
- [Windows-App und Android-App](#windows-app-und-android-app)
|
||||
- [Update-Hinweis in den Apps](#update-hinweis-in-den-apps)
|
||||
- [Minecraft-Plugin zum Herunterladen](#minecraft-plugin-zum-herunterladen)
|
||||
- [System-Update und Datenbank-Update](#system-update-und-datenbank-update)
|
||||
- [Import aus osTicket](#import-aus-osticket)
|
||||
- [Plugins verwenden](#plugins-verwenden)
|
||||
@@ -336,6 +338,8 @@ Dafür gibt es unter Adminportal → **Einstellungen → Cron-Jobs** drei Wege:
|
||||
|
||||
Nach der Installation müsst ihr nichts tun, Option A läuft von selbst.
|
||||
|
||||
**Empfehlung bei einem eigenen Server:** Richtet **Option B** (echten Cronjob) ein und schaltet danach den eingebauten Ersatz unter Einstellungen → Cron-Jobs ab. Der Ersatz läuft nach dem Senden jeder Seite im selben Prozess; ein langer Job (Backup, Mail-Abruf, Upload auf die NAS) belegt dann einen Webserver-Prozess, und hinter Cloudflare kann das zur Fehlerseite „524“ führen. Der Ersatz gibt die Sitzung vor dem Job frei, sodass er die nächste Seite desselben Mitarbeiters nicht mehr blockiert.
|
||||
|
||||
---
|
||||
|
||||
## Status und automatisch Offline
|
||||
@@ -370,9 +374,31 @@ Der Assistent beantwortet Fragen im Kundenportal und ersetzt dabei das Live-Chat
|
||||
|
||||
Android-App (ab 2.9.0, aktuell 3.1.0) und Windows-Programm (ab 2.7.0) haben die Verwaltung des Assistenten fest eingebaut (Verwaltung → „Digitaler Assistent“) mit fünf Bereichen: Einstellungen, zusätzliche Antworten (anlegen, ändern, löschen), Fragen-Log (Kennzahlen, Filter, Suche, häufige Fragen ohne Antwort mit „Antwort anlegen“, Log leeren), Gleichbedeutende Wörter und „Frage ausprobieren". Der Bereich erscheint nur für Administratoren und Mitarbeiter mit dem Recht „Digitalen Assistenten verwalten“; die Schnittstelle `api/staff/v1/assistant.php` prüft das Recht bei jedem Aufruf und trägt jede Änderung ins Admin-Protokoll ein.
|
||||
|
||||
## Mehrsprachigkeit (Sprachpakete als Plugin)
|
||||
|
||||
Der Quelltext von DeskHub ist deutsch. Jede weitere Sprache ist ein Plugin („Sprachpaket“) und braucht keine Änderung am Server: Paket installieren, aktivieren, fertig. Mitgeliefert sind `lang-en` (English) und `lang-de` (Deutsch, macht die Quellsprache im Wechsler sichtbar und dient als Vorlage). Besucher und Mitarbeiter wechseln über die **Flaggen** (Kundenbereich: oben in der Leiste, Anmeldeseiten: oben rechts, Mitarbeiterbereich: unten in der Seitenleiste); die Wahl steht in einem Cookie (`deskhub_lang`), sonst gilt die Standardsprache (Adminportal → Sprachen).
|
||||
|
||||
- **Aufbau eines Sprachpakets:** `plugin.json` (mit `"language": {"code":"fr","name":"Français","flag":"flag.svg","strings":"strings.json"}`, ohne Berechtigungen), `plugin.php` (leer), `flag.svg` (SVG oder PNG, höchstens 40 KB) und `strings.json`. Schlüssel = deutscher Text, Wert = Übersetzung; `{}` steht für wechselnde Teile („Willkommen, {}“ → „Welcome, {}“), `{#}` nur für Zahlen, `{1}`/`{2}` in der Übersetzung ändern die Reihenfolge.
|
||||
- **Wie übersetzt wird:** die fertige Seite wird durchsucht (Text zwischen Tags, `placeholder`/`title`/`alt`, Knopf-Beschriftungen, Texte in `confirm()`/`alert()`); ein Schlüssel muss dem deutschen Text genau entsprechen (Leerraum zählt nicht). Was nicht übersetzt ist, bleibt deutsch. Bei Deutsch läuft nichts davon, die Seiten kommen unverändert.
|
||||
- **Sammelmodus für Übersetzer:** Adminportal → Sprachen → „Sammelmodus“ merkt sich die Texte aller besuchten Seiten; „Vorlage laden“ liefert eine fertige `strings.json` mit allen Texten (Bereits Übersetztes ist eingetragen, der Rest leer).
|
||||
- **Stand English:** Kundenportal vollständig, Mitarbeiterbereich: Navigation, Seitentitel, Beschriftungen, Knöpfe, Meldungen und Rückfragen. Lange Hilfetexte in den Einstellungen und alle Daten (Tickets, Namen, E-Mail-Texte) bleiben deutsch. Nicht enthalten: Android-App, Windows-Programm und die Texte der automatischen E-Mails.
|
||||
|
||||
## Sprachen der Apps (Deutsch und English)
|
||||
|
||||
**Stand der Übersetzungen:** Das mitgelieferte English-Paket (`lang-en`, ab Version 1.1.0) enthält rund 2850 Einträge: Oberflächen, Meldungen und Fehlertexte. Fehlt noch etwas, zeigt euch der **Sammelmodus** (Adminportal → Sprachen) genau die deutschen Texte der besuchten Seiten ohne Übersetzung. Die Wörterbücher der Windows- und der Android-App (je rund 2050 Einträge) enthalten auch die Meldungen, die der Server an die Apps schickt. Texte, die ihr selbst in der Datenbank anlegt (Namen von Abteilungen, Status, Vorlagen), bleiben, wie ihr sie eingetragen habt.
|
||||
|
||||
Windows-Programm (ab 2.9.0) und Android-App (ab 3.3.0) gibt es auf **Deutsch und English**. Die Sprache wechselst du über die Flaggen (Windows: in der Kopfleiste und auf der Anmeldung; Android: unter „Mehr“ und auf der Anmeldeseite); ohne Wahl gilt die Sprache von Windows bzw. des Telefons. Die Apps nutzen dafür ein Wörterbuch (`desktop/src/lang-en.js`, `mobile/src/main/assets/lang_en.json`): Schlüssel = deutscher Text, `{}` = wechselnder Teil, `{#}` = Zahl. Was nicht im Wörterbuch steht, bleibt deutsch. Nicht übersetzt werden Daten vom Server (Tickets, Namen, Texte der E-Mails) und Benachrichtigungen, die der Server schickt. Die Beschriftungen des Android-Widgets folgen der Sprache des Telefons.
|
||||
|
||||
## Zufriedenheitsabfrage, Cc und Beobachter, Statusseite, Ticket-Vorlagen
|
||||
|
||||
- **Zufriedenheitsabfrage (CSAT):** Einstellungen → Allgemein → „Zufriedenheitsabfrage“. Nach dem Schließen oder Lösen eines Tickets (Wartezeit einstellbar, Standard 30 Minuten) bekommt der Kunde eine Mail mit fünf Sternen; ein Klick öffnet `csat.php`, gespeichert wird erst mit dem Knopf (so zählen automatische Link-Prüfungen nicht). Pro Ticket genau eine Abfrage, nur für Tickets, die nach dem Einschalten geschlossen werden; kein Spam, kein Live-Chat. Der Versand läuft über den Hintergrunddienst (`cron/send_csat.php`, alle 5 Minuten). Die Bewertung steht im Ticket (Web, App, Windows-Programm); die Auswertung (Durchschnitt, Rücklaufquote, Verteilung, nach Mitarbeiter, letzte Kommentare) auf der Übersicht im Web, im Windows-Programm unter Berichte und im Dashboard der App. Schnittstelle: `GET api/staff/v1/csat.php?days=30`.
|
||||
- **Cc und Beobachter:** Beobachter (Mitarbeiter) und Cc-Empfänger (E-Mail, bekommen die öffentlichen Antworten in Kopie) gab es im Web; jetzt auch in App und Windows-Programm (Karte „Beobachter und Cc“ im Ticket). Schnittstelle: `POST api/staff/v1/ticket_collaborators.php` (`add`/`remove`), `ticket.php` liefert `collaborators`, `followers` und `csat`.
|
||||
- **Statusseite:** Adminportal → Statusseite (Dienste mit Zustand In Betrieb/Wartung/Eingeschränkt/Ausfall, Störungsmeldungen mit Updates). Öffentlich unter `/status.php` (Link „Status“ im Kundenbereich, wenn eingeschaltet). Eine Meldung kann den Dienst gleich umstellen; „Behoben“ setzt ihn zurück, solange keine andere Meldung offen ist. In App und Windows-Programm unter Verwaltung → Statusseite (Zustände ändern und Meldungen veröffentlichen nur als Administrator). Schnittstelle: `api/staff/v1/status.php`.
|
||||
- **Ticket-Vorlagen:** Adminportal → Ticket-Vorlagen (Name, Betreff, Text, Abteilung, Hilfethema, Priorität; „für Kunden sichtbar“ zeigt sie auf „Neues Ticket“). Mitarbeiter wählen sie beim Anlegen eines Tickets im Web, im Windows-Programm und in der App (`GET api/staff/v1/ticket_templates.php`). Gepflegt werden die Vorlagen nur im Web.
|
||||
|
||||
## Weboberfläche aus den Apps öffnen
|
||||
|
||||
Das Windows-Programm (ab 2.6.0) zeigt in der Verwaltung zusätzlich die Seiten, die sie nicht selbst nachbauen: Einstellungen, Digitaler Assistent, Wiederkehrende Tickets, Textbausteine, Ticket-Felder, benutzerdefinierte Listen, Seiten, Webhooks, API-Schlüssel, Plugins, Backup, System-Update, Sicherheitsprüfung, Postfächer, osTicket-Import sowie Erwähnungen und Mitarbeiterverzeichnis. Im Ticket öffnet „Im Browser“ die Ticketseite (zusammenführen, aufteilen, drucken).
|
||||
Einstellungen, die es nur im Web gibt (Einstellungen, Backup, Plugins, API-Schlüssel, Webhooks, Ticket-Felder, Vorlagen, Seiten, Postfächer, …), zeigen Windows-Programm und Android-App **nicht mehr** an: Die Kacheln „(im Browser)“ in der Verwaltung des Windows-Programms (ab 2.9.0) sind entfernt, ebenso die Hinweise und der Knopf „Dienste verwalten“. Im Ticket öffnet „Im Browser“ die Ticketseite (zusammenführen, aufteilen, drucken).
|
||||
|
||||
- **Rechte:** Der Server (`api/staff/v1/web_pages.php`) liefert nur Seiten, die der Mitarbeiter öffnen darf (Administrator: alle; „Digitalen Assistenten verwalten“ und „E-Mail-Adressen verwalten“ als Einzelrechte; Erwähnungen und Verzeichnis für alle). Die Weboberfläche prüft die Rechte danach noch einmal selbst.
|
||||
- **Anmeldung:** Die App holt eine einmalige Adresse (`staff/app_login.php?t=…`), die 60 Sekunden gilt und nur einmal funktioniert; sie meldet im Browser an und leitet auf die Seite weiter. Jede Übergabe steht im Admin-Protokoll. Abgelaufene, benutzte oder erfundene Adressen führen zur Anmeldeseite. Dafür einmal „Datenbank aktualisieren“ (Migration 0047). Die Android-App 3.x enthält diese Browser-Übergabe nicht mehr; die Schnittstelle bleibt auf dem Server für das Windows-Programm.
|
||||
@@ -515,6 +541,19 @@ Wer bekommt was: ein **neues Ticket** bekommen alle Admins, Mitarbeiter der Abte
|
||||
**Datenschutz:** Standardmäßig steht nur „Neues Ticket #T-123“ in der Nachricht, Betreff und Kundenname verlassen euren Server nicht (auch der Push-Dienst sieht nur Ticketnummer und Geräte-Token). Wer mehr sehen will, schaltet „Betreff und Kundenname in der Benachrichtigung anzeigen“ ein. Jedes Gerät meldet sich beim Ausloggen ab. Pro Mitarbeiter sind bis zu 10 Geräte möglich; abgemeldete oder ungültige Geräte entfernt der Server selbst. Der Versand läuft nach dem Senden der Seite und bremst nichts.
|
||||
**Updates:** Die Android-App wird nur dann über die alte Version installiert, wenn sie mit demselben Signaturschlüssel erstellt wurde und eine höhere Versionsnummer hat. Nach einem Update die App einmal ganz schließen und neu öffnen.
|
||||
|
||||
|
||||
### Update-Hinweis in den Apps
|
||||
|
||||
Beide Apps (ab Windows 2.10.0 und Android 3.4.0) fragen beim Start und danach alle 6 Stunden den DeskHub-Server nach der neuesten Version. Der Server fragt die Plugin-Webseite (Schnittstelle `api/staff/v1/app_update.php`); der Zugangsschlüssel bleibt auf dem Server. Ist dort eine höhere Version veröffentlicht, zeigt die App oben ein Banner „Update verfügbar“ mit **Jetzt aktualisieren** und **Später**.
|
||||
|
||||
- **Windows:** Das Setup wird geladen, die SHA-256-Prüfsumme kontrolliert, das Setup gestartet und die App beendet. Im Entwicklungsmodus (nicht installiert) erscheint kein Hinweis.
|
||||
- **Android:** Die APK wird geladen und geprüft, dann öffnet sich der Android-Installer. Beim ersten Mal fragt Android einmalig nach „Aus dieser Quelle installieren“. Bei Installationen aus dem **Play Store** erscheint kein Hinweis (Google aktualisiert selbst).
|
||||
- **Veröffentlichen:** In der Plugin-Webseite unter **Apps** die Datei mit einer höheren Versionsnummer hochladen. Als aktuell gilt immer die **höchste** Version, nicht die zuletzt hochgeladene.
|
||||
- **Grenzen:** Die Prüfsumme stammt vom Server. Die Dateien sind nicht zusätzlich signiert (das Windows-Setup hat keine Code-Signatur). Ein Test geht am einfachsten so: Version N installieren, Version N+1 hochladen, die App neu starten.
|
||||
|
||||
### Minecraft-Plugin zum Herunterladen
|
||||
|
||||
Auf der Seite „Apps“ kann zusätzlich das Minecraft-Plugin (`DeskHub-Minecraft.jar`, siehe `minecraft-plugin/README.md`) erscheinen: mit Version, Größe, Prüfsumme und Kurzanleitung (Jar in `plugins`, `config.yml` ausfüllen, API-Schlüssel mit dem Recht „Tickets anlegen“, `/deskhubmc test`). Die Karte lässt sich unter **Einstellungen → System** („Minecraft-Plugin auf der Apps-Seite anzeigen“) ein- und ausblenden; ausgeblendet ist auch der Download gesperrt. Standard: aus. Die Jar veröffentlicht ihr wie die Apps in der Plugin-Webseite unter **Apps** (Plattform „Minecraft-Plugin (JAR)“).
|
||||
---
|
||||
|
||||
## System-Update und Datenbank-Update
|
||||
@@ -619,9 +658,26 @@ Unter `Plugins/plugins/tagesbericht-1.0.0.zip` (im Projektordner neben `DeskHub-
|
||||
|
||||
Nach Installation und Aktivierung findet ihr im Menü den Punkt **„Tagesbericht“**: Dort schaltet ihr den Versand ein, legt Uhrzeit, Werktage und Empfänger fest und könnt einen **Testbericht** an euch schicken. Voraussetzung ist der eingerichtete E-Mail-Versand.
|
||||
|
||||
### Mitgelieferte Plugins: Virenscan, Spamfilter, Discord/Telegram-Bot, Vertretung, Schichtübergabe, Rundmail, Überwachung, Datenschutz
|
||||
|
||||
Diese Plugins liegen als Zip unter `Plugins/plugins/`. **Alle außer dem Discord/Telegram-Bot laufen auf jedem DeskHub ohne Änderung am Server.** Die Plugins mit „Adminportal“ (Virenscan, Überwachung, Datenschutz) erscheinen mit den aktuellen Server-Dateien in der Gruppe „Verwalten“, sonst im Hauptmenü; ihre Seiten sind in beiden Fällen nur für Administratoren. Nur der **Discord/Telegram-Bot** braucht **DeskHub 1.0.30 oder neuer**: Er kommt mit dem normalen System-Update (Adminportal → Update), nur `version.php` und `bootstrap.php` muss man bei Updates weiterhin von Hand hochladen. Installation wie bei jedem Plugin: Adminportal → Plugins → Zip hochladen → Berechtigungen bestätigen → aktivieren. Jedes Plugin bringt eine eigene Seite im Menü mit.
|
||||
|
||||
| Plugin | Zip | Berechtigungen | Was es tut |
|
||||
|---|---|---|---|
|
||||
| **Anhänge-Virenscan** | `virenscan-1.2.0.zip` | hooks.tickets, hooks.cron, ui.menu, db.migrations | Prüft Anhänge neuer Tickets und Antworten und sperrt gefährliche Dateien (Quarantäne, interne Notiz, Tag „Virus-Verdacht“, Mail an den Administrator). **Braucht nichts auf dem Server:** Die eingebaute Dateianalyse erkennt Programme und Skripte, getarnte Dateien (zum Beispiel eine .exe als PDF), doppelte Endungen, Office-Makros, PDF-Tricks, Skripte in HTML/SVG und Archive mit solchen Dateien. Optional gleicht eine **Hash-Abfrage bei VirusTotal** (nur der SHA-256-Wert, kostenloser Schlüssel) Dateien mit bekannter Schadsoftware ab; ClamAV wird zusätzlich genutzt, falls es schon installiert ist. Erkennt keine ganz neuen Viren in normal aussehenden Dokumenten. Menüpunkt im Adminportal, nur für Administratoren. |
|
||||
| **Spam- und Missbrauchsfilter** | `spamfilter-1.0.0.zip` | hooks.tickets, ui.menu, ui.sidebar, db.migrations | Bewertet jedes neue Ticket mit Punkten (Phishing-Wendungen, Marken-Nachahmung im Absendernamen, Link-Verkürzer, Wegwerf-Adressen, Wiederholungen/Kampagnen; bekannte Absender bekommen Abzug). Ab 70 Punkten wird das Ticket automatisch als Spam abgelegt, ab 35 erhält es den Tag „Spam-Verdacht“. Freigabe- und Sperrliste, eigene Wörter, Protokoll mit Knöpfen „Kein Spam“ / „Doch Spam“ und eine Bewertung in der Seitenleiste des Tickets. |
|
||||
| **Discord- und Telegram-Bot** | `community-bot-1.0.1.zip` | **api.public**, hooks.tickets, ui.menu, db.migrations | Mitglieder legen mit `/ticket` im Discord oder in Telegram ein Ticket an, bekommen die Ticketnummer zurück und werden bei Antworten und bei Lösung benachrichtigt. Weitere Befehle: `/status`, `/antwort`. Der Server nimmt die Anfragen direkt entgegen (kein eigener Bot-Server); Anfragen werden per Signatur (Discord) bzw. Geheimtoken (Telegram) geprüft. Je Person gilt eine Obergrenze pro Stunde. Discord braucht die PHP-Erweiterung **sodium**. Einrichtung (Anwendungs-ID, Public Key, Bot-Token) auf der Plugin-Seite. |
|
||||
| **Urlaub und Vertretung** | `vertretung-1.0.0.zip` | hooks.tickets, hooks.cron, ui.menu, db.migrations | Mitarbeiter tragen Abwesenheit mit Vertretung ein. Zum Beginn gehen ihre offenen Tickets an die Vertretung, neue Tickets ebenfalls (auch bei der automatischen Zuweisung der Abteilung), am Ende kommen die noch offenen Tickets zurück. Setzt dafür den Urlaubsstatus im Profil. Braucht den Cron-Aufruf bzw. den Pseudo-Cron. |
|
||||
| **Schichtübergabe** | `schichtuebergabe-1.1.3.zip` | hooks.cron, ui.menu, ui.sidebar, db.migrations | Am Ende der Schicht schreibt ein Mitarbeiter eine kurze Notiz (für alle oder nur eine Abteilung). Die nächste Schicht sieht sie sofort nach der Anmeldung als deutlichen Hinweis oben auf jeder Seite (rot bei wichtigen Notizen, mit Text und Link), außerdem als „neu“-Zähler im Menü und, wenn wichtig, in der Seitenleiste jedes Tickets. Der Hinweis oben braucht die aktuellen DeskHub-Dateien (`staff/_header.php`, `includes/plugins.php`), sonst bleiben Zähler und Seitenleiste. Der Verfasser sieht, wer sie gelesen hat (auch als Bestätigung auf der Übersicht). Alte Notizen werden automatisch gelöscht (Frist nur für Administratoren). Für Mitarbeiter und Administratoren. |
|
||||
| **Störungsmitteilung und Rundmail** | `rundmail-1.0.0.zip` | hooks.cron, ui.menu, db.migrations | Eine Nachricht an viele Kunden gleichzeitig, zum Beispiel bei Wartung oder Ausfall. Empfänger: Kunden mit offenen Tickets, einer Abteilung oder einer Organisation. Mit Vorlagen, Empfängerprüfung, Probemail und Protokoll; jede Mail geht einzeln raus, der Versand läuft im Hintergrund. Mitarbeiter schreiben nur an Kunden ihrer eigenen Abteilungen (höchstens 200 Empfänger, 5 Rundmails pro Stunde). Für Mitarbeiter und Administratoren. |
|
||||
| **Website- und Server-Überwachung** | `ueberwachung-1.1.1.zip` | hooks.cron, ui.menu, db.migrations | Prüft Webseiten, Ports und Zertifikate. Bei Ausfall (nach 2 Fehlschlägen in Folge) oder einem Zertifikat, das in 14 Tagen abläuft, legt das Plugin ein Ticket an und schickt eine Mail; nach der Behebung kommt die Entwarnung und das Ticket wird gelöst. Der je Ziel eingestellte Prüfabstand (ab 1 Minute) wird eingehalten: Der Hintergrunddienst von DeskHub läuft jede Minute, mit dem echten Server-Cronjob (Einstellungen → Cron-Jobs → „Neu installieren / aktualisieren“) auch nachts ohne Besucher, sonst nur solange die Seite aufgerufen wird. Für ältere Dateien liegt ein eigener Cronjob bei (`plugins/ueberwachung/cron.php`). Menüpunkt im Adminportal, nur für Administratoren. |
|
||||
| **Datenschutz** | `datenschutz-1.2.0.zip` | hooks.cron, ui.menu, db.migrations | Kundendaten aus Tickets ohne Registrierung werden nach einer frei wählbaren Frist (Tage, Wochen, Monate oder Jahre; Standard 30 Tage nach dem Schließen) unwiderruflich anonymisiert. Welche Daten, bestimmen Sie selbst: nur Name, nur E-Mail-Adresse, beides oder komplett (auch IP, Mitleser, Zusatzfelder, Nachrichten und Anhänge). Daten registrierter Kunden bleiben bis zur Löschung auf Antrag, die der Administrator mit einem Klick ausführt. Die automatische Anonymisierung ist nach der Installation **aus** und muss bewusst eingeschaltet werden. Menüpunkt im Adminportal, nur für Administratoren. |
|
||||
|
||||
**Hinweis zur Berechtigung `api.public`:** Sie erlaubt einem Plugin eine ohne Anmeldung erreichbare Adresse (`/api/public/v1/plugin_webhook.php?p=<plugin>&e=<name>`). Der Bot prüft jede Anfrage selbst; trotzdem solltet ihr diese Berechtigung nur Plugins geben, denen ihr vertraut.
|
||||
|
||||
### Mitgeliefertes Plugin: Synology NAS Backup (WebDAV)
|
||||
|
||||
Unter `Plugins/plugins/nas-backup-2.2.0.zip` liegt ein Plugin, das die Backups eures Servers automatisch auf eine Synology NAS (oder einen anderen WebDAV-Server) kopiert. Es ist aufgebaut wie das Plugin „Tagesbericht“: Es braucht nur die Standard-Berechtigungen **hooks.cron** und **ui.menu** und verändert nichts am Kern von DeskHub. Installation: Adminportal → Plugins → Zip hochladen → Berechtigungen bestätigen → aktivieren. Danach gibt es auf der Seite **Backup** den Reiter **„Synology NAS Backup“** (kein eigener Menüpunkt in der Seitenleiste; nur Administratoren sehen ihn). Dafür braucht das Plugin keine zusätzliche Berechtigung.
|
||||
Unter `Plugins/plugins/nas-backup-2.6.3.zip` liegt ein Plugin, das die Backups eures Servers automatisch auf eine Synology NAS (oder einen anderen WebDAV-Server) kopiert. Es ist aufgebaut wie das Plugin „Tagesbericht“: Es braucht nur die Standard-Berechtigungen **hooks.cron** und **ui.menu** und verändert nichts am Kern von DeskHub. Installation: Adminportal → Plugins → Zip hochladen → Berechtigungen bestätigen → aktivieren. Danach gibt es auf der Seite **Backup** den Reiter **„Synology NAS Backup“** (kein eigener Menüpunkt in der Seitenleiste; nur Administratoren sehen ihn). Dafür braucht das Plugin keine zusätzliche Berechtigung.
|
||||
|
||||
**Auf der Synology einrichten:**
|
||||
1. Paket **„WebDAV Server“** installieren und **HTTPS (Port 5006)** aktivieren.
|
||||
@@ -638,6 +694,14 @@ Unter `Plugins/plugins/nas-backup-2.2.0.zip` liegt ein Plugin, das die Backups e
|
||||
- **Backups einzeln bewegen:** „Auf NAS“ für ein Backup, das noch nicht dort liegt, „Fehlende Backups jetzt kopieren“ für alle. Sicherungen, die **nur auf der NAS** liegen (zum Beispiel nach einem Serverumzug), holt ihr mit „Auf Server holen“; sie werden geprüft und lassen sich dann auf der Seite „Backup“ wiederherstellen.
|
||||
- **Eigene Backups des Plugins** (optional): Mit eigenem Zeitplan (stündlich bis monatlich, Uhrzeit), Inhalt (Datenbank und/oder Dateien, „wichtigste Dateien“ oder alles, Pfade ausschließen) erstellt das Plugin zusätzlich Backups, die nur auf der NAS liegen. „Eigenes Backup jetzt starten“ läuft im Hintergrund.
|
||||
|
||||
|
||||
**Große Backups (ab Plugin 2.4):** Manche Server oder Proxys vor der NAS nehmen nur Dateien bis zu einer Größe an (Cloudflare: 100 MB, Fehler „HTTP 413“). Das Plugin lädt solche Backups deshalb in **Stücken** hoch:
|
||||
1. **Als eine Datei (bevorzugt):** Jedes Stück trägt den Header `Content-Range` und sagt der NAS, wohin es gehört (Synology DSM 7 kann das). Auf der NAS liegt am Ende direkt die fertige `.zip`. Nach jedem Stück wird die Größe geprüft, damit ein Server, der den Header stillschweigend ignoriert, auffällt. Bei einem Fehler wird die halbe Datei gelöscht; pro Stück gibt es bis zu vier Versuche (3, 6, 12 Sekunden Pause).
|
||||
2. **Als Teile (Rückfall):** Kann die NAS das nicht, entstehen `backup_….zip.part001`, `.part002` … und zuletzt eine kleine Abschlussdatei `backup_….zip.parts` mit Größe und Prüfsumme. Erst mit ihr gilt die Sicherung als vollständig. Die Liste zeigt sie als **ein** Backup; „Auf Server holen“ setzt die Teile wieder zusammen und prüft die Prüfsumme. Von Hand zusammensetzen: `cat backup_….zip.part[0-9][0-9][0-9] > backup_….zip` (Linux/Synology per SSH) oder `copy /b backup_….zip.part0* backup_….zip` (Windows, bis 99 Teile).
|
||||
3. **Einstellungen** (Karte „Große Backups in Stücken hochladen“): „Wann in Stücken?“ (automatisch: erst ganz, bei Fehler in Stücken; immer; nie) und die **Stückgröße** von 10 bis 4000 MB (Standard 200 MB). Lehnt der Server ein Stück mit 413 ab, halbiert das Plugin die Größe selbst und merkt sich den Wert. Hinter Cloudflare (Gratis-Tarif) sind höchstens 100 MB je Stück möglich: dort 50 MB einstellen.
|
||||
|
||||
**Im Hintergrund und mit Zeitangabe:** „Eigenes Backup“, „Auf NAS“, „Fehlende kopieren“ und „Auf Server holen“ laufen nach der Antwort im Hintergrund (kein Warten, kein Cloudflare-Timeout). Das Ergebnis steht im Status, zum Beispiel „Backup erstellen: 12 Min, Hochladen: 4550 MB in 21 Min (3,6 MB/s)“; so seht ihr, ob die Zeit beim Erstellen oder beim Hochladen vergeht. Nach jedem Klick lädt sich die Seite neu (normale Adresse), sodass das automatische Neuladen alle 10 Sekunden den Klick nicht noch einmal absendet. Das Plugin nutzt ab DeskHub 1.0.45 die gemeinsame Backup-Sperre.
|
||||
|
||||
Gut zu wissen:
|
||||
- Jedes Backup wird nach dem Hochladen auf der NAS auf vollständige Größe kontrolliert; unvollständige Dateien werden wieder gelöscht.
|
||||
- Das Passwort wird verschlüsselt gespeichert. Zugangsdaten werden nie an Weiterleitungen geschickt. Ohne HTTPS sind nur Adressen im eigenen Netz erlaubt. Die Zertifikatsprüfung ist standardmäßig an und lässt sich für ein selbst erstelltes Zertifikat abschalten (dann weniger sicher).
|
||||
@@ -699,6 +763,7 @@ Ein Plugin muss die Erweiterungspunkte, die es registriert, in `permissions` ang
|
||||
| `ui.menu` | `plugin_register_menu` (Menüpunkt und Seite) |
|
||||
| `ui.sidebar` | `plugin_add_filter('ticket.view.sidebar', …)` |
|
||||
| `api.endpoints` | `plugin_register_api` |
|
||||
| `api.public` | `plugin_register_webhook`: öffentliche Adresse `/api/public/v1/plugin_webhook.php?p=<slug>&e=<name>` für Dienste wie Discord oder Telegram. Das Plugin prüft die Echtheit der Anfragen selbst (Signatur oder geheimes Token) und antwortet sonst mit 401. Handler: `fn(array $req): array` mit `method`, `headers` (Namen klein), `body` (roh, höchstens 256 KB), `query`, `ip`; Rückgabe `['status' => 200, 'json' => [...]]` oder `['status' => 200, 'body' => '…']`. |
|
||||
| `db.migrations` | Dateien in `migrations/` (werden beim Aktivieren eingespielt) |
|
||||
|
||||
Nicht geschützt sind `plugin_setting`, `plugin.uninstall.<slug>` und eigene Hooks zwischen Plugins. Wichtig: Das ist eine Prüfung der **Erweiterungspunkte**, keine Sandbox. Beliebiger PHP-Code im Plugin kann weiterhin auf Datenbank und Dateien zugreifen.
|
||||
@@ -824,6 +889,13 @@ Im Projektordner `plugin-webseite/` (neben `DeskHub-Webseite/`, nicht Teil der D
|
||||
|
||||
**Zugangsschutz des Katalogs:** `docker-build.sh` / `docker-build.ps1` erzeugen beim ersten Bauen einen Zugangsschlüssel (`schluessel/katalog-zugangsschluessel.txt`) und geben ihn am Ende aus. Tragt ihn in `includes/catalog_defaults.php` als `access_key` ein. Ohne diesen Schlüssel liefern Katalog, Downloads, Vorschaubilder und `publisher-key.php` nur `401`. `health.php` bleibt offen (Docker-Healthcheck). Nach dem Bauen: Image auf dem Server austauschen und ein DeskHub-Release mit dem eingetragenen Schlüssel veröffentlichen.
|
||||
|
||||
|
||||
**Verwaltung (`admin.php`):** Geordnet in Reiter: **Übersicht** (Zahlen, Systemstatus, Warnung bei fehlendem Zugangsschlüssel), **Pakete** (Plugins links, Themes rechts), **Apps** (Windows, Android und Minecraft nebeneinander, mit der aktuellen Version), **Push-Dienst** und **Einstellungen** (Werte für DeskHub, Abmelden). Die Seite hat ein Favicon, passt sich hell und dunkel an und funktioniert auf dem Handy.
|
||||
|
||||
**Apps und Minecraft-Plugin veröffentlichen:** Unter „Apps“ Plattform wählen (Windows-EXE, Android-APK, Minecraft-Plugin-JAR), Versionsnummer eintragen (zum Beispiel `3.4.4`), Datei hochladen, optional „Änderungen“ (erscheinen im Update-Hinweis der Apps). Die **höchste** Version gilt als aktuell. DeskHub bezieht sie über den geschützten Endpunkt `app-release.php` und zeigt sie auf der Seite „Apps“ an; die Apps zeigen daraus ihren Update-Hinweis.
|
||||
|
||||
**Upload-Grenzen:** Das Docker-Image erlaubt Uploads bis 310 MB (PHP) bzw. 320 MB (Caddy). Steht davor ein eigener Proxy, muss er es ebenfalls erlauben (nginx: `client_max_body_size 320m;`). Cloudflare im Gratis-Tarif lässt höchstens 100 MB je Upload zu. Ist eine Datei zu groß, meldet die Seite das mit den aktuellen Grenzen und meldet nicht mehr ab.
|
||||
|
||||
---
|
||||
|
||||
## API und Webhooks (für Entwickler)
|
||||
@@ -1045,6 +1117,16 @@ Adminportal → **Backup**:
|
||||
|
||||
Außerdem erstellt DeskHub automatisch ein Backup vor jedem System-Update, jedem Datenbank-Update und jeder Plugin-Aktivierung.
|
||||
|
||||
**Was im Backup steckt (und was nicht):**
|
||||
|
||||
- Enthalten sind die Datenbank und alle Dateien der Installation. **Nicht** enthalten ist der Ordner `backups/` mit den bisherigen Backups: Sonst enthielte jedes neue Backup alle älteren noch einmal und würde mit jedem Mal größer. Nur die `.htaccess` dieses Ordners kommt mit, damit er nach einer Wiederherstellung wieder geschützt ist. Das gilt für alle Wege (Seite „Backup“, Zeitplan, Updates, NAS-Plugin).
|
||||
- Bereits komprimierte Dateien (ZIP, Bilder, PDF, EXE, APK, JAR) werden nur abgelegt statt erneut gepackt. Das spart bei vielen Anhängen viel Rechenzeit.
|
||||
- Der Ordner `app_downloads/` gehört dazu. Seit die Apps über die Plugin-Webseite kommen, kann er leer bleiben; liegen dort große Dateien, dauert das Backup entsprechend länger.
|
||||
|
||||
**Nur ein Backup gleichzeitig:** Cronjob, eingebauter Hintergrunddienst, der Knopf „Backup erstellen“ und das NAS-Plugin teilen sich eine Sperre. Läuft schon eines, überspringen die anderen ihren Lauf; der Knopf meldet „Es läuft bereits ein Backup“. Eine Sperre, die nach 3 Stunden noch steht (abgestürzter Lauf), gilt als frei. Ohne diese Sperre konnten sich zwei Läufe überlappen, weil „letztes Backup“ erst nach dem Erstellen eingetragen wird.
|
||||
|
||||
**Lange Backups hinter Cloudflare:** Cloudflare beendet eine Anfrage nach 100 Sekunden mit der Fehlerseite „524“. Ein manuelles Backup läuft auf dem Server trotzdem zu Ende. Prüft dann die Liste, statt noch einmal zu klicken. Zuverlässiger sind der Zeitplan mit echtem Cronjob oder das Backup in kleineren Teilen (nur wichtige Dateien).
|
||||
|
||||
**Prüfen und Wiederherstellen:**
|
||||
|
||||
- **Automatische Prüfung:** Jedes neue Backup wird sofort nach dem Erstellen geprüft (manuell, per Zeitplan, vor Updates, vor Plugin-Aktivierungen). Noch nie geprüfte Backups und solche, deren letzte Prüfung über 7 Tage her ist, werden im Hintergrund nachgeprüft, damit auch spätere Beschädigungen auffallen. Das Ergebnis steht bei jeder Sicherung in der Liste („✔ geprüft“ / „✖ defekt“). Ein defektes Backup meldet DeskHub zusätzlich per E-Mail an die Admin-Adresse. Von Hand prüfen musst du nichts; „Prüfen“ gibt es weiter für den Fall, dass du sofort nachsehen willst.
|
||||
|
||||
Reference in New Issue
Block a user